DSP课程设计IIR滤波器分析与设计课程设计报告 淮阴工学院.docx
《DSP课程设计IIR滤波器分析与设计课程设计报告 淮阴工学院.docx》由会员分享,可在线阅读,更多相关《DSP课程设计IIR滤波器分析与设计课程设计报告 淮阴工学院.docx(18页珍藏版)》请在冰豆网上搜索。
DSP课程设计IIR滤波器分析与设计课程设计报告淮阴工学院
1课题综述
1.1课题来源
随着数字集成电路,设备和系统技术的快速进步,通过数字方法进行信号处理已变得越来越有吸引力。
大规模一般用途的计算机和特殊用途硬盘的高效性,已使得实时滤波既实用又经济。
目前主要有两类滤波器,模拟滤波器和数字滤波器,它们在物理组成和工作方式上完全不同,而模拟滤波器的技术发展已相当成熟,所以研究的重点基本上放在了数字滤波器上。
滤波器的功能是用来移除信号中不需要的部分,比如随机噪声;或取出信号中的有用部分,如位于某段频率范围内的成分。
目前随着计算机技术和数字信号处理器芯片的发展,使我们更为便利地识别和提取各种各样的信号。
因此研究不同数字滤波器的设计原理和稳定性分析对于满足军事、航空、民营等等各个领域的信号处理要求具有十分重要的意义。
1.2预期目标
能够理解并掌握无限脉冲响应数字滤波器(IIR)的机理,分析IIR滤波器的结构特性,观察IIR滤波器的频域特性。
能够通过MATLAB实现巴特沃斯,切比雪夫的高通低通滤波器的幅频响应,相频响应,以及零极点的图像的勾画。
1.3面对的问题
通过MATLAB实现切比雪夫滤波器的设计,以及通过MATLAB对高通,带通,带阻滤波器的设计。
1.4需要解决的关键技术
了解巴特沃斯以及切比雪夫滤波器理论上的设计过程,从理论推至代码程序的实现。
掌握高通低通带通带阻滤波器的幅频响应,相频响应,以及零极点的图像的意义,并且能够寻找到实现他们的MATLAB函数。
2系统分析
2.1涉及的基础知识
2.1.1巴特沃斯滤波器
巴特沃斯滤波器是电子滤波器的一种。
巴特沃斯滤波器的特点是通频带的频率响应曲线最平滑。
巴特沃斯滤波器的特点是通频带内的频率响应曲线最大限度平坦,没有起伏,而在阻频带则逐渐下降为零。
在振幅的对数对角频率的波特图上,从某一边界角频率开始,振幅随着角频率的增加而逐步减少,趋向负无穷大。
2.1.2切比雪夫滤波器
切比雪夫滤波器是在通带或阻带上频率响应幅度等波纹波动的滤波器。
切比雪夫滤波器在过渡带比巴特沃斯滤波器的衰减快,但频率响应的幅频特性不如后者平坦。
切比雪夫滤波器和理想滤波器的频率响应曲线之间的误差最小,但是在通频带内存在幅度波动。
I型切比雪夫滤波器在通带(或称“通频带”)上频率响应幅度等波纹波动的滤波器称为“I型切比雪夫滤波器”;II型切比雪夫滤波器在阻带(或称“阻频带”)上频率响应幅度等波纹波动的滤波器称为“II型切比雪夫滤波器”。
2.1.3高通低通带通带阻滤波器
高通滤波器:
让某一频率以上的信号分量通过,而对该频率以下的信号分量大大抑制的电容、电感与电阻等器件的组合装置。
低通滤波器:
让某一频率以下的信号分量通过,而对该频率以上的信号分量大大抑制的电容、电感与电阻等器件的组合装置。
带通滤波器:
指能通过某一频率范围内的频率分量、但将其他范围的频率分量衰减到极低水平的滤波器,与带阻滤波器的概念相对。
这些滤波器也可以用低通滤波器同高通滤波器组合来产生。
带阻滤波器:
指能通过大多数频率分量、但将某些范围的频率分量衰减到极低水平的滤波器,与带通滤波器的概念相对。
2.2解决的基本思路
利用模拟滤波器来设计数字滤波器,也就是使数字滤波器能模仿模拟滤波器的特性,这种模仿可以从不同的角度出发。
脉冲响应不变法是从滤波器的脉冲响应出发,根据Wp,Ws,Rp,Rs技术指标,求出滤波器阶数N。
根据阶数N查表,得到归一化传输函数Ha(p)将Ha(p)去归一化。
将p=s/Ωc代入Ha(p),得到实际的滤波器传输函数H(S)。
2.3总体方案
2.3.1巴特沃斯滤波器MATLAB实现
其调用格式为:
[nW]=buttord(OP,OS,Rp,Rs,'s');
[BA]=butter(n,W,'s');
[num,den]=impinvar(B,A,f1);
2.3.2切比雪夫滤波器MATLAB实现
其调用格式为:
[nW]=cheb1ord(wp1,ws1,Rp,Rs,'s');
[BA]=cheby1(n,1,W,'type','s');
[num,den]=bilinear(B,A,f1);
2.4功能模块框图
开始
↓
读入数字滤波器技术指标
↓
将指标转换成归一化模拟低通滤波器的指标
↓
设计归一化的模拟低通滤波器阶数N和3db截止频率
↓
模拟域频率变换,将G(P)变换成模拟带通滤波器H(s)
↓
用脉冲响应不变法将H(s)转换成数字带通滤波H(z)
↓
输入信号后显示相关结果
图2.1
3详细设计
3.1巴特沃斯低通滤波特性(MATLAB)
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,'s');
[num,den]=impinvar(B,A,f1);
3.2巴特沃斯高通滤波特性(MATLAB)
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);
3.3切比雪夫低通滤波特性(MATLAB)
Wp=2*pi*f2/f1;
Ws=2*pi*f3/f1;
wp1=2*f1*tan(Wp/2);
ws1=2*f1*tan(Ws/2);
[nW]=cheb1ord(wp1,ws1,Rp,Rs,'s');
[BA]=cheby1(n,1,W,'low','s');
[num,den]=bilinear(B,A,f1);
3.4切比雪夫高通滤波特性(MATLAB)
Wp=2*pi*f2/f1;
Ws=2*pi*f3/f1;
wp1=2*f1*tan(Wp/2);
ws1=2*f1*tan(Ws/2);
[nW]=cheb1ord(wp1,ws1,Rp,Rs,'s');
[BA]=cheby1(n,1,W,'high','s');
[num,den]=bilinear(B,A,f1);
4程序调试
4.1巴特沃斯低通滤波特性
图4.1设计选择界面
当Fs=1000Hz;Wp=100Hz;Ws=300Hz;Rp=1dB;Rs=60dB时:
图4.2幅度响应图形
图4.3相位响应图形
图4.4零极点图形
4.2巴特沃斯高通滤波特性
当Fs=1000Hz;Wp=300Hz;Ws=100Hz;Rp=1dB;Rs=60dB时:
图4.5幅度响应图形
图4.6相位响应图形
图4.7零极点图形
4.3切比雪夫低通滤波特性
当Fs=1000Hz;Wp=100Hz;Ws=300Hz;Rp=1dB;Rs=60dB时:
图4.8幅度响应图形
图4.9相位响应图形
图4.10零极点图形
4.4切比雪夫高通滤波特性
当Fs=1000Hz;Wp=300Hz;Ws=100Hz;Rp=1dB;Rs=60dB时:
图4.11幅度响应图形
图4.12相位响应图形
图4.13零极点图形
5运行与测试
5.1选择音频文件(WAV)
图5.1选择界面
5.2滤波后音频特点
我选择的是低通巴特沃斯来对上述音乐文件滤波的,能够清晰的辨别出滤波前后的声音的频率是不一样的。
滤波后的声音让人感觉很低沉。
这也说明了低通滤波器的特性。
同理,我们可以得出,如果选用高通滤波器,不难发现其声音将会变得很尖锐。
这就体现出滤波器实际应用性。
6全文代码设计
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);
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;
[nW]=buttord(OmigaP,OmigaS,Rp,Rs,'s');
[BA]=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;
[nW]=buttord(OmigaP,OmigaS,Rp,Rs,'s');
[BA]=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);
[nW]=cheb1ord(wp1,ws1,Rp,Rs,'s');
[BA]=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);
[nW]=cheb1ord(wp1,ws1,Rp,Rs,'s');
[BA]=cheby1(n,1,W,'high','s');
[num,den]=bilinear(B,A,f1);
end
end
functionIIR_DispAngle()%显示相位谱
[numdenCYPLYYYFlag]=IIR_Createfilter;
if(~YYYFlag)
return;
end
figure
(2);
[hf]=freqz(num,den,512,CYPL);
plot(f,(angle(h)));
gridon;
zoomon;
IIR_DispMag%显示幅度谱函数
functionIIR_DispMag()
[numdenCYPLYYYFlag]=IIR_Createfilter;
if(~YYYFlag)
return;
end
figure
(1);
[hf]=freqz(num,den,512,CYPL);
plot(f,abs(h));
gridon;
zoomon;
functionIIR_DispZplane()%绘制零极点图
[numdenCYPLYYYFlag]=IIR_Createfilter;
if(~YYYFlag)
return;
end
figure(3);
zplane(num,den);
axis([-5,5,-2,2]);
functionsig=IIR_GetWAVFile()%选择波形文件
[name,path]=uigetfile('*.wav','请选择一个.wav波形文件');
file_path=[path,name];
if(~(isstr(name))|~(isstr(path)))
sig=[];
return;
end
[datafreqbits]=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);
functionIIR_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);
functionIIR_Playmod%显示幅度谱函数
data_hndl=findobj(gcbf,'Tag','Button_WAV');
sig_info=get(data_hndl,'Userdata');
data=sig_info.data;
fs=sig_info.freq;
[BAsuc1suc2]=IIR_Createfilter;
if(~suc2)
return;
end
out=filter(B,A,data);
sound(out,fs);
总结
通过这此课程设计,我对设计数字滤波器的整个过程有了很好的掌握。
前段时间自己学习了教材上的滤波器设计,虽然能够掌握它们,但是不能形象的刻画在自己的大脑中。
恰恰这次课程设计帮我解决了这个难题。
巴特沃斯有关特性还是很好理解的,至于切比雪夫的特性,之前就知道是等波纹的,但是一直不能形象理解,通过这次的幅频响应,相频响应的图形能过更好的了解切比雪夫。
熟悉了脉冲响应不变法,巴特沃斯设计模拟滤波器的运用,也比较熟悉了。
通过对数字高通低通滤波器的设计,熟悉了MATLAB的运行环境,初步掌握了MATLAB语言在数字信号处理中一些基本库函数的调用和编写基本程序等应用;熟悉了滤波器设计的一般原理,对滤波器有了一个感性的认识;学会了数字高通滤波器设计的一般步骤;加深了对滤波器设计中产生误差的原因以及脉冲响应不变法优缺点的理解和认识。
最后利用自己设计的滤波器,对音频文件进行滤波,更使我体会到滤波器的实用性。
总之,使理论联系了实际,巩固并深化了对课本基本知识的认识和理解,使理论得以升华。
致谢
本次课程设计的内容是,IIR滤波器的设计。
首先要感谢我的母校淮阴工学院、计算机工程学院提供的这次难得的实践机会,因为以后这种通过实践来巩固自己学习的理论知识的条件不多,这很难得。
还要感谢实验室人员为我们提供了的良好的实验环境,特别要感谢四位指导教师的辛勤指导,当我们有疑问,你们能够给我们提供思路,而不是提供答案,这样有利于我们的独立思考,养成在学习上自主创新的好习惯,你们的思路不但为我的课程设计解决了难题,而且让我更加深刻的理解IIR设计的原理,更加有利于以后再这方面的学习与研究。
在这里还要感谢宿舍同学的互帮互助,这不但有利于课题的研究,还有利于学习气氛的渲染。
此次设计,还参考了不少参考文献,其中最有利于我们实验的是我们的教材还有于永彦老师编著的实验指导书,里面提供了设计的大部分代码,还有MATLAB窗体设计的基本步骤,在一定程度上让我们轻松了不少。
参考文献
1丁玉美,高西全.数字信号处理.第2版.西安:
西安电子科技大学出版社,2001
2宗孔德,多抽样率信号处理.北京:
清华大学出版社,2008
3胡广书,数字信号处理.北京:
清华大学出版社,1997
4程佩清.数字信号处理教程.北京:
清华大学出版社,2001
5喻春轩译,电子滤波器设计.电子工业出版社,1986
6于永彦,数字信号处理实践教程.淮阴工学院,2010