1. 程式人生 > >matlab 巴特沃斯濾波

matlab 巴特沃斯濾波


低通濾波

fs=30;              %取樣頻率
N=300;              %N/fs 秒資料
n=0:N-1;            
t=n/fs;             %時間

if 0
fl = 0.4;           %低頻
fh = 5;             %高頻
s=cos(2*pi*fl*t)+cos(2*pi*fh*t);    %s是0.4Hz和5Hz訊號疊加,低通截止頻率是1Hz
subplot(121);plot(t,s);
title('輸入訊號');xlabel('t/s');ylabel('幅度');
sfft=fft(s);
subplot(122);
plot((1:length(sfft)/2)*fs/length(sfft),2*abs(sfft(1:length(sfft)/2))/length(sfft));
title('訊號頻譜');xlabel('頻率/Hz');ylabel('幅度');
%設計低通濾波器,截止頻率為1
if 0
Wp=1/fs;Ws=2/fs;                %截止頻率為1Hz,阻帶截止頻率為2Hz
%估算得到Butterworth低通濾波器的最小階數N和3dB截止頻率Wn
[n,Wn]=buttord(Wp,Ws,1,50);     %阻帶衰減大於50db,通帶紋波小於1db
else
n=4;
Wn=1/(fs/2);
end
%設計Butterworth低通濾波器
[a,b]=butter(n,Wn);
[h,f]=freqz(a,b,'whole',fs);        %求數字低通濾波器的頻率響應
f=(0:length(f)-1*fs/length(f));     %進行對應的頻率轉換
figure;
plot(f(1:length(f)/2),abs(h(1:length(f)/2)));       %繪製幅頻響應圖
title('巴特沃斯低通濾波器');xlabel('頻率/Hz');ylabel('幅度');
grid;
sF=filter(a,b,s);                   %疊加函式s經過低通濾波器以後的新函式
figure;
subplot(121);
plot(t,sF);                         %繪製疊加函式s經過低通後時域圖形
title('輸出訊號');xlabel('t/s');ylabel('幅度');
SF=fft(sF);
subplot(122);
plot((1:length(SF)/2)*fs/length(SF),2*abs(SF(1:length(SF)/2))/length(SF));
title('低通濾波後頻譜');xlabel('頻率/Hz');ylabel('幅度');
end

帶通濾波

fl = 2;             %低頻
fh = 10;             %高頻
s=cos(2*pi*fl*t)+cos(2*pi*fh*t);    %s是2Hz和3Hz訊號疊加,帶通截止頻率是1Hz~4Hz

s=H;
N=3636;              %N/fs 秒資料
n=0:N-1;            
t=n/fs;             %時間

subplot(121);plot(t,s);
title('輸入訊號');xlabel('t/s');ylabel('幅度');
sfft=fft(s);
subplot(122);
plot((1:length(sfft)/2)*fs/length(sfft),2*abs(sfft(1:length(sfft)/2))/length(sfft));
title('訊號頻譜');xlabel('頻率/Hz');ylabel('幅度');
%設計帶通濾波器,截止頻率為0.4~5
n=4;
Wn=[0.4/(fs/2) 5/(fs/2)]

%設計Butterworth低通濾波器
[a,b]=butter(n,Wn);
[h,f]=freqz(a,b,'whole',fs);        %求數字低通濾波器的頻率響應
f=(0:length(f)-1*fs/length(f));     %進行對應的頻率轉換
figure;
plot(f(1:length(f)/2),abs(h(1:length(f)/2)));       %繪製幅頻響應圖
title('巴特沃斯帶通濾波器');xlabel('頻率/Hz');ylabel('幅度');
grid;
sF=filter(a,b,s);                   %疊加函式s經過低通濾波器以後的新函式
figure;
subplot(121);
plot(t,sF);                         %繪製疊加函式s經過低通後時域圖形
title('輸出訊號');xlabel('t/s');ylabel('幅度');
SF=fft(sF);
subplot(122);
plot((1:length(SF)/2)*fs/length(SF),2*abs(SF(1:length(SF)/2))/length(SF));
title('帶通濾波後頻譜');xlabel('頻率/Hz');ylabel('幅度');