IIR滤波器课程设计数字信号处理课程设计报告.docx
《IIR滤波器课程设计数字信号处理课程设计报告.docx》由会员分享,可在线阅读,更多相关《IIR滤波器课程设计数字信号处理课程设计报告.docx(11页珍藏版)》请在冰豆网上搜索。
IIR滤波器课程设计数字信号处理课程设计报告
摘要:
数字滤波器在数字信号处理领域中已经得到广泛的应用。
利用MATLAB的数字滤波器设计工具可以快速有效地设计各种IIR数字滤波器,设计简单方便。
在设计过程中可以随时对比设计要求和滤波器特性,并可通过不断调整参数,以使滤波器的设计得到最优化。
本文所设计的IIR滤波器采用间接方法,借助模拟滤波器的设计方法进行的。
其设计步骤是:
先设计过渡模拟滤波器得到系统函数,然后将模拟滤波器系统函数按脉冲响应不变法转换成数字滤波器的系统函数。
滤波器的使用者不仅可以看到相应类型滤波器的频响图和零、极点图,还可以通过音频文件进行功能测试,从而实现滤波器的最优化。
关键词:
MATLAB;IIR数字滤波器;脉冲响应不变法;×××
1课程综述
1.1课题的来源和意义
随着信息时代和数字世界的到来,数字信号处理已成为当今一门极其重要的学科和技术领域。
目前数字信号处理在通信、语音、图像、自动控制、雷达、军事、航空航天、医疗和家用电器等众多领域得到了广泛的应用。
在数字信号处理中起着重要的作用并已获得广泛应用的是数字滤波器,根据其单位冲激响应函数的时域特性可分为两类:
无限冲激响应IIR滤波器和有限冲激响应FIR滤波器。
与FIR滤波器相比,IIR滤波器的实现采用的是递归结构,极点须在单位圆内,在相同设计指标下,实现IIR滤波器的阶次较低,即所用的存储单元少,从而经济效率高。
1.2预期目标
IIR数字滤波器可以通过巴特沃斯、切比雪夫I和切比雪夫II三种类型的模拟滤波器,采用脉冲响应不变法实现IIR数字低通、高通、带通和带阻滤波器;同时,还具有测试功能,滤波器的使用者可以选择音频对滤波器的效果进行测试。
1.3面对的问题及解决问题的关键技术
MATLAB是于1984年由美国MathWorks公司推出,该软件具有使用简单、方便,易编程,语言简练,函数库可任意扩充,采用全新数据类型和面向对象编程技术等特点,有强大的数值分析、矩阵运算、图形绘制、数据处理等功能,因此已被广泛应用在教学、科研和工程设计的各个领域。
随着MATLAB软件的信号处理工具箱的推出,如今MATLAB已经成为信号与信息处理,特别是数字信号处理应用中分析与仿真设计的主要工具。
传统的滤波器分析与设计均使用繁琐的公式计算,改变参数后需要重新运算,从而在分析与设计滤波器尤其是高阶滤波器时工作量特别大,利用MATLAB信号处理工具箱可以快速而有效地实现滤波器的分析、设计与仿真。
2系统分析
2.1涉及的基础知识
滤波器,是指对输入信号起到滤波作用的系统,其时域输入输出关系为:
,假定、的傅里叶变换均存在,则滤波器输入输出的频域关系为。
数字滤波器是一种用来过滤时间离散信号的数字系统,通过对抽样数据进行数字处理来达到频域滤波的目的。
数字滤波器也是具有一定传输选择特性的数字信号处理装置,其输入、输出均为数字信号,实质上是一个由有限精度算法实现的线性时不变离散系统。
设计IIR滤波器的任务就是寻求一个物理上可实现的系统函数,使其频率响应满足所希望得到的频域指标,即符合给定的通带截止频率、阻带截止频率、通带最大衰减、阻带最小衰减。
2.1.1三种模拟原型滤波器
1.滤波器的特点:
(1)巴特沃斯滤波器:
从通带中心向两边幅频特性单调下降。
(2)切比雪夫I滤波器:
通带内有等纹幅频特性函数,阻带内有单调下降的幅频特性函数。
(3)切比雪夫II滤波器:
通带内有单调下降的幅频特性函数,阻带内有等纹幅频特性函数。
2.两种低通逼近法
(1)巴特沃斯滤波器低通逼近法
巴特沃斯低通滤波器幅度平方函数定义为
式中,N为正整数,代表滤波器的阶数。
(2)切比雪夫低通逼近法
2.2解决问题的基本思路
数字滤波器按单位脉冲相应h(n)的时域特性可分为无限长脉冲响应IIR滤波器和有限长脉冲响应FIR滤波器。
其中IIR滤波器一般采用递归型的实现结构,其N阶递归型数字滤波器的差分方程为:
(2-1)
系数至少有一项不为零,说明必须将延时的输出序列反馈回来。
相应的IIR滤波器的系统函数为:
(2-2)
IIR滤波器的系统函数的设计就是确定各系数,或零极点,,A,以使滤波器满足给定的性能要求。
本课题利用模拟滤波器的理论来设计数字滤波器。
首先,设计一个合适的模拟滤波器,然后用脉冲响应不变法变换成满足预定指标的数字滤波器,即从已知的模拟滤波器传递函数设计数字滤波器的系统函数。
脉冲响应不变法是从滤波器的脉冲响应出发,使数字滤波器的单位脉冲响应序列h(n)模仿模拟滤波器的冲激响应,将等间隔采样,使h(n)正好等于的采样值。
(2-3)
再对h(n)求Z变换,即得数字滤波器的系统函数:
(2-4)
具体步骤:
(1)将数字滤波器设计指标转换为相应的模拟滤波器指标。
(2)设计相应的模拟滤波器,得到模拟系统函数。
(3)将模拟滤波器系统函数转换成数字滤波器系统函数。
2.3总体方案
1.创建图形化用户界面。
2.编写控件回调函数
在MATLAB的图形用户界面应用程序中,控件主要响应用户的鼠标单击动作。
响应鼠标动作的方法通过编写回调函数来完成。
回调函数是指在界面控件被选中的时候,响应动作的M语言函数。
回调函数主要完成的功能是:
(1)获取发出动作的对象句柄;
(2)根据发出的动作,设置影响的对象属性。
3.编写功能子函数
(1)函数IIR_Createfilter,用于根据设定参数创建数字滤波器。
(2)显示幅度谱函数IIR_DispMag。
(3)显示相位谱函数IIR_DispAngle。
(4)显示零极点图函数IIR_DispZplane。
(5)选择波形文件函数IIR_GetWAVFile。
(6)播放原始波形文件函数IIR_Playorg。
(7)显示幅度谱函数IIR_Dispmod。
2.3功能模块框图
图2.1功能模块框图
3系统设计
3.1算法描述
1.函数IIR_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);%将文本信息设置到UserData
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');
f22_hndl=findobj(hndl,'Tag','P_Fp2');
val=str2num(get(f22_hndl,'string'));
set(f22_hndl,'UserData',val);
f32_hndl=findobj(hndl,'Tag','S_Fs2');
val=str2num(get(f32_hndl,'string'));
set(f32_hndl,'UserData',val);
f22=get(f22_hndl,'UserData');
f32=get(f32_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;
[nW]=buttord(OmigaP,OmigaS,Rp,Rs,'s');
%计算相应的模拟滤波器阶数N和3dB截止频率W
[BA]=butter(n,W,'s');%计算相应的模拟滤波器系统函数
[num,den]=impinvar(B,A,f1);%用脉冲响应不变法将模拟滤波器转换成数字滤波器
%数字高通滤波器的设计
elseif(strcmp(fil_type,'高通'))
Wp=2*pi*f2/f1;
Ws=2*pi*f3/f1;
OmigaP=Wp*f1;
OmigaS=Ws*f1;
[nW]=buttord(OmigaP,OmigaS,Rp,Rs,'s');
[BA]=butter(n,W,'high','s');
[num,den]=impinvar(B,A,f1);
%数字带通滤波器的设计
elseif(strcmp(fil_type,'带通'))
Wp=2*pi*[f2,f22]/f1;
Ws=2*pi*[f3,f32]/f1;
OmigaP=Wp*f1;
OmigaS=Ws*f1;
[nW]=buttord(OmigaP,OmigaS,Rp,Rs,'s');
[BA]=butter(n,W,'s');
[num,den]=impinvar(B,A,f1);
%数字带阻滤波器的设计
elseif(strcmp(fil_type,'带阻'))
Wp=2*pi*[f2,f22]/f1;
Ws=2*pi*[f3,f32]/f1;
OmigaP