假设我有一个由 2Hz、10Hz、17Hz、19Hz 和 25Hz 离散时间正弦波组成的信号,我只需要允许 17Hz 分量通过。
据我所知,解决该问题的标准方法是实现带通滤波器。(模拟原型滤波器->模拟滤波器->使用双线性变换的数字滤波器)。
我们还可以对信号进行 DFT 并使用来自频谱的信息,然后重建 17Hz 分量,对吗?如果是,首选哪种方法,为什么?
假设我有一个由 2Hz、10Hz、17Hz、19Hz 和 25Hz 离散时间正弦波组成的信号,我只需要允许 17Hz 分量通过。
据我所知,解决该问题的标准方法是实现带通滤波器。(模拟原型滤波器->模拟滤波器->使用双线性变换的数字滤波器)。
我们还可以对信号进行 DFT 并使用来自频谱的信息,然后重建 17Hz 分量,对吗?如果是,首选哪种方法,为什么?
如果要拒绝的频率是给定的离散频率,并且采样率可以与这些频率相称,则可以进行移动平均滤波器,其系数经过旋转以将响应移至 17 Hz,以拒绝所有其他整数频率,如在下面的图中。
这是“外差系数”的概念,而不是外差信号。当我们外差一个信号时,该信号乘以一个复数旋转器 (在这个过程中,它会根据旋转的速度改变它的频率。以类似的方式,旋转系数将改变滤波器的响应。因此,您可以将信号移至滤波器,如下变频后跟低通滤波器......或将滤波器移至信号,如本例所示!
这是实现此过滤器的 Matlab/Octave 代码。
在这种情况下,采样率为 26 Hz,具有复杂的(I 和 Q)信号路径。
z=exp(j*2*pi/26);
coeff=z.^([0:25]*17);
[h,w]=freqz(coeff,26,2048,'whole');
plot(w/pi*13,20*log10(abs(h)))
grid on
axis([0 26 -50 0])
(注意,这是与 DFT 中的一个 bin 相同的频率响应)
系数本身遵循以下复杂图表中所示的模式,其中前 5 个系数被标记,其余的可以沿着所示的轨迹线跟随。观察到每个系数的大小为 1(如在移动平均滤波器中),但相位连续旋转,这导致频率响应以旋转速率移动。
更新: 正如@MarcusMüller 在评论中进一步建议的那样,在这种情况下,实际上执行信号零差后跟低通滤波器可能会更简单,因为 OP 对感兴趣的信号具有可变条件。假设要被拒绝的干扰仍然是离散的音调,与感兴趣的信号具有整数间隔关系(信号不必是整数频率,但它们的间隔必须是整数倍,因为移动平均滤波器的零点将位于n/T Hz 其中 n 是任意整数,T 是移动平均的持续时间(以秒为单位)。
所以在这种情况下,我们首先将信号乘以然后使用移动平均滤波器(这意味着两个滤波器,一个用于 I(同相或实数)路径,一个用于 Q(正交或虚数)路径)跟随(复数)输出。在这种情况下,移动平均长度为最低必须是:
2Hz、10Hz、17Hz、19Hz和25Hz
将 17 移动到 0:
-12Hz、-7Hz、0Hz、2Hz、8Hz
最小公倍数是 1,因此需要 1 秒的移动平均值和相应的采样率。此外,正如@MarcusMüller 所建议的那样,这种移动平均结构可以实现为 CIC 抽取滤波器。输出将是感兴趣信号的“直流等效值”,具有与 17 Hz 信号相同的幅度和相位。此外,如果所需信号的频率发生变化,则可以在一个位置更改相位旋转器,而不是像我所做的那样更新抽头。
如需进一步阅读,请参阅:
相位旋转器:用于相量实现的数控振荡器 (NCO)?
CIC:CIC 级联积分器-梳状频谱
还需要注意的是,基于旋转指数平均滤波器的二阶谐振器(或这些结构中的两个的级联)是一种滤波方法。(参见振动信号的 FFT 分析)。此过滤器结构的图像在下面复制(有关变量含义以及如何计算它们的详细信息,请参见链接):
仅当 17 Hz 分量和所有其他分量是纯未调制正弦曲线时,裸 DFT/IDFT 方法才有效,这些正弦曲线在 DFT 孔径中完全是整数周期。
如果不是,对于采样信号,FIR 带通滤波器方法(甚至可以通过使用 FFT/IFFT 的重叠添加/保存快速卷积来实现)可能更合适。可能与 FIR 或 IIR 陷波滤波器组合或级联。
对于模拟信号,您可能还需要考虑将其留在模拟域中,并且在对其进行滤波时不进行任何数字处理。