实验六 基于MATLAB的IIR数字滤波器设计

一、实验目的:

1.加深对IIR数字滤波器常用指标的理解;
2.学会设计IIR数字滤波器;
3.根据指标要求设计数字滤波器,并进行信号的处理。

二、实验原理:

1.脉冲响应不变法

MATLAB提供impinvar(num,den,Fs)函数,可以实现利用脉冲响应不变法将模拟滤波器转换为数字滤波器,其调用形式为:
[numd,dend]=impinvar(num,den,Fs)
式中num和den分别表示模拟滤波器系统函数H(s)的分子多项式系统和分母多项式系数,Fs是脉冲响应不变法中的抽样频率,单位是Hz。输出变量numd和dend分别表示数字滤波器系统函数H(z)的分子多项式系统和分母多项式系数。
【例6.1】利用BW型低通滤波器及脉冲响应不变法设计满足下列指标的数字滤波器。
在这里插入图片描述

程序如下:

     clear all 	
         Wp=0.1*pi;
         Ws=0.4*pi;
         Ap=1;
         As=25;
         T=1;
         Fs=1/T;
         wp=Wp*Fs;
         ws=Ws*Fs;
         N=buttord(wp,ws,Ap,As,'s');
         wc=wp/(10^(0.1*Ap)-1)^(1/2/N);
         [num den]=butter(N,wc,'s');
         [numd,dend]=impinvar(num,den,Fs);
         w=linspace(0,pi,512);
        h=freqz(numd,dend,w);
        plot(w/pi,abs(h));
		title('脉冲响应不变法');
        %计算所设计滤波器的Ap和As
        w1=[Wp,Ws];
        h1=freqz(numd,dend,w1);
        fprintf('Ap= %.4f\n',-20*log10(abs(h1(1))));
        fprintf('As= %.4f\n',-20*log10(abs(h1(2))));

运行结果:
Ap= 0.9991
As= 30.3245
在这里插入图片描述

          图1 数字低通滤波器的幅度响应

2.双线性变换法

MATLAB提供bilinear(num,den,Fs)函数,可以实现利用双线性变换法将模拟滤波器转换为数字滤波器,其调用形式为:
[numd,dend]=bilinear(num,den,Fs)
式中num和den分别表示模拟滤波器系统函数H(s)的分子多项式系统和分母多项式系数,Fs=1/T。输出变量numd和dend分别表示数字滤波器系统函数H(z)的分子多项式系统和分母多项式系数。
【例6.2】利用CB1型滤波器及双线性变换法设计满足下列指标的数字高通滤波器。
在这里插入图片描述

程序如下:

		clear all   
         Wp=0.4*pi;
         Ws=0.1*pi;
         Ap=1;
         As=25;
         T=2;
         Fs=1/T;
         wp=(2/T)*tan(Wp/2);
         ws=(2/T)*tan(Ws/2);
         [N,wc]=cheb1ord(wp,ws,Ap,As,'s');
         [num den]=cheby1(N,Ap,wc,'high','s');     
    	 [numd,dend]=bilinear(num,den,Fs);
         w=linspace(0,pi,512);
         h=freqz(numd,dend,w);
         plot(w/pi,abs(h));
            title('双线性变换法')
         %计算所设计滤波器的Ap和As       
		 w1=[Wp,Ws];
        h1=freqz(numd,dend,w1);
        fprintf('Ap= %.4f\n',-20*log10(abs(h1(1))));
        fprintf('As= %.4f\n',-20*log10(abs(h1(2))));

运行结果:
Ap= 1.0000
As= 26.4153
在这里插入图片描述

			图2 数字高通滤波器的幅度响应

3.数字滤波函数

