【发布时间】:2013-12-05 04:26:04
【问题描述】:
我正在尝试使用 FFT 和逆 FFT (IFFT) 在 Matlab 中过滤(真实)信号。我有一个 IIR 滤波器(系数“b”和“a”)。我期待(大约?)与我只是这样做的结果相同:
filteredSignal = filter(b,a,signal);
这就是我所做的:
NFFT = length(signal);
FFTsignal = fft(signal, NFFT);
FilterFreqResponse = freqz(b,a,NFFT);
FFTfilteredSignal = FFTsignal .* FilterFreqResponse;
filteredSignal = ifft(FFTfilteredSignal, NFFT);
这里的问题是生成的信号 (filteredSignal) 很复杂。我想要一个真实的信号(作为我的输入信号)。 filter 函数也返回一个真实信号。所以......我做错了什么?是否不可能将基于 FFT 的滤波与 IIR 滤波器一起使用?我的意思是:我的滤波器的频率响应相对于原点不是对称的,所以我的滤波信号的频谱也不会是对称的......所以时域中的滤波信号不可能是真实的......?
PS:ifft 函数中有一个“对称”选项:
filteredSignal = ifft(FFTfilteredSignal, NFFT, 'symmetric');
如果我这样做,filteredSignal 现在是真实的......但与我直接使用“过滤器”功能得到的信号明显不同(幅度和相位)。而这个“对称”选项显然会丢弃虚部或类似的部分,所以我想使用它可能不是一个好主意......
提前非常感谢! (对不起我的英语)
【问题讨论】: