linspace函数调用的格式为实验六基于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))));
图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))));
图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(2pi f1t)+0.5cos(2pi f2t),其中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)运⾏结果:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。