搜档网
当前位置:搜档网 › 华北电力大学数字信号处理实验六共29页

华北电力大学数字信号处理实验六共29页

华北电力大学数字信号处理实验六共29页
华北电力大学数字信号处理实验六共29页

实验六 IIR数字滤波器设计及应用

一:实验目的

加深理解IIR数字滤波器的特性,掌握IIR数字滤波器的设计原理与设计方法,以及IIR数字滤波器的应用。

二:实验原理

N阶IIR数字滤波器的系统函数为:

IIR数字滤波器的设计主要通过成熟的模拟滤波器设计方法来实现:将数字滤波器设计指标转换为模拟滤波器设计指标,设计出相应的模拟滤波器H(s),再经过脉冲响应不变法或双线性变换法得到所需的IIR数字滤波器H(z)。

IIR数字滤波器设计的重要环节是模拟原型低通滤波器的设计,主要包括Butterworth、Chebyshev和椭圆等滤波器。

MATLAB 信号处理工具箱中提供了IIR滤波器设计的函数。

IIR 滤波器阶数选择

buttord -巴特沃斯(Butterworth)滤波器阶数选择。

cheb1ord -切比雪夫(Chebyshev)I 型滤波器阶数选择。

cheb2ord -切比雪夫(Chebyshev)II 型滤波器阶数选择。

ellipord -椭圆(Elliptic)滤波器阶数选择。

IIR 滤波器设计

butter -巴特沃斯(Butterworth)滤波器设计

cheby1 -切比雪夫(Chebyshev)I 型滤波器设计

cheby2 -切比雪夫(Chebyshev)II 型滤波器设计

ellip -椭圆(Elliptic)滤波器设计

maxflat -通用的巴特沃斯(Butterworth)低通滤波器设计

yulewalk -Yule-Walker 滤波器设计(直接数字滤波器设计法)

1. Butterworth滤波器设计

Butterworth滤波器是通带、阻带都单调衰减的滤波器。

(1)调用buttord函数确定巴特沃斯滤波器的阶数,格式为 [N,Wc] = buttord(Wp,Ws,Ap,As)

输入参数:Ap,As为通带最大衰减和阻带最小衰减,以dB为单位。

Wp,Ws为归一化通带截频和阻带截频,0

(2)调用butter函数设计出巴特沃斯滤波器,格式为[b,a] = butter(N,Wc,options)

输入参数:N和Wc是buttord函数返回的参数,含义见上。

Options=’low’, ’high’, ’bandpass’, ’stop’, 分别对应低通、高通、带通、带阻,默认情况下为低通或带通。

输出参数:b和a为设计出的IIR数字滤波器H(s)的分子多项式和分母多项式的系数矩阵。

2. Chebyshev I型滤波器设计

Chebyshev I型滤波器为通带纹波控制器:在通带呈现纹波特性,在阻带单调衰减。

[N,Wc] = cheb1ord(Wp, Ws, Ap, As)

[b,a] = cheby1(N,Ap,Wc,options)

参数含义与butter中参数一致。

2. Chebyshev II 型滤波器设计

Chebyshev II 型滤波器为阻带纹波控制器:在阻带呈现纹波特性。

