使用 FIR 滤波器过滤光谱

Posted

技术标签:

【中文标题】使用 FIR 滤波器过滤光谱【英文标题】:Filtering spectrum using FIR filters 【发布时间】:2012-10-27 20:29:00 【问题描述】:

如果我有信号值 x[T] 和滤波器系数 b[i],我可以使用卷积进行滤波。

假设我有 x 的频谱(在 FFT 之后)并且我需要使用滤波器系数执行滤波,我该如何执行此操作?我听说在频域中它会相乘,而不是卷积(时域)。但我找不到使用它的方程式。我在 y = fft(x[T]) 向量中有 614000 个值和 119 个滤波器系数(使用 fdatool 生成),我不能直接将它们相乘......谢谢。

【问题讨论】:

【参考方案1】:

您将需要零填充信号值 x 的频谱和零填充(到相同长度)FIR 滤波器内核 b 的 FFT,以便通过乘法进行快速卷积。否则,如果没有零填充,您最终将进行循环卷积而不是线性卷积。

对于长数据向量和相对较短的 FIR 滤波器内核,为了避免需要非常长的 FFT 和 IFFT,您可能需要研究重叠相加或重叠保存快速卷积算法。

【讨论】:

我真的不明白“零填充”是什么意思,如果我将 x 在 [b, 0, 0....0] 上相乘,那么我将只保留 119(长度b 是 x 频谱中的 119) 个低频。 问题不再实际 如果 b 更短,则 b 的 FT 实际上更长。【参考方案2】:

您还需要将过滤器转换为频域。然后在频域中,您可以使用逐元素乘法。

http://en.wikipedia.org/wiki/Convolution_theorem

【讨论】:

抱歉,我不明白如何处理不同大小的 b 和 x。在频域 b 的长度也为 119,当 x 的长度为 614400 时,这就是问题...

以上是关于使用 FIR 滤波器过滤光谱的主要内容,如果未能解决你的问题,请参考以下文章

如何用FIR滤波器去除信号中噪声

数字信号处理相关0(FIR数字信号滤波器)

python中怎么生成基于窗函数的fir滤波器

使用MATLAB设计FIR滤波器

IIR和FIR滤波

IIR数字滤波器与FIR数字滤波器的定义?