- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 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现在是真实的......但与我直接使用“filter”函数得到的信号明显不同(在幅度和相位上)。这个“对称”选项显然丢弃了虚部或类似的东西,所以我想使用它可能不是一个好主意......
提前非常感谢! (抱歉我的英语)
最佳答案
仅使用结果的实部是不正确的,
你的答案很复杂的原因是逐点乘法没有对称地执行:即为了使答案有意义,向量 FilterResponse 必须关于其中心元素对称。您应该仅构建高达 Fs/2(即较小的矢量)的滤波器响应,然后编写一些逻辑以将其共轭对称地应用于镜像频率。或者,Matlab 可以通过以下方式自动为您执行此操作:FilterFreqResponse = freqz(b,a,NFFT,'whole')
只有这样,“对称”选项才应与 ifft 一起使用,因为其目的是防止您创建的对称性之间可能存在的小数值误差。
关于MATLAB:使用 FFT/IFFT 和 IIR 滤波器在频域中进行滤波,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20108462/
我正在执行以下操作:执行 FFT/削减 FFT 结果中高于 100Hz 的每个频率/执行逆 FFT 如果原始数据集没有偏移量,它效果很好!如果它有偏移,则输出结果幅度会被损坏。 示例: Without
我从这里得到了 Bw BP C 代码,https://www-users.cs.york.ac.uk/~fisher/mkfilter ,正如其他操作系统主题中所评论的那样,并进行了 250Hz,第
我想使用窗口函数制作一个 FIR 滤波器。我有一些样本数据,size 变量是样本数。 windowSize 变量是窗口函数的大小。首先我创建窗口函数(blackman 窗口):变量 window然后我
我是一名优秀的程序员,十分优秀!