【发布时间】:2015-05-03 02:03:18
【问题描述】:
我在 matlab 中使用前向和后向 fft 实现了一个简单的低通滤波器。 原则上可以,但最小值和最大值与原来的不同。
signal = data;
%% fourier spectrum
% number of elements in fft
NFFT = 1024;
% fft of data
Y = fft(signal,NFFT)/L;
% plot(freq_spectrum)
%% apply filter
fullw = zeros(1, numel(Y));
fullw( 1 : 20 ) = 1;
filteredData = Y.*fullw;
%% invers fft
iY = ifft(filteredData,NFFT);
% amplitude is in abs part
fY = abs(iY);
% use only the length of the original data
fY = fY(1:numel(signal));
filteredSignal = fY * NFFT; % correct maximum
clf; hold on;
plot(signal, 'g-')
plot(filteredSignal ,'b-')
hold off;
生成的图像如下所示
我做错了什么?如果我对这两个数据进行归一化,过滤后的信号看起来是正确的。
【问题讨论】:
-
您的滤波器需要像信号一样对称。为什么你期望 min 和 max 不会改变?没有理由。
-
请注意,尝试在频域中应用这样的“砖墙”滤波器会产生令人讨厌的伪影——您需要在频域中使用平滑函数(通常是窗口函数)。另请注意,您的滤波器增益未标准化,正如@thang 所指出的,您的滤波器应该是对称的,否则您将获得复杂的时域输出数据。
标签: matlab filtering fft lowpass-filter