数字信号处理课程设计报告

1  IIR滤波器的简介

IR(Infinite Impulse Response)数字滤波器,又名“无限脉冲响应数字滤波器”,或“递归滤波器”。递归滤波器,也就是IIR数字滤波器,顾名思义,具有反馈,一般认为具有无限的脉冲响应。

1.1     IIR数字滤波器的结构及成果

IIR数字滤波器采用递归型结构,即结构上带有反馈环路。IIR滤波器运算结构通常由延时、乘以系数和相加等基本运算组成,可以组合成直接型、正准型、级联型、并联型四种结构形式,都具有反馈回路。由于运算中的舍入处理,使误差不断累积,有时会产生微弱的寄生振荡。

IIR数字滤波器在设计上可以借助成熟的模拟滤波器的成果,如巴特沃斯、契比雪夫和椭圆滤波器等,有现成的设计数据或图表可查,其设计工作量比较小,对计算工具的要求不高。在设计一个IIR数字滤波器时,我们根据指标先写出模拟滤波器的公式,然后通过一定的变换,将模拟滤波器的公式转换成数字滤波器的公式。

1.2     IIR数字滤波器与FIR滤波器的比较

在单位响应上:IIR数字滤波器单位响应为无限脉冲序列,而FIR数字滤波器单位响应为有限的; FIR滤波器,也就是“非递归滤波器”,没有引入反馈。这种滤波器的脉冲响应是有限的;在幅频特性上:IIR数字滤波器幅频特性精度很高,不是线性相位的,可以应用于对相位信息不敏感的音频信号上;FIR数字滤波器的幅频特性精度较之于IIR数字滤波器低,但是线性相位,就是不同频率分量的信号经过fir滤波器后他们的时间差不变,这是很好的性质;在实时信号处理上:FIR数字滤波器是有限的单位响应也有利于对数字信号的处理,便于编程,用于计算的时延也小,这对实时的信号处理很重要。

系统分析

2.1 涉及的基础知识

巴特沃斯滤波器的特点是通频带内的频率响应曲线最大限度平坦,没有起伏,而在阻频带则逐渐下降为零。 在振幅的对数对角频率的波特图上,从某一边界角频率开始,振幅随着角频率的增加而逐步减少,趋向负无穷大。一阶巴特沃斯滤波器的衰减率为每倍频6分贝,每十倍频20分贝。二阶巴特沃斯滤波器的衰减率为每倍频12分贝、 三阶巴特沃斯滤波器的衰减率为每倍频18分贝、如此类推。巴特沃斯滤波器的振幅对角频率单调下降,并且也是唯一的无论阶数,振幅对角频率曲线都保持同样的形状的滤波器。只不过滤波器阶数越高,在阻频带振幅衰减速度越快。其他滤波器高阶的振幅对角频率图和低级数的振幅对角频率有不同的形状。

切比雪夫滤波器,又名“车比雪夫滤波器”,是在通带或阻带上频率响应幅度等波纹波动的滤波器。切比雪夫滤波器来自切比雪夫分布,以“切比雪夫”命名,是用以纪念俄罗斯数学家巴夫尼提·列波维其·切比雪夫。切比雪夫滤波器在过渡带比巴特沃斯滤波器的衰减快,但频率响应的幅频特性不如后者平坦。切比雪夫滤波器和理想滤波器的频率响应曲线之间的误差最小,但是在通频带内存在幅度波动。

2.2 程序设计的步骤

一般数字滤波器设计的基本步骤:

(1) 确定指标。在设计一个滤波器之前, 必须首先根据工程实际的需要确定滤波器的技术指标。在很多实际应用中, 数字滤波器常常被用来实现选频操作。因此, 指标的形式一般在频域中给出幅度和相位响应。幅度指标主要以两种方式给出。第一种是绝对指标, 它提供对幅度响应函数的要求,一般应用于FIR 滤波器的设计。第二种指标是相对指标, 它以分贝的形式给出要求, 在工程实践中, 这种指标最受欢迎。对于相位指标形式, 通常希望系统在通频带中有线性相位。运用线性相位响应指标进行滤波器设计具有以下优点:①只包含实数算法,不涉及复数算法;②不存在延迟失真, 只有固定数量的延迟;③长度为N 的滤波器, 计算量为N/2 数量级。(2) 逼近。确定了技术指标后, 就可以建立目标的数字滤波器模型。通常采用理想的数字滤波器模型。之后, 采用数字滤波器的设计方法, 设计出实际滤波器模型来逼近给定的指标。(3) 性能分析和计算机仿真。上两步的结果是得到以差分或系统函数或脉冲响应描述的滤波器。根据这个描述就可以分析频率特性和相位特性, 以验证设计结果是否满足指标要求; 或者利用计算机仿真实现设计的滤波器, 再分析滤波结果来判断。

IIR滤波器的MATLAB设计:

IIR滤波器的特征是,具有无限持续时间冲激响应。这种滤波器也称之为递归型滤波器。

