數字訊號處理:運用FFT簡單濾波

wcq829928發表於2018-09-30

通過快速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的成分的振幅置零,然後逆變換得到過濾後的波形。效果似乎就是過濾掉了直流成分。
在這裡插入圖片描述

相關文章