我在 Matlab 中有一个由signal
and定义的信号t
。由于它是一个嘈杂的信号,我想用 FFT 删除低于某个给定频率“x”Hz 的每个分量。我怎么能做到?我猜这个过程是对信号进行 FFT,删除这些组件然后应用 IFFT,但我不知道如何实现它。任何帮助表示赞赏!
使用 FFT 和 IFFT 删除频率分量
信息处理
matlab
fft
IFFT
2022-02-04 18:29:19
1个回答
事实上,从 FFT 中删除某个频率范围等于将这些频率分量设置为零。因此,您最终得到以下代码:
N = 1000;
signal = randn(N, 1);
N_clear = 490;
% Remove the calls to fftshift, if you want to delete the lower frequency components
S = fftshift(fft(signal));
S_cleared = S;
S_cleared(1:N_clear) = 0;
S_cleared(end-N_clear+2:end) = 0;
S_cleared = fftshift(S_cleared);
signal_cleared = ifft(S_cleared);
subplot(2,2,1);
plot(signal);
title('input signal');
subplot(2,2,2);
plot(abs(S));
title('input spectrum');
subplot(2,2,3);
plot(abs(S_cleared));
title('output spectrum');
subplot(2,2,4);
plot(signal_cleared);
title('output signal');
如您所见,输入信号变化非常快。然后,在滤除几乎所有较高频率的部分后,您会得到一个平滑的信号。
请注意,通常您使用 FIR/IIR 低通/高通滤波器进行实时信号处理,因为 FFT 是基于块的,不能在处理的块之间产生良好的转换。
其它你可能感兴趣的问题