数字信号实验4:数字滤波器设计

一、 实验目的
(1) 学习MATLAB中滤波器设计的相关函数的使用。
(2) 掌握使用MATLAB来设计滤波器的过程。
(3) 加深对数字滤波器常用指标的理解。
二、 实验内容
1、IIR滤波器设计。
采用matlab工具完成教材习题6.12

clc;
%巴特沃斯滤波器设计
%当wp和ws为一元矢量时:当wp>ws为高通滤波器,当wp<ws为低通滤波器
wp=0.05*2*pi;                             %设置通带频率
ws=0.03*2*pi;                            %设置阻带频率
Rp=1;                                   %设置通带波纹系数
Rs=25;                                  %设置阻带波纹系数        
fs=1000;                                %设置抽样频率1KHz
[N,Wn]=buttord(wp,ws,Rp,Rs,'s');      %N代表满足设计要求的滤波器的最小阶数,Wn是等效低通滤波器的截止频率
fprintf('巴特沃斯滤波器 N= %4d\n',N);  %显示滤波器阶数
[bb,ab]=butter(N,Wn,'high','s');      %求巴特沃斯滤波器系数,即求传输函数的分子和分母的系数向量
[Hb,wb]=freqs(bb,ab);               %求巴特沃斯滤波器频率响应
plot(wb*fs/(pi*2),20*log10(abs(Hb)),'b');        %作图
axis([0 100 -30 2]);
title('巴特沃斯模拟高通幅度响应/dB');
xlabel('f/Hz');
ylabel('幅值/dB');
line([0 max(wb*fs/(pi*2))],[-25 -25],'color','k','linestyle','--');
line([0 max(wb*fs/(pi*2))],[-1 -1],'color','k','linestyle','--');
line([30 30],[-30 2],'color','k','linestyle','--');
line([50 50],[-30 2],'color','k','linestyle','--');
grid on

clc;
%切比雪夫I型滤波器设计
%当wp和ws为一元矢量时:当wp>ws为高通滤波器,当wp<ws为低通滤波器
wp=0.05*2*pi;                           %设置通带频率
ws=0.03*2*pi;                           %设置阻带频率
Rp=1;                                   %设置通带波纹系数
Rs=25;                                  %设置阻带波纹系数        
fs=1000;                                %设置抽样频率1KHz
[N,Wn]=cheb1ord(wp,ws,Rp,Rs,'s');       %求切比雪夫I型滤波器阶数
fprintf('切比雪夫I型滤波器 N= %4d\n',N); %显示滤波器阶数
[bq1,aq1]=cheby1(N,Rp,Wn,'high','s');   %求切比雪夫I型滤波器系数,即求传输函数的分子和分母的系数向量
[Hq1,wq1]=freqs(bq1,aq1);             %求切比雪夫I型滤波器频率响应
plot(wq1*fs/(pi*2),20*log10(abs(Hq1)),'b');        %作图
axis([0 100 -30 2]);
title('切比雪夫I型模拟高通幅度响应/dB');
xlabel('f/Hz');
ylabel('幅值/dB');
line([0 max(wq1*fs/(pi*2))],[-25 -25],'color','k','linestyle','--');
line([0 max(wq1*fs/(pi*2))],[-1 -1],'color','k','linestyle','--');
line([30 30],[-30 2],'color','k','linestyle','--');
line([50 50],[-30 2],'color','k','linestyle','--');
grid on

clc;
%椭圆型滤波器设计
%当wp和ws为一元矢量时:当wp>ws为高通滤波器,当wp<ws为低通滤波器
wp=0.05*2*pi;                           %设置通带频率
ws=0.03*2*pi;                           %设置阻带频率
Rp=1;                                   %设置通带波纹系数
Rs=25;                                  %设置阻带波纹系数        
fs=1000;                                %设置抽样频率1KHz
[N,Wn]=ellipord(wp,ws,Rp,Rs,'s');       %求椭圆型滤波器阶数
fprintf('椭圆型滤波器 N= %4d\n',N);      %显示滤波器阶数
[be,ae]=ellip(N,Rp,Rs,Wn,'high','s');   %求椭圆型滤波器系数,即求传输函数的分子和分母的系数向量
[He,we]=freqs(be,ae);                 %求椭圆型滤波器频率响应
plot(we*fs/(pi*2),20*log10(abs(He)),'b'); %作图
axis([0 100 -30 2]);
title('椭圆型模拟高通幅度响应/dB');
xlabel('f/Hz');
ylabel('幅值/dB');
line([0 max(wq1*fs/(pi*2))],[-25 -25],'color','k','linestyle','--');
line([0 max(wq1*fs/(pi*2))],[-1 -1],'color','k','linestyle','--');
line([30 30],[-30 2],'color','k','linestyle','--');
line([50 50],[-30 2],'color','k','linestyle','--');
grid on

2、FIR滤波器设计。
采用matlab工具完成教材习题7.7

![在这里插入图片描述](https://img-blog.csdnimg.cn/2020121316082086.png)

```c
clc;clear all;
%fs=20kHz,fp=4kHz;fst=4.5kHz;
fs=20*1000;fp=4000;fst=4500;
%模拟频率转换为数字频率
wp=2*pi*fp/fs;wst=2*pi*fst/fs;
rp=0.5;As=60;
wc=(wp+wst)/2;%截止频率
wn=wc/pi;
deltaw=wst-wp;
N=ceil(11*pi/deltaw);M=N-1;%计算阶数,ceil返回大于或者等于指定表达式的最小整数
n=[0:N-1];
h=fir1(M,wn,blackman(N));%根据As选择blackman窗设计FIR数字滤波器
[H,W]=freqz(h);%频率响应
subplot(311);
stem(n,h,'*','linewidth',1);axis([ 0 200 0 0.5]);
title('布莱克曼窗');xlabel('n');ylabel('w(n)');grid on
subplot(312);
plot(W/pi,20*log10(H),'linewidth',2);axis([0 1 -120 20]);
title('频率幅度/dB');xlabel('角频率{\omega}/{\pi}');ylabel('20log(H(e^j^\omega))');
subplot(313);
axis([0 1 -4 4]);
plot(W/pi,-angle(H),'linewidth',2);
title('相位响应');xlabel('角频率{\omega}/{\pi}');ylabel('arg(H(e^j^\omega))');

![在这里插入图片描述](https://img-blog.csdnimg.cn/20201213212021631.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNDQxMjg0,size_16,color_FFFFFF,t_70)