数字信号处理:运用FFT简单滤波

通过快速Fourier变换我们可以知道信号序列中含有哪些频率成分,各个频率成分的振幅是多大。
通过快速Fourier逆变换我们可以把频率域的信号转化为时间域,从而得到与原信号长度相同的时间序列。
那么,我们就可以通过将频率域中的某些频率成分的振幅置零,然后运用逆变换到时间域实现滤波。
举例说明:

clear all
dt = 0.02;
N = 206;
n = 0:N-1;
t = n*dt;
f = n/(N*dt);
x =load('F:\matlab\impact\s.txt');
x =x';
subplot(2,2,1),plot(t,x);
y = fft(x);
subplot(2,2,2),plot(f,abs(y)*2/N);
f1 = 0;
f2 = 4;
yy = zeros(1,length(y));
for m =0:N-1
       if(m/(N*dt)>=f1&m/(N*dt)<f2)|(m/(N*dt)>(1/dt-f2)&m/(N*dt)<(1/dt-f1))
            yy(m+1) =0;
       else
            yy(m+1) =y(m+1);
       end
   end
subplot(2,2,4),plot(f,abs(yy)*2/N);
subplot(2,2,3),plot(t,real(ifft(yy)));

程序把0到4Hz的成分的振幅置零,然后逆变换得到过滤后的波形。效果似乎就是过滤掉了直流成分。
数字信号处理:运用FFT简单滤波