(1)filter函数用来实现数字滤波器对数据的滤波,函数调用格式为:
y=filter(numd,dend,x)
其中,numd和dend分别为滤波器系统函数H(z)的分子和分母多项式的系数,x为滤波器的输入,y为滤波器的输出,y与x具有相同大小的向量。
(2)filtfilt函数实现零相位前后与后向结合滤波,其调用格式为:
y=filtfilt(numd,dend,x)
其中,numd和dend分别为滤波器系统函数H(z)的分子和分母多项式的系数,x为滤波器的输入,y为滤波器的输出,y与x具有相同大小的向量,这个函数实现的滤波后其输出信号与输入信号的相位一致,也就是没有改变信号波形形状。但filter函数滤波后有一些延迟,改变了信号的形状。

三、作业:

1.设计Butterworth低通数字滤波器,要求通带截止频率为0.2pi(rad) ,通带波纹小于1dB,阻带截频为0.3pi(rad),幅度衰减大于15dB,采样周期为0.01s。画出滤波器的幅频图像。
(1)示例代码:

clear all 	
Wp=0.2*pi;
Ws=0.3*pi;
Ap=1;
As=15;
T=0.01;
Fs=1/T;
wp=Wp*Fs;
ws=Ws*Fs;
N=buttord(wp,ws,Ap,As,'s');
wc=wp/(10^(0.1*Ap)-1)^(1/2/N);
[num den]=butter(N,wc,'s');
[numd,dend]=impinvar(num,den,Fs);
w=linspace(0,pi,512);
h=freqz(numd,dend,w);
plot(w/pi,abs(h));
title('脉冲响应不变法');
%计算所设计滤波器的Ap和As
w1=[Wp,Ws];
h1=freqz(numd,dend,w1);
fprintf('Ap= %.4f\n',-20*log10(abs(h1(1))));
fprintf('As= %.4f\n',-20*log10(abs(h1(2))));

(2)运行结果:

在这里插入图片描述

2.假设一个信号x(t)= sin(2pif1t)+0.5cos(2pif2t),其中f1=30Hz,f2=400Hz。请设计一个IIR数字滤波器,将f2滤除掉。请写出程序,并画出原信号与原信号通过滤波器的输出信号的图形。(数字低通滤波器)
(1)示例代码:

clear all 	
Wp=0.075*pi;
Ws=1*pi;
Ap=1;
As=25;
T=0.01;
Fs=1/T;
wp=Wp*Fs;
ws=Ws*Fs;
N=buttord(wp,ws,Ap,As,'s');
wc=wp/(10^(0.1*Ap)-1)^(1/2/N);
[num den]=butter(N,wc,'s');
[numd,dend]=impinvar(num,den,Fs);