MATLAB 中设计IIR 数字滤波器的步骤总结如下:①按一定规则将给出数字滤波器的技术指标转换成模拟低通滤波器的技术指标;②根据转换后的技术指标使用滤波器的阶数选择函数, 确定最小阶数N和固定频率wn;③运用最小阶数N产生模拟滤波器模型;④运用固有频率把模拟低通滤波器原型转换成模拟高通、带通、带阻滤波器;⑤运用脉冲响应不变法或双线性变换法把模拟滤波器转换成数字滤波器。

3  IIR滤波器的总体设计

3.1 IIR数字滤波器实现的功能

实现对巴特沃斯、切比雪夫滤波器的低通、高通的显示。图像显示其幅频响应、相位响应、以及零、极点的分布状况。同时可以完成对音频文件的滤波,对比滤波前后的差别。

3.2  IIR数字滤波器设计流程

图3.1流程图

3.3 IIR数字滤波器的页面设计

IIR数字滤波器的页面设计如下图

图3.2 IIR滤波器的页面设计

3.4       程序代码设计

IIR_DispZplane代码:

function IIR_DispZplane()

[num den CYPL YYYFlag]=IIR_Createfilter;

if(~YYYFlag)

    return;

end

figure(3);

zplane(num,den);

axis([-5,5,-2,2]);

IIR_Playorg代码:

function IIR_Playorg()

data_hndl=findobj(gcbf,'Tag','Button_WAV');

sig_info=get(data_hndl,'Userdata');

data=sig_info.data;

fs=sig_info.freq;

sound(data,fs);

IIR_DispAngle代码:

function IIR_DispAngle()

 [num den CYPL YYYFlag]=IIR_Createfilter;

if(~YYYFlag)

    return;

end

figure(2);

[h f]=freqz(num,den,512,CYPL);

plot(f,(angle(h)));

grid on;

zoom on;

IIR_DispMag代码:

function IIR_DispMag()       

 [num den CYPL YYYFlag]=IIR_Createfilter;

if(~YYYFlag)

    return;

end

figure(1);

[h f]=freqz(num,den,512,CYPL);

plot(f,abs(h));

grid on;

zoom on;

IIR_DispZplane代码

function IIR_DispZplane()

[num den CYPL YYYFlag]=IIR_Createfilter;

if(~YYYFlag)

    return;

end

figure(3);

zplane(num,den);

axis([-5,5,-2,2]);

IIR_GetWAVFile代码:

function sig=IIR_GetWAVFile()

[name,path]=uigetfile('*.wav','请选择一个.wav波形文件');

file_path=[path,name];

if(~(isstr(name))|~(isstr(path)))

    sig=[];

    return;

end

[data freq bits]=wavread(file_path);

time=length(data)/freq;

%info=['源信号-'name ';'num2str(time) '秒;fs'=num2str(freq) 'Hz'];

s=[];

s.data=data;

s.freq=freq;

s.bits=bits; 

%s.info=info;

s.time=time;

data_hndl=findobj(gcbf,'Tag','Button_WAV');

set(data_hndl,'Userdata',s);

IIR_Playorg代码:

function IIR_Playorg()

data_hndl=findobj(gcbf,'Tag','Button_WAV');

sig_info=get(data_hndl,'Userdata');

data=sig_info.data;

fs=sig_info.freq;

sound(data,fs);

IR_Createfilter代码:

function[num,den,FsCY,FlagYYY]=IIR_Createfilter()

num=[];

den=[];

FlagYYY=1;

hndl=gcbf;

name_hndl=findobj(hndl,'Tag','PMenu_Fileter');

str1_full=get(name_hndl,'String');

val=get(name_hndl,'Value');

fil_name=str1_full{val};

set(name_hndl,'UserData',fil_name);

type_hndl=findobj(hndl,'Tag','PMenu_Fileter_Style');

str2_full=get(type_hndl,'String');

val=get(type_hndl,'Value');

fil_type=str2_full{val};

set(type_hndl,'UserData',fil_type);

pbr_hndl=findobj(hndl,'Tag','P_Rp');

val=str2num(get(pbr_hndl,'string'));

set(pbr_hndl,'UserData',val);

sbr_hndl=findobj(hndl,'Tag','S_Rs');

val=str2num(get(sbr_hndl,'string'));

set(sbr_hndl,'UserData',val);

f1_hndl=findobj(hndl,'Tag','CY_Fs');

val=str2num(get(f1_hndl,'string'));

set(f1_hndl,'UserData',val);

f2_hndl=findobj(hndl,'Tag','P_Fp');

val=str2num(get(f2_hndl,'string'));

set(f2_hndl,'UserData',val);

f3_hndl=findobj(hndl,'Tag','S_Fs');

val=str2num(get(f3_hndl,'string'));

set(f3_hndl,'UserData',val);

fil_name=get(name_hndl,'UserData');

fil_type=get(type_hndl,'UserData');

Rp=get(pbr_hndl,'UserData');

Rs=get(sbr_hndl,'UserData');

f1=get(f1_hndl,'UserData');

FsCY=f1;

f2=get(f2_hndl,'UserData');

f3=get(f3_hndl,'UserData');

