gpt4 book ai didi

MATLAB:使用带 IIR 滤波器的 FFT/IFFT 在频域中进行滤波

转载 作者:行者123 更新时间:2023-12-02 04:44:21 24 4
gpt4 key购买 nike

我正在尝试使用 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 现在是真实的...但与我直接使用“过滤器”功能得到的信号明显不同(在幅度和相位上)。而且这个“对称”选项显然丢弃了虚部或类似的东西,所以我猜使用它可能不是一个好主意....

提前致谢! (对不起我的英语)

最佳答案

只使用结果的实部是不正确的,

您的答案很复杂的原因是点乘法没有对称执行:即为了使答案有意义,向量 FilterResponse 必须关于其中心元素对称。您应该只构建高达 Fs/2(即较小的向量)的滤波器响应,然后编写一些逻辑以将其共轭对称地应用于镜像频率。或者,Matlab 可以通过以下方式自动为您执行此操作:FilterFreqResponse = freqz(b,a,NFFT,'whole')

只有这样,'symmetric' 选项才能与 ifft 一起使用,因为它的目的是防止您创建的对称性之间可能存在的小数值错误。

关于MATLAB:使用带 IIR 滤波器的 FFT/IFFT 在频域中进行滤波,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20108462/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com