[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(1)

[N,Wc]=buttord(0.250,0.677,3,60)

[b,a]=butter(N,Wc)

freqz(b,a);

axis([0,1,-120,0]);

grid on

title('巴特沃斯低通数字滤波器')

(2)

[N,Wc]=buttord(0.250,0.677,3,60)

[b,a]=butter(N,Wc,'high')

freqz(b,a);

axis([0,1,-120,0]);

grid on

title('巴特沃斯高通数字滤波器')

(3)

Wp =[0.25 0.67]; Ws =[0.25-0.03 0.67+0.03];

Rp = 3;

Rs = 60;

[N,Wc]=buttord(Wp,Ws,Rp,Rs)

[b,a]=butter(N,Wc,'bandpass')

freqz(b,a);

axis([0,1,-120,0]);

grid on

title('巴特沃斯带通数字滤波器')

N =

40

Wc =

0.2499 0.6701

b =

Columns 1 through 9

0.0000 0 -0.0000 0 0.0000 0 -0.0000 0 0.0000

Columns 10 through 18

0 -0.0000 0 0.0000 0 -0.0000 0 0.0000 0

Columns 19 through 27

-0.0001 0 0.0003 0 -0.0007 0

0.0017 0 -0.0037

Columns 28 through 36

0 0.0072 0 -0.0125 0 0.0195 0 -0.0276 0

Columns 37 through 45

0.0353 0 -0.0408 0 0.0429 0

-0.0408 0 0.0353

Columns 46 through 54

0 -0.0276 0 0.0195 0 -0.0125 0 0.0072 0

Columns 55 through 63

-0.0037 0 0.0017 0 -0.0007 0

0.0003 0 -0.0001

Columns 64 through 72

0 0.0000 0 -0.0000 0 0.0000 0 -0.0000 0

Columns 73 through 81

0.0000 0 -0.0000 0 0.0000 0

-0.0000 0 0.0000

a =

1.0e+005 *

Columns 1 through 9

0.0000 -0.0001 0.0003 -0.0011 0.0030 -0.0074 0.0160 -0.0318 0.0585

Columns 10 through 18

-0.1008 0.1637 -0.2519 0.3692 -0.5174 0.6952 -0.8980 1.1176 -1.3427

Columns 19 through 27

1.5597 -1.7542 1.9125 -

2.0234 2.0794 -2.0773

2.0188 -1.9098 1.7596

Columns 28 through 36

-1.5798 1.3828 -1.1803 0.9828 -0.7985 0.6332 -0.4902 0.3705 -0.2734

Columns 37 through 45

0.1970 -0.1386 0.0953 -0.0639 0.0419 -0.0268 0.0167 -0.0102 0.0061

Columns 46 through 54

-0.0035 0.0020 -0.0011 0.0006 -0.0003 0.0002 -0.0001 0.0000 -0.0000

Columns 55 through 63

0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000

Columns 64 through 72

-0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000

Columns 73 through 81

0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000

(4)

Wp =[0.25 0.67];

Ws =[0.25-0.03 0.67+0.03];

Rp = 3;

Rs = 60;

[N,Wc]=buttord(Wp,Ws,Rp,Rs)

[b,a]=butter(N,Wc,'stop')

freqz(b,a);

axis([0,1,-120,0]);

grid on

title('巴特沃斯带阻数字滤波器')

N =

40

Wc =

0.2499 0.6701

b =

1.0e+005 *

Columns 1 through 7

0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000

Columns 8 through 14

-0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000

Columns 15 through 21

0.0001 -0.0001 0.0003 -0.0007 0.0015 -0.0029 0.0056

Columns 22 through 28

-0.0102 0.0179 -0.0305 0.0502 -0.0798 0.1227 -0.1828

Columns 29 through 35

0.2636 -0.3686 0.4998 -0.6576 0.8396 -1.0409

1.2534

Columns 36 through 42

-1.4660 1.6661 -1.8401 1.9753 -2.0610 2.0904 -2.0610

Columns 43 through 49

1.9753 -1.8401 1.6661 -1.4660 1.2534 -1.0409 0.8396

Columns 50 through 56

-0.6576 0.4998 -0.3686 0.2636 -0.1828 0.1227 -0.0798

Columns 57 through 63

0.0502 -0.0305 0.0179 -0.0102 0.0056 -0.0029 0.0015

Columns 64 through 70

-0.0007 0.0003 -0.0001 0.0001 -0.0000 0.0000 -0.0000

Columns 71 through 77

0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000

Columns 78 through 81

-0.0000 0.0000 -0.0000 0.0000

a =

1.0e+005 *

Columns 1 through 7

0.0000 -0.0001 0.0003 -0.0011 0.0030 -0.0074 0.0160

Columns 8 through 14

-0.0318 0.0585 -0.1008 0.1637 -0.2519 0.3692 -0.5174

Columns 15 through 21

0.6952 -0.8980 1.1176 -1.3427 1.5597 -1.7542

1.9125

Columns 22 through 28

-2.0234 2.0794 -2.0773 2.0188 -1.9098 1.7596 -1.5798

Columns 29 through 35

1.3828 -1.1803 0.9828 -0.7985 0.6332 -0.4902 0.3705

Columns 36 through 42

-0.2734 0.1970 -0.1386 0.0953 -0.0639 0.0419 -0.0268

Columns 43 through 49

0.0167 -0.0102 0.0061 -0.0035 0.0020 -0.0011 0.0006

Columns 50 through 56

-0.0003 0.0002 -0.0001 0.0000 -0.0000 0.0000 -0.0000

Columns 57 through 63

0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000

0.0000

Columns 64 through 70

-0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000

Columns 71 through 77

0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000

Columns 78 through 81

-0.0000 0.0000 -0.0000 0.0000

3(1)

T0=204;

N=205;

T=1;

k=0:T0;

x=sin((2/8000)*770*pi*k)+sin((2/8000)*1209*pi*k);

subplot(2,1,1);

stem(k,x);

title('时域波形 ');

Xm=fft(x,N)/N;

f=(-(N-1)/2:(N-1)/2)/N/T;

subplot(2,1,2);

stem(f,abs(fftshift(Xm)));

title('频谱图');

(2)

[N,Wc]=buttord(0.1925,0.30225,3,60)

[b,a]=butter(N,Wc)

freqz(b,a);

axis([0,1,-120,0]);

grid on

title('巴特沃斯低通数字滤波器')

T0=204;

N=205;

T=1;

k=0:T0;

x=sin((2/8000)*770*pi*k)+sin((2/8000)*1209*pi*k); subplot(4,1,1);

stem(k,x);

title('时域波形');

Xm=fft(x,N)/N;

f=(-(N-1)/2:(N-1)/2)/N/T;

subplot(4,1,2);

stem(f,abs(fftshift(Xm)));

title('频谱图');

y=filter(b,a,x);

stem(k,y);

title('低通滤波后时域波形')

ym=fft(y,N)/N;

subplot(4,1,4);

stem(f,abs(fftshift(ym)));

title('低通滤波后频谱图')

[N,Wc]=buttord(0.1925,0.30225,3,60)

[b,a]=butter(N,Wc,'high')

freqz(b,a);

axis([0,1,-120,0]);

grid on

T0=204;

N=205;

T=1;

k=0:T0;

x=sin((2/8000)*770*pi*k)+sin((2/8000)*1209*pi*k); subplot(4,1,1);

stem(k,x);

title('时域波形');

Xm=fft(x,N)/N;

f=(-(N-1)/2:(N-1)/2)/N/T;

stem(f,abs(fftshift(Xm)));

title('频谱图');

y=filter(b,a,x);

subplot(4,1,3);

stem(k,y);

title('高通滤波后时域波形')

ym=fft(y,N)/N;

subplot(4,1,4);

stem(f,abs(fftshift(ym)));

title('高通滤波后频谱图')

(3)

Wp1 =[680 720]/4000;

Ws1=[650-20 720+20]/4000;

Rp1 = 3;

Rs1 = 40;

[N1,Wn1]=cheb1ord(Wp1,Ws1,Rp1,Rs1); [b1,a1] =cheby1(N1,Rp1,Wn1); freqz(b1,a1,512,8000);

title('Ⅰ型切比雪夫滤波器1');

grid on

Wp2 =[750 790]/4000;

Ws2 =[750-20 790+20]/4000;

Rp2 = 3;

Rs2 = 40;

[N2,Wn2]=cheb1ord(Wp2,Ws2,Rp2,Rs2) [b2,a2] =cheby1(N2,Rp2,Wn2); figure;

freqz(b2,a2,512,8000);

title('Ⅰ型切比雪夫滤波器2'); grid on

Wp3 =[830 870]/4000;

Ws3 =[830-20 870+20]/4000;

Rp3 = 3;

Rs3 = 40;

[N3,Wn3]=cheb1ord(Wp3,Ws3,Rp3,Rs3) [b3,a3] =cheby1(N3,Rp3,Wn3); figure;

freqz(b3,a3,512,8000);

title('Ⅰ型切比雪夫滤波器3'); grid on

Wp4 =[920 960]/4000;

Ws4 =[920-20 960+20]/4000;

Rp4 = 3;

Rs4 = 40;

[N4,Wn4]=cheb1ord(Wp4,Ws4,Rp4,Rs4);

[b4,a4] =cheby1(N4,Rp4,Wn4);

figure;

freqz(b4,a4,512,8000);

title('Ⅰ型切比雪夫滤波器4');

grid on;

k=0:1:500;

x=sin((2/8000)*770*pi*k)+sin((2/8000)*1209*pi*k); y1=filter(b1,a1,x);

y2=filter(b2,a2,x);

y3=filter(b3,a3,x);

y4=filter(b4,a4,x);

figure;

plot(k,y1,k,y2,'g--',k,y3,'r--',k,y4,'y--');

title('滤波后4条输出曲线') ;

legend('697HZ', '770HZ','852HZ','941HZ');

(4)

Wp1 =[1180 1220]/4000;

Ws1 =[1180-30 1220+30]/4000;

Rp1 = 3;

Rs1 = 40;

[N1,Wn1]=cheb1ord(Wp1,Ws1,Rp1,Rs1) [b1,a1] =cheby1(N1,Rp1,Wn1);

freqz(b1,a1,512,8000);

title('Ⅰ型切比雪夫滤波器1'); grid on;

Wp2 =[1310 1350]/4000;

Ws2 =[1310-30 1350+30]/4000;

Rp2 = 3;

Rs2 = 40;

[N2,Wn2]=cheb1ord(Wp2,Ws2,Rp2,Rs2); [b2,a2] =cheby1(N2,Rp2,Wn2); figure;

freqz(b2,a2,512,8000);

title('Ⅰ型切比雪夫滤波器2'); grid on;

Wp3 =[1460 1500]/4000;

Ws3=[1460-30 1500+30]/4000;

Rp3 = 3;

Rs3 = 40;

[N3,Wn3]=cheb1ord(Wp3,Ws3,Rp3,Rs3) [b3,a3] =cheby1(N3,Rp3,Wn3); figure;

freqz(b3,a3,512,8000);

title('Ⅰ型切比雪夫滤波器3');

grid on;

k=0:1:500;

x=sin((2/8000)*770*pi*k)+sin((2/8000)*1209*pi*k);

y1=filter(b1,a1,x);

y2=filter(b2,a2,x);

y3=filter(b3,a3,x);

figure;

plot(k,y1,k,y2,'g--',k,y3,'y--'); title('输出曲线') ; legend('1209HZ','1336HZ','1477HZ');

(5)

k=0:1:500;

x0=sin((2/8000)*941*pi*k)+sin((2/8000)*1336*pi*k);

x1=sin((2/8000)*697*pi*k)+sin((2/8000)*1209*pi*k);

x2=sin((2/8000)*697*pi*k)+sin((2/8000)*1336*pi*k);

x3=sin((2/8000)*697*pi*k)+sin((2/8000)*1477*pi*k);

x4=sin((2/8000)*770*pi*k)+sin((2/8000)*1209*pi*k);

x5=sin((2/8000)*770*pi*k)+sin((2/8000)*1336*pi*k);

x6=sin((2/8000)*770*pi*k)+sin((2/8000)*1477*pi*k);

x7=sin((2/8000)*852*pi*k)+sin((2/8000)*1209*pi*k);

x8=sin((2/8000)*852*pi*k)+sin((2/8000)*1336*pi*k);

x9=sin((2/8000)*852*pi*k)+sin((2/8000)*1477*pi*k); Wp1 =[680 720]/4000;

Ws1=[650-20 720+20]/4000;

Rp1 = 3;

Rs1 = 40;

[N1,Wn1]=cheb1ord(Wp1,Ws1,Rp1,Rs1);

[B1,A1] =cheby1(N1,Rp1,Wn1);

Wp2 =[750 790]/4000;

Ws2 =[750-20 790+20]/4000;

Rp2 = 3;

Rs2 = 40;

[N2,Wn2]=cheb1ord(Wp2,Ws2,Rp2,Rs2);

[B2,A2] =cheby1(N2,Rp2,Wn2);

Wp3 =[830 870]/4000;

Ws3 =[830-20 870+20]/4000;

Rp3 = 3;

Rs3 = 40;

[N3,Wn3]=cheb1ord(Wp3,Ws3,Rp3,Rs3);

[B3,A3] =cheby1(N3,Rp3,Wn3);

Wp4 =[920 960]/4000;

Ws4 =[920-20 960+20]/4000;

Rp4 = 3;

Rs4 = 40;

[N4,Wn4]=cheb1ord(Wp4,Ws4,Rp4,Rs4); [B4,A4] =cheby1(N4,Rp4,Wn4);

wp1 =[1180 1220]/4000;

ws1 =[1180-30 1220+30]/4000;

rp1 = 3;

rs1 = 40;

[n1,wn1]=cheb1ord(wp1,ws1,rp1,rs1); [b1,a1] =cheby1(n1,rp1,wn1);

wp2 =[1310 1350]/4000;

ws2 =[1310-30 1350+30]/4000;

rp2 = 3;

rs2 = 40;

[n2,wn2]=cheb1ord(wp2,ws2,rp2,rs2); [b2,a2] =cheby1(n2,rp2,wn2);

wp3 =[1460 1500]/4000;

ws3=[1460-30 1500+30]/4000;

rp3 = 3;

rs3 = 40;

[n3,wn3]=cheb1ord(wp3,ws3,rp3,rs3); [b3,a3]=cheby1(n3,rp3,wn3);

Y01=filter(B1,A1,x0);

相关主题