Matlab 的 filter() 如何返回相同大小的信号?

信息处理 matlab fft 过滤器
2022-01-30 17:30:25

Oppenheim 的离散时间信号处理说,要使两个 DFT(即循环卷积)的乘积等于线性卷积,DFT 的长度必须至少为 P + L - 1,其中 P 和 L 是时域序列的长度用于计算 DFT。我理解这意味着数字滤波器的输出将比输入长。

Matlab 的 filter 函数返回一个与输入长度相同的序列。它是如何做到的?如果你不增加输出的长度,它如何避免你应该得到的时域中的混叠?

希望滤波器输出与输入具有相同的长度。我可以让输入和输出是正弦曲线的整数个周期,并避免任何频谱泄漏。要求对信号进行零填充以进行滤波使得不可能避免频谱泄漏。

1个回答

全卷积是 Lx + Lh - 1 个样本长。这可以被截断为两个有意义的子集,如conv().

filter()通常是一个 iir 过滤器,并且会有无限的输出。因此,它在输入长度处被截断。如果您愿意,您可以通过向 i/o 添加参数来读取最终状态并插入初始状态。

我认为 FIR 和 IIR 滤波的实现在时域中最容易理解。它只是一个 mults 循环,并添加了在延迟线上的工作。