設計低通濾波器-Matlab

clear ;close all;

filename ='./23.wav';
[x  ,fs] = audioread(filename);
parametricEQ = fdesign.parameq('N,Flow,Fhigh,Gref,G0,GBW,Gst', 2, 4700, 8000 ,0,-15,-5,-1,fs);
Hd = design( parametricEQ,'cheby2');
[b1 ,a1] =tf(Hd);
fvtool(Hd)


y1 = filter(b1,a1,x);
% y1 =y1*0.25;
% sound(y1,fs);
audiowrite('./out/out.wav',y1,fs);

第一種方式:按照濾波器設計理論中的公式進行, 設計好後畫出 頻響曲線圖!

clear ; clc; close all;
 filename ='21.wav';
 [x  ,Fs] = audioread(filename);

Fc =5500;

m=exp(-1/(Fs/Fc));
b = [1-m , 0];
a = [1 , -m] ;

[H ,f] = freqz(b ,a ,1000 , Fs );
figure(1)
plot(f , 20*log10(abs(H)));



y=filter(b,a,x);

audiowrite('./out/lowpass_fc_21out.wav',y,Fs);

第二種方式:

利用Matlab自帶的 均衡器設計函數: fdesign.parameq 。

 

clear  ; clc; close all;
filename ='./23.wav';
[x  ,fs] = audioread(filename);
fs2=fs/2;                       % 降採樣後採樣頻率的一半
fp1= 2500;                     % 通帶頻率
fs1= 5000;                     % 阻帶頻率
wp1=fp1/fs2;                    % 歸一化通帶頻率
ws1=fs1/fs2;                    % 歸一化阻帶頻率
Ap=3; As=30;                    % 通帶波紋和阻帶衰減
[n,Wn]=buttord(wp1,ws1,Ap,As);  % 求濾波器原型階數和帶寬
n =1;
[b,a]=butter(n,Wn);         % 求數字濾波器係數
% a=[ 1.0000   -0.3018]; 
% b = [ 0.3491    0.3491];
[H,f]=freqz(b,a,1000,fs);   % 求數字濾波器幅頻曲線

y1=filter(b,a,x);           % 對降採樣後的數據進行濾波
% figure(1)
% plot(f,(abs(H)))
figure(2)
plot(f,20*log10(abs(H)),'k');
grid; 
xlabel('頻率/Hz'); ylabel('幅值')
title('巴特沃斯濾波器的幅值響應')
set(gcf,'color','w');

audiowrite('lowpass.wav',y1,fs);

第三種方式:

利用buttord函數進行低通設計。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章