IIR滤波器直接型与级联型的设计Matlab代码
clear;clc;
%%
[y,fs]=wavread('music1-2');
qq=16;
%% 设置滤波器参数
Wp=2*900;Ws=2*1500;Rp=0.1;Rs=60;Fs=32000;
wp=Wp/Fs;ws=Ws/Fs;
%% 选择滤波器类型
%[N,Wpo]=cheb2ord(wp,ws,Rp,Rs);%求切比雪夫2型归一化模拟低通滤波器的阶数
%[b,a]=cheby2(N,Rs,Wpo);%设计滤波器
[N,Wpo]=cheb1ord(wp,ws,Rp,Rs);%求切比雪夫1型归一化模拟低通滤波器的阶数
[b,a]=cheby1(N,Rp,Wpo);%设计滤波器
%[N,Wpo]=buttord(wp,ws,Rp,Rs);%求巴特沃斯型归一化模拟低通滤波器的阶数
%[b,a]=butter(N,Wpo);%设计滤波器
%[N,Wpo]=ellipord(wp,ws,Rp,Rs);%求椭圆型归一化模拟低通滤波器的阶数
%[b,a]=ellip(N,Rp,Rs,Wpo);%设计椭圆滤波器
%% 滤波器频响
[h,w]=freqz(b,a,1024);%求滤波器的幅频响应
h=20*log10(abs(h)/max(abs(h)));%幅度归一
figure;plot(w/2/pi*Fs,h);
title('滤波器的幅频响应');grid on;
bqr=intbR(b,qq);aqr=intbR(a,qq);
[hr,wr]=freqz(bqr,aqr,1024);
hr=20*log10(abs(hr)/max(abs(hr)));
%figure;plot((0:1023)/1024,hr);
figure;plot(w/2/pi*Fs,hr);
title('滤波器的量化后的幅频响应');grid on;
%% 级联处理
[sos,g]=tf2sos(b,a);
b1=sos(1,1:3);a1=sos(1,4:6);
b2=sos(2,1:3);a2=sos(2,4:6);
b3=sos(3,1:3);a3=sos(3,4:6);
b4=sos(4,1:3);a4=sos(4,4:6);
b5=sos(5,1:3);a5=sos(5,4:6);
% b6=sos(6,1:3);a6=sos(6,4:6);
% b7=sos(7,1:3);a7=sos(7,4:6);
% b8=sos(8,1:3);a8=sos(8,4:6);
% b9=sos(9,1:3);a9=sos(9,4:6);
%% 级联量化
bqr1=intbR(b1,qq); aqr1=intbR(a1,qq);
[h1,w1]=freqz(bqr1,aqr1,1024);
bqr2=intbR(b2,qq); aqr2=intbR(a2,qq);
[h2,w1]=freqz(bqr2,aqr2,1024);
bqr3=intbR(b3,qq); aqr3=intbR(a3,qq);
[h3,w1]=freqz(bqr3,aqr3,1024);
bqr4=intbR(b4,qq); aqr4=intbR(a4,qq);
[h4,w1]=freqz(bqr4,aqr4,1024);
bqr5=intbR(b5,qq); aqr5=intbR(a5,qq);
[h5,w1]=freqz(bqr5,aqr5,1024);
% bqr6=intbR(b6,qq); aqr6=intbR(a6,qq);
% [h6,w1]=freqz(bqr6,aqr6,1024);
% bqr7=intbR(b7,qq); aqr7=intbR(a7,qq);
% [h7,w1]=freqz(bqr7,aqr7,1024);
% bqr8=intbR(b3,qq); aqr8=intbR(a8,qq);
% [h8,w1]=freqz(bqr8,aqr8,1024);
% bqr9=intbR(b3,qq); aqr9=intbR(a9,qq);
%[h9,w1]=freqz(bqr9,aqr9,1024);
hh=h1.*h2.*h3;%.*h4;%.*h5.*h6.*h7;%.*h8.*h9;
hh=20*log10(abs(hh)/max(abs(hh)));
sos1=intbR(sos,qq);
%% 信号过系统
%yy=filter(bqr,aqr,y);
yy=filter(b,a,y);
Y=sosfilt(sos1,y);
%% 画图
figure;
%specgram(Y);
%sound(yy,fs);
%plot(20