%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%巴特沃斯、切比雪夫I型、椭圆低通滤波器 %%%
%%%同参数的幅频特性图和所需阶数的设计比较%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%fpp = input('请输入通带截止频率(KHz):');
%fss = input('请输入阻带截止频率(KHz):');
%Rp = input('请输入通带最大衰减(dB):');
%As = input('请输入通带最小衰减(dB):');
%fp = fpp * 1000;
%fs = fss * 1000;
fp = 20000;fs = 28000;Rp = 3;As = 40;
%巴特沃斯——滤波器设计
[N_but,fc_but] = buttord(fp,fs,Rp,As,'s'); %计算率波器的阶数和3dB截止频率
disp(['巴特沃斯滤波器所需阶数:',num2str(N_but)]);
disp(['巴特沃斯滤波器通带截止频率(KHz):',num2str(fc_but/1000)]);
[B,A] = butter(N_but,fc_but,'s'); %计算低通滤波器系统函数分子分母多项式
[hf,f] = freqs(B,A,1024*16); %计算系统频率响应
%切比雪夫I型——滤波器设计
[N_che,fc_che] = cheb1ord(fp,fs,Rp,As,'s');
disp(['切比雪夫I型滤波器所需阶数:',num2str(N_che)]);
disp(['切比雪夫I型滤波器通带截止频率(KHz):',num2str(fc_che/1000)]);
[B1,A1] = cheby1(N_che,Rp,fc_che,'s');
[hf1,f1] = freqs(B1,A1,1024*16);
%椭圆——滤波器设计
[N_ell,fc_ell] = ellipord(fp,fs,Rp,As,'s');
disp(['椭圆滤波器所需阶数:',num2str(N_ell)]);
disp(['椭圆滤波器通带截止频率(KHz):',num2str(fc_ell/1000)]);
[B2,A2] = ellip(N_ell,Rp,As,fc_ell,'s');
[hf2,f2] = freqs(B2,A2,1024*16);
subplot(1,20,[1,16]);
plot(f/1000,20*log10(abs(hf)),...
f1/1000,20*log10(abs(hf1)),':',...
f2/1000,20*log10(abs(hf2)),'--','linewidth',2);
grid on,xlabel('频率(KHz)'),ylabel('幅度(dB)');
title('巴特沃斯、切比雪夫I型、椭圆模拟滤波器幅频特性图');
axis([0,(fs/1000)*1.1,-As-5,5]);
line([0,(fs/1000)*1.1],[-Rp,-Rp]);%通带最大衰减标识线
line([fp/1000,fp/1000],[-As-5,5]);%通带截止频率标识线
legend('Butterworth','Chebyshev','Elliptic');
N = [N_but;N_che;N_ell]';
subplot(1,20,[18 20]);
bar(N,'group');
title('滤波器阶数');
评论0