if(strcmp(fil_name,'巴特沃斯'))

    if(strcmp(fil_type,'低通'))

        Wp=2*pi*f2/f1;

        Ws=2*pi*f3/f1;

        OmigaP=Wp*f1;

        OmigaS=Ws*f1;

        [n W]=buttord(OmigaP,OmigaS,Rp,Rs,'s');

        [B A]=butter(n,W,'s');

        [num,den]=impinvar(B,A,f1);

    else

        Wp=2*pi*f2/f1;

        Ws=2*pi*f3/f1;

        OmigaP=Wp*f1;

        OmigaS=Ws*f1;

        [n W]=buttord(OmigaP,OmigaS,Rp,Rs,'s');

        [B A]=butter(n,W,'high','s');

        [num,den]=impinvar(B,A,f1);

    end

elseif(strcmp(fil_type,'低通'))

        Wp=2*pi*f2/f1;

        Ws=2*pi*f3/f1;

        wp1=2*f1*tan(Wp/2);                  %频率预畸   

        ws1=2*f1*tan(Ws/2);

        [n W]=cheb1ord(wp1,ws1,Rp,Rs,'s');

        [B A]=cheby1(n,1,W,'low','s');

        [num,den]=bilinear(B,A,f1);

    else

         Wp=2*pi*f2/f1;

        Ws=2*pi*f3/f1;

        wp1=2*f1*tan(Wp/2);                  %频率预畸   

        ws1=2*f1*tan(Ws/2);

        [n W]=cheb1ord(wp1,ws1,Rp,Rs,'s');

        [B A]=cheby1(n,1,W,'high','s');

        [num,den]=bilinear(B,A,f1);

    end

end

4        运行结果

4.1       运行结果

巴特沃斯低通滤波器的特性:

图4.1幅度响应

图4.2相位响应

图4.3零、极点分布

切比雪夫1高通滤波器的特性:

图4.4幅度响应

图4.5相位响应

图4.6零、极点分布

4.2       运行结果分析

从频率响应图中可以看出:巴特沃斯滤波器具有单调下降的幅频特性,通带内平滑;切比雪I型滤波器的幅频特性在通带内有波动,阻带内单调;chebyshev II型滤波器的幅频特性在阻带内有波动,通带内单调;椭圆滤波器的选择性相对前三种是最好的,下降斜度比较大,通带和阻带内均为等波纹,同样的性能指标,椭圆滤波器可以最低的阶数来实现。这样根据不同的要求可以选用不同类型的滤波器。

总      结

本次课程设计完成了IIR滤波器的设计,实现了巴特斯通低通、高通的特性显示。同时完成了切比雪夫1低通、高通的特性显示。本次课程设计的滤波器还可以对音频文件进行滤波,通过运行程序可以比较出滤波前后音质的不同 。滤波器为高通时,声音会有所降低,但声音比较尖锐;在低通时声音变低。通过运行程序,可以发觉巴特斯通、切比雪夫1对声音进行滤波后并无明显差别。在运行程序时应对应其滤波器设计要求正确设置通带频率和阻带频率,颠倒通带频率、阻带频率后,对于低通滤波器并无多少影响,但对于高通滤波器影响较大。本次设计并没有实现对滤波器带通,带阻的设计。      

致     谢

首先要感谢淮阴工学院、计算机工程学院为我们提供了一次宝贵的实验机会,让我们更加熟悉滤波器的设计和使用。同时要感谢各位指导老师的辛勤指导与耐心讲解,感谢在实习期间计算机工作室的工作人员的辛勤劳苦。最后还要感谢同组同学的帮助。可以说本次实验能够顺利完成多亏了同组同学的分组协作。因为本次课程设计期间我们要考三门试,由于时间安排比较紧,一个人独立完成所有内容,必然会造成顾此失彼。在这里我感觉到了团队协作的重要性。通过分工,完成自己的那部分,然后综合在一起在较短的时间内完成了实验内容。然后再一定时间内熟悉其他同学的设计思路,融会贯通,这样就可以较快的完成课程设计。

最后还要感谢淮阴工学院、计算机工程学院为我们提供的这次珍贵的实习机会,感谢工作人员在我们实习期间的辛勤劳苦,为我们解决机器故障。感谢指导老师对我们的辛勤指导,耐心问答,让我们更加了解本次设计的目的,进一步掌握所学的基础知识,并且可以将其应用到实践中去。还要感谢同组同学的帮助。新年将要来到,在这里祝各位老师、同学新年愉快。

参考文献

1数字信号处理.第2版 丁玉美,高西全 电子科技大学出版社 2001

2数字信号处理—理论、算法与实现 胡广书 清华大学出版社 1998

3数字信号处理教程—MATLAB释疑与实现 陈怀琛 电子工业出版社 2004

4基MATLAB的系统分析与设计—信号处理 楼顺天 电子科技大学出版社1998

5模拟和数字滤波器设计与实现 Harry Y-E Lam 人民邮电出版社 1985

6信号与系统 奥本海姆 西安交通大学出版社 1985

相关推荐