借助 dsp-collection 库实现 java 数字滤波器。
在网上搜索“使用 java 实现数字滤波器”,搜索结果大多是利用 MATLAB 生成滤波器系数 a 、 b,然后在 java 中进行滤波,但是我的需求是整个过程完全在 java 中完成。之后搜索“ java 实现 DSP Filter ”则在stackoverflow中找到了解决办法。
dsp-collection 库 支持多种 IIR 滤波器,包括巴特沃斯,切比雪夫和贝塞尔滤波器。笔者在这里使用的是巴特沃斯滤波器。其他的请参考 API 文档 。
仿真信号:
f ( t ) = s i n ( 10 π t ) + s i n ( 30 π t ) f(t)=sin(10 \pi t)+sin(30 \pi t) f(t)=sin(10πt)+sin(30πt)
其中包含 5Hz 和 15Hz 两个频率分量,信号的采样率为 50Hz :
double[] time = new double[150];
double[] valueA = new double[150];
for (int i = 0; i < 50 * 3; i++) {
time[i] = i / 50.0;
valueA[i] = Math.sin(2 * Math.PI * 5 * time[i])+Math.sin(2 * Math.PI * 15 * time