- 代碼如下這里直接使用了matlab中的fir1函數進行濾波,具體fir1函數如何使用可以百度
Fs=2048; %采樣頻率,根據香農采樣定理,被采樣信號頻率不可以高於采樣頻率的一半,否則無法恢復出原信號
%產生的信號頻率小於Fs/2,如果不滿足此條件會發生信號頻率的混疊,達不到預期的濾波效果
dt=1.0/Fs;
T=1;N=T/dt;t=[0:N-1]/N
x1=sin(2*pi*50*t)+sin(2*pi*300*t)+sin(2*pi*500*t); %產生一個頻率為 50,300,500Hz的信號
subplot(3,1,1);plot(t,x1); %繪制輸入信號
axis([0,0.1,-2,2]); %將x軸范圍限制在0-0.1,y軸限制在-2到2
P=fft(x1,N); %對信號進行傅里葉變換
Pyy=2*sqrt(P.*conj(P))/N;
f=linspace(0,Fs/2,N/2);
subplot(3,1,2);plot(f,Pyy(1:N/2)); %畫出信號頻譜圖
b=fir1(48,0.1); %濾波器取48長度,截至頻率為0.1,取出低頻信號,這里使用了matlab濾波函數
%b=fir1(48,[0.2 0.4]); %產生帶通濾波器,取出中間的信號,濾去兩邊信號
%b=fir1(48,0.4,'high'); %讓高頻通過濾除兩邊信號
x2=filter(b,1,x1);
subplot(3,1,3);plot(t,x2);axis([0,0.1,-2,2]); %繪制濾除后的信號
- 濾波效果圖如下
