基于fft的FIR滤波采用重叠加法
fftfilt
滤波数据使用高效的基于fft的方法交叠相加[1],一种频域滤波技术,它只适用于FIR滤波器,通过组合输入序列的连续频域滤波块。由fftfilt
在时域中用差分方程表示:
一个等价的表示是z变换或频域描述:
fftfilt
使用fft
实现重叠添加方法。fftfilt
中断输入序列x
到长度l数据块,l必须大于过滤器长度N.
然后用过滤器对每个块进行卷积b
通过
y =传输线(fft (x(我+ l - 1), nfft)。* fft (b, nfft));
在哪里nfft
为FFT长度。fftfilt
将连续输出部分重叠为n - 1
点,n
为滤波器的长度,并将它们相加。
fftfilt
选择关键参数l
和nfft
以不同的方式,这取决于你是否提供一个FFT长度n
用于滤波器和信号。如果没有指定值n
(决定FFT长度),fftfilt
自动选择这些关键参数:
如果长度(x)
大于长度(b)
,fftfilt
选择将每个FFT的块数乘以失败数最小化的值。
如果长度(b)
是大于还是等于长度(x)
,fftfilt
使用一个长度的FFT
2^nextpow2(length(b) + length(x) - 1)
这个计算
y =传输线(fft (B, nfft)。* fft (X, nfft))
如果你提供一个值n
,fftfilt
选择一个FFT长度,nfft
的,2 ^ nextpow2 (n)
和数据块长度nfft
-长度(b)
+1
.如果n
小于长度(b)
,fftfilt
集n
来长度(b)
.
Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck。离散时间信号处理.第二版。上鞍河,新泽西:普伦提斯霍尔,1999。