(2)调用butter函数设计出巴特沃斯滤波器,格式为
[b,a]=butter(N,Wc,options)
输入参数:
N和Wc是buttord函数返回的参数,含义见上。
Options=’low’,’high’,’bandpass’,’stop’,分别对应低通、高通、带通、带阻,默认情况下为低通或带通。
输出参数:
b和a为设计出的IIR数字滤波器H(s)的分子多项式和分母多项式的系数矩阵。
2.ChebyshevII型滤波器设计
ChebyshevII型滤波器为阻带纹波控制器:
在阻带呈现纹波特性。
[N,Wc]=cheb2ord(Wp,Ws,Ap,As)
[b,a]=cheby2(N,As,Wc,options)
3.椭圆滤波器设计
椭圆滤波器在通阻带都呈现纹波特性。
[N,Wc]=ellipord(Wp,Ws,Ap,As)
[b,a]=ellip(N,Ap,As,Wc,options)
三、实验内容
1.信号,确定设计指标,实现各种IIR数字滤波器以实现以下信号处理。
(1)设计IIR低通滤波器,滤除的成分。
(2)设计IIR高通滤波器,滤除的成分。
(3)设计IIR带通滤波器,滤除的成分。
(4)设计IIR带阻滤波器,滤除的成分。
要求利用butterord函数求解滤波器的阶数;利用butter函数设计各IIR数字滤波器;画出滤波器的幅度相应和相位响应;给出IIR数字滤波器的系统函数。
(1)
clear;
fsam=100;
t0=1/fsam;t=6;k=0:
t0:
t;
N=512;
x=1+cos(pi/4.*k/t0)+cos(2*pi/3.*k/t0);
f=(-N/2:
(N/2-1))/N*2*pi;
[N1,Wc]=buttord(1/4,1/2,3,60);
[b,a]=butter(N1,Wc,'low');
freqz(b,a);
figure;
axis([0,1,-120,0]);
y=filter(b,a,x);
Y=fftshift(fft(y,N));
stem(f,abs(Y));
(2)
clear;
fsam=100;
t0=1/fsam;t=6;k=0:
t0:
t;
N=512;
x=1+cos(pi/4.*k/t0)+cos(2*pi/3.*k/t0);
f=(-N/2:
(N/2-1))/N*2*pi;
[N1,Wc]=buttord(2/3,10/24,3,100);
[b,a]=butter(N1,Wc,'high');
freqz(b,a);
figure;
axis([0,1,-120,0]);
y=filter(b,a,x);
Y=fftshift(fft(y,N));
stem(f,abs(Y));
(3)
clear;
fsam=100;
t0=1/fsam;t=6;k=0:
t0:
t;
N=512;
x=1+cos(pi/4.*k/t0)+cos(2*pi/3.*k/t0);
f=(-N/2:
(N/2-1))/N*2*pi;
[N1,Wc]=buttord([1/88/24],[1/322/3],3,60);
[b,a]=butter(N1,Wc,'bandpass');
freqz(b,a);
figure;
axis([0,1,-120,0]);
y=filter(b,a,x);
Y=fftshift(fft(y,N));
stem(f,abs(Y));
(4)
clear;
fsam=100;
t0=1/fsam;t=6;k=0:
t0:
t;
N=512;
x=1+cos(pi/4.*k/t0)+cos(2*pi/3.*k/t0);
f=(-N/2:
(N/2-1))/N*2*pi;
[N1,Wc]=buttord([1/322/3],[0.210/27],3,60);
[b,a]=butter(N1,Wc,'stop');
freqz(b,a);
figure;
axis([0,1,-120,0]);
y=filter(b,a,x);
Y=fftshift(fft(y,N));
stem(f,abs(Y));
2.某带通滤波器的设计指标为
(1)试分别利用巴特沃斯、切比雪夫Ⅰ型、切比雪夫Ⅱ型和椭圆模拟滤波器,通过脉冲响应不变法设计该带通数字滤波器,画出其频率特性,比较设计结果。
(2)试分别利用巴特沃斯、切比雪夫Ⅰ型、切比雪夫Ⅱ型和椭圆模拟滤波器,通过双线性变换法设计该带通数字滤波器,画出其频率特性,比较设计结果。
(3)分析比较以上设计结果,有何结论?
(1).脉冲响应不变法
clear;
omegas=[0.20.72]*pi;
omegap=[0.30.6]*pi;
Ap=1;As=42;
Fs=1;
ws=omegas*Fs;
wp=omegap*Fs;
[N,Wc]=buttord(wp,ws,Ap,As,'s');
[b,a]=butter(N,Wc,'bandpass','s');
%[N,Wc]=cheb1ord(wp,ws,Ap,As,'s');
%[b,a]=cheby1(N,Ap,Wc,'bandpass','s');
%[N,Wc]=cheb2ord(wp,ws,Ap,As,'s');
%[b,a]=cheby2(N,As,Wc,'bandpass','s');
%
%[N,Wc]=ellipord(wp,ws,Ap,As,'s');
%[b,a]=ellip(N,Ap,As,Wc,'bandpass','s');
[numd,dend]=impinvar(b,a,Fs);
w=linspace(0,pi,512);
h=freqz(numd,dend,w);
norm=max(abs(h));
numd=numd/norm;
plot(w/pi,20*log10(abs(h)/norm));
gridon
右图从上到下分别是buttord
Cheby1cheby2ellipord型滤波器的
频率特性(脉冲响应不变法)
(2)双线性变换法
clear;
omegas=[0.20.72]*pi;
omegap=[0.30.6]*pi;
Ap=1;As=42;
Fs=1;T=1/Fs;
wp=2*tan(omegap/2)/T;
ws=2*tan(omegas/2)/T;
%[N,Wc]=buttord(wp,ws,Ap,As,'s');
%[b,a]=butter(N,Wc,'bandpass','s');
%[N,Wc]=cheb1ord(wp,ws,Ap,As,'s');
%[b,a]=cheby1(N,Ap,Wc,'bandpass','s');
%
%[N,Wc]=cheb2ord(wp,ws,Ap,As,'s');
%[b,a]=cheby2(N,As,Wc,'bandpass','s');
[N,Wc]=ellipord(wp,ws,Ap,As,'s');
[b,a]=ellip(N,Ap,As,Wc,'bandpass','s');
[numd,dend]=bilinear(b,a,Fs);
w=linspace(0,pi,512);
h=freqz(numd,dend,w);
norm=max(abs(h));
numd=numd/norm;
plot(w/pi,20*log10(abs(h)/norm));
gridon
title('ellipord')
(1)利用DTMF的产生原理合成数字“4”,合成公式为:
,
画出其时域波形和频谱图。
(2)根据图中的低通和高通滤波器,画出两个滤波器的幅频响应;并利用
对信号进行滤波;利用fft函数求得输出的频响,绘出幅频响应曲线。
(3)设计图中的第一组的四个带通滤波器,画出滤波器的幅频响应;并利用
对图中相应的输入信号进行滤波,在一张图上用不同颜色画出这四条输出曲线。
比较其幅值,BP770Hz滤波器的输出最大,因此确定该DTMF的行频为770Hz。
(1)
clear;
k=0:
204;N=205;
x=sin(2*pi*770/8000.*k)+sin(2*pi*1209/8000.*k);
stem(k,x);
title('时域波形')
figure;
X=fftshift(fft(x));
omega=((-(N-1)/2):
((N-1)/2))/N*2*pi;
stem(omega,abs(X));
title('频谱图')
(2)
clear;
k=0:
204;N=205;
x=sin(2*pi*770/8000.*k)+sin(2*pi*1209/8000.*k);
omega=((-(N-1)/2):
((N-1)/2))/N*2*pi;
%低通
wp=2*941/8000;ws=2*1200/8000;Ap=3;As=60;
[N,wc]=buttord(wp,ws,Ap,As);
[b,a]=butter(N,wc);
freqz(b,a);
figure
%滤波输出
y=filter(b,a,x);
Y=fftshift(fft(y));
stem(omega,abs(Y))
clear;
k=0:
204;N=205;
x=sin(2*pi*770/8000.*k)+sin(2*pi*1209/8000.*k);
omega=((-(N-1)/2):
((N-1)/2))/N*2*pi;
%高通
wp=2*1200/8000;ws=2*1000/8000;Ap=3;As=60;
[N,wc]=buttord(wp,ws,Ap,As);
[b,a]=butter(N,wc,'high');
freqz(b,a);
figure
%滤波输出
y=filter(b,a,x);
Y=fftshift(fft(y));
stem(omega,abs(Y))
(3)
clear;
k=0:
204;N=205;
x=sin(2*pi*770/8000.*k)+sin(2*pi*1209/8000.*k);
omega=((-(N-1)/2):
((N-1)/2))/N*2*pi;
wp1=[692702]./4000;ws1=[687707]./4000;
wp2=[765775]./4000;ws2=[760780]./4000;
wp3=[847857]./4000;ws3=[842862]./4000;
wp4=[936946]./4000;ws4=[931951]./4000;
Ap=3;As=30;
[N1,wc1]=buttord(wp1,ws1,Ap,As);
[b1,a1]=butter(N1,wc1,'bandpass');
[N2,wc2]=buttord(wp2,ws2,Ap,As);
[b2,a2]=butter(N2,wc2,'bandpass');
[N3,wc3]=buttord(wp3,ws3,Ap,As);
[b3,a3]=butter(N3,wc3,'bandpass');
[N4,wc4]=buttord(wp4,ws4,Ap,As);
[b4,a4]=butter(N4,wc4,'bandpass');
figure
(1)
freqz(b1,a1);
figure
(2)
freqz(b2,a2);
figure(3)
freqz(b3,a3);
figure(4)
freqz(b4,a4);
以上分别是4个带通滤波器的幅频响应.
clear;
k=0:
204;N=205;
x=sin(2*pi*770/8000.*k)+sin(2*pi*1209/8000.*k);
omega=((-(N-1)/2):
((N-1)/2))/N*2*pi;
wp1=[692702]./4000;ws1=[687707]./4000;
wp2=[765775]./4000;ws2=[760780]./4000;
wp3=[847857]./4000;ws3=[842862]./4000;
wp4=[936946]./4000;ws4=[931951]./4000;
Ap=3;As=20;
[N1,wc1]=buttord(wp1,ws1,Ap,As);
[b1,a1]=butter(N1,wc1,'bandpass');
[N2,wc2]=buttord(wp2,ws2,Ap,As);
[b2,a2]=butter(N2,wc2,'bandpass');
[N3,wc3]=buttord(wp3,ws3,Ap,As);
[b3,a3]=butter(N3,wc3,'bandpass');
[N4,wc4]=buttord(wp4,ws4,Ap,As);
[b4,a4]=butter(N4,wc4,'bandpass');
y1=filter(b1,a1,x);
Y1=abs(fftshift(fft(y1)));
y2=filter(b2,a2,x);
Y2=abs(fftshift(fft(y2)));
y3=filter(b3,a3,x);
Y3=abs(fftshift(fft(y3)));
y4=filter(b4,a4,x);
Y4=abs(fftshift(fft(y4)));
plot(omega,Y1,'-g',omega,Y2,'-r',omega,Y3,'-b',omega,Y4,'-k');
由图中可以看出bp770hz滤波器的输出最大,所以该dtmf的行频为770hz
(4)
clear;
k=0:
204;N=205;
x=sin(2*pi*770/8000.*k)+sin(2*pi*1209/8000.*k);
omega=((-(N-1)/2):
((N-1)/2))/N*2*pi;
wp1=[12041214]./4000;ws1=[11991219]./4000;
wp2=[13311341]./4000;ws2=[13261346]./4000;
wp3=[14721482]./4000;ws3=[14671487]./4000;
Ap=3;As=20;
[N1,wc1]=buttord(wp1,ws1,Ap,As);
[b1,a1]=butter(N1,wc1,'bandpass');
[N2,wc2]=buttord(wp2,ws2,Ap,As);
[b2,a2]=butter(N2,wc2,'bandpass');
[N3,wc3]=buttord(wp3,ws3,Ap,As);
[b3,a3]=butter(N3,wc3,'bandpass');
y1=filter(b1,a1,x);
Y1=abs(fftshift(fft(y1)));
y2=filter(b2,a2,x);
Y2=abs(fftshift(fft(y2)));
y3=filter(b3,a3,x);
Y3=abs(fftshift(fft(y3)));
plot(omega,Y1,'-g',omega,Y2,'-r',omega,Y3,'-b');
图中可以看出bp1209hz滤波器输出最大
由(3)(4)可以得出dtmf信号按键为’4’
(5)
x=sin(2*pi*770/8000.*k)+sin(2*pi*1477/8000.*k);
检验数字’6’
行频输出
列频输出
得dtmf信号按键为’6’
(6)
答:
可以,只要取的各个频率的表示颜色不同即可.
四、思考题
1.哪些主要因素直接影响IIR数字滤波器的阶数?
从工程概念进行定性解释。
答:
通带截频,阻带截频,通带最大衰减和阻带最大衰减。
2.巴特沃斯、切比雪夫I型、切比雪夫II型和椭圆模拟原型滤波器的幅频特性有哪些特点?
其优缺点是什么?
答:
巴特沃斯滤波器的特点是通频带内的频率响应曲线最大限度平坦,没有起伏,而在阻频带则逐渐下降为零。
在振幅的对数对角频率的波特图上,从某一边界角频率开始,振幅随着角频率的增加而逐步减少,趋向负无穷大;
切比雪夫滤波器在过渡带比巴特沃斯滤波器的衰减快,但频率响应的幅频特性不如后者平坦。
切比雪夫滤波器和理想滤波器的频率响应曲线之间的误差最小,但是在通频带内存在幅度波动。
切比雪夫I型滤波器在通带内有波动,切比雪夫II型滤波器在阻带内有波动。
椭圆滤波器是在通带和阻带等波纹的一种滤波器。
椭圆滤波器相比其他类型的滤波器,在阶数相同的条件下有着最小的通带和阻带波动。
它在通带和阻带的波动相同,这一点区别于在通带和阻带都平坦的巴特沃斯滤波器,以及通带平坦、阻带等波纹或是阻带平坦、通带等波纹的切比雪夫滤波器。
3.脉冲响应不变法和双线性变换法的基本思想有何不同?
优缺点是什么?
答:
脉冲响应不变法在数字和模拟频域是线性的映射关系,优点是在数字频域能较好地保持模拟频域的幅频特性.缺点是会有一定程度的频谱混叠,不能用于设计高通和带阻滤波器.双