w=linspace(0,pi,512);
h=freqz(numd,dend,w);
plot(w/pi,abs(h));
title('脉冲响应不变法');
%计算所设计滤波器的Ap和As
w1=[Wp,Ws];
h1=freqz(numd,dend,w1);
fprintf('Ap= %.4f\n',-20*log10(abs(h1(1))));
fprintf('As= %.4f\n',-20*log10(abs(h1(2))));
%信号传输
fs=800;
dt=1/fs;   %模拟信号采样间隔
f1=30;f2=400;
t=0:dt:1;
x=sin(2*pi*f1*t)+0.5*cos(2*pi*f2*t);
y=filter(numd,dend,x); % 模拟输出
L=length(x);
x1=fftshift(fft(x));
ff=(-L/2:L/2-1)*fs/L;
y1=fftshift(fft(y));
figure(2)
subplot(2,2,1)
plot(t,x);
xlabel ('(a)输入信号');
subplot(2,2,2)
plot(ff,abs(x1));
xlabel ('(b)输入信号频谱');
subplot(2,2,3)
plot(t,y);
xlabel('(c)输出信号');
subplot(2,2,4)
plot(ff,abs(y1));
xlabel ('(d)输出信号频谱'

(2)运行结果:

在这里插入图片描述

3.假设一个信号x(t)= sin(2pif1t)+0.5cos(2pif2t),其中f1=10Hz,f2=100Hz。请设计一个IIR数字滤波器能把f1滤除掉,请写出程序,并画出原信号与原信号通过滤波器的输出信号的图形。
(1)示例代码:

clear all 	
Wp=0.1*pi;
Ws=0.2*pi;
Ap=1;
As=25;
T=1;
Fs=1/T;
wp=(2/T)*tan(Wp/2);
ws=(2/T)*tan(Ws/2);
[N,wc]=cheb1ord(wp,ws,Ap,As,'s');
[num den]=butter(N,wc,'s');
[numd,dend]=impinvar(num,den,Fs);
w=linspace(0,pi,512);
h=freqz(numd,dend,w);
plot(w/pi,abs(h));
title('脉冲响应不变法');
%计算所设计滤波器的Ap和As
w1=[Wp,Ws];
h1=freqz(numd,dend,w1);
fprintf('Ap= %.4f\n',-20*log10(abs(h1(1))));
fprintf('As= %.4f\n',-20*log10(abs(h1(2))));
%信号传输
fs=800;
dt=1/fs;   %模拟信号采样间隔
f1=10;f2=100;
t=0:dt:1;
x=sin(2*pi*f1*t)+0.5*cos(2*pi*f2*t);
y=filter(numd,dend,x); % 模拟输出
L=length(x);
x1=fftshift(fft(x));
ff=(-L/2:L/2-1)*fs/L;
y1=fftshift(fft(y));
figure(2)
subplot(2,2,1)
plot(t,x);
xlabel ('(a)输入信号');
subplot(2,2,2)
plot(ff,abs(x1));
xlabel ('(b)输入信号频谱');
subplot(2,2,3)
plot(t,y);
xlabel('(c)输出信号');
subplot(2,2,4)
plot(ff,abs(y1));
xlabel ('(d)输出信号频谱');

(2)运行结果:

在这里插入图片描述

4.假设一个信号x(t)=sin(2pif1t)+sin(2pif2t)+sin(2pif3*t),其中f1=200Hz,f2=1500Hz,f3=2900Hz。请设计一个IIR数字滤波器能把f2保留,请写出程序,并画出原信号与原信号通过滤波器的输出信号的图形。
(1)示例代码:

clear all 	
Wp=[0.2*pi 0.4*pi];
Ws=[0.1*pi 0.5*pi];
Ap=1;
As=25;
T=1;
Fs=1/T;
wp=(2/T)*tan(Wp/2);
ws=(2/T)*tan(Ws/2);
[N,wc]=cheb1ord(wp,ws,Ap,As,'s');
wc=wp/(10^(0.1*Ap)-1)^(1/2/N);
[num den]=butter(N,wc,'s');
[numd,dend]=impinvar(num,den,Fs);
w=linspace(0,pi,512);
h=freqz(numd,dend,w);
plot(w/pi,abs(h));
title('脉冲响应不变法');
%计算所设计滤波器的Ap和As
w1=[Wp,Ws];
h1=freqz(numd,dend,w1);
fprintf('Ap= %.4f\n',-20*log10(abs(h1(1))));
fprintf('As= %.4f\n',-20*log10(abs(h1(2))));
%信号传输
fs=800;
dt=1/fs;   %模拟信号采样间隔
f1=200;f2=1500;f3 = 2900;
t=0:dt:1;
x=sin(2*pi*f1*t)+sin(2*pi*f2*t)+sin(2*pi*f3*t);
y=filter(numd,dend,x); % 模拟输出
L=length(x);
x1=fftshift(fft(x));
ff=(-L/2:L/2-1)*fs/L;
y1=fftshift(fft(y));
figure(2)
subplot(2,2,1)
plot(t,x);
xlabel ('(a)输入信号');
subplot(2,2,2)
plot(ff,abs(x1));
xlabel ('(b)输入信号频谱');
subplot(2,2,3)
plot(t,y);
xlabel('(c)输出信号');
subplot(2,2,4)
plot(ff,abs(y1));
xlabel ('(d)输出信号频谱');

(2)运行结果:
在这里插入图片描述

更多相关文章点这里哦

数字信号处理----全套Matlab实验报告

通信工程(信息类,电子类,电气工程,自动化,计算机,软件工程,机电,等相关专业)全套学习指导

在这里插入图片描述

答疑资料qq群:1007576722

  • 48
    点赞
  • 555
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gopher-毛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值