数字信号处理课程设计.docx
《数字信号处理课程设计.docx》由会员分享,可在线阅读,更多相关《数字信号处理课程设计.docx(25页珍藏版)》请在冰豆网上搜索。
数字信号处理课程设计
昆明理工大学
《数字信号处理》课程设计
设计题目:
FIR、IIR滤波器的设计与实现
学院:
信息工程与自动化学院
专业:
通信工程
年级:
2007级
姓名:
张瑞
学号:
2
指导老师:
黄欢
摘要
FIR、IIR数字滤波器是一类重要的滤波器,它用较低的阶数就可以很好地实现频率选择特性,因此在通信、语言与信号处理、HDTV(高画质电视)、生物医学以及地震勘测等许多方面都得到了广泛的应用。
因此,FIR、IIR数字滤波器设计一直是数字信号处理领域中重要的研究课题之一。
多年来,国内外学者在FIR、IIR数字滤波器设计问题上作了大量的探索并提出了许多有效的设计方法。
本文采用“巴特沃斯方法”建立了IIR数字滤波器模拟滤波器模型,用窗函数法——矩形窗、汉明窗、汉明窗、汗宁窗、凯撒窗建立了FIR数字滤波器模拟滤波器模型,并用MATLAB方法对该优化数学模型的系数进行求解。
由于窗函数法设计类似只是加的窗函数不同,故本文重点阐述矩形窗的设计方法。
关键字:
滤波器巴特沃斯IIRFIR矩形窗汉明窗汉明窗汗宁窗凯撒窗
摘要2
目录3
第一章概述4
1.1背景知识4
1.2滤波器概述4
第二章FIR滤波器设计5
2.1MATLAB仿真过程5
2.1.1FIR滤波器的基本结构5
2.2FIR滤波器的MATLAB设计6
2.2.1.fir1函数6
2.2.2.fir2函数7
2.3滤波器的设计(矩形窗)7
2.3.1高通FIR矩形窗实现8
2.3.2低通FIR矩形窗实现10
2.3.3带通FIR矩形窗实现12
2.4滤波器的设计(汉明窗)14
2.5滤波器的设计(汗宁窗)14
2.6滤波器的设计(布莱克曼)14
2.7滤波器的设计(凯撒窗)14
第三章IIR滤波器设计14
3.1IIR滤波器14
3.1.1.滤波器的特点:
14
3.1.2、IIR滤波器的结构:
14
3.2IIR滤波器的设计原理15
3.2.1IIR滤波器的设计概述15
3.2.2IIR滤波器的MATLAB设计原理(巴特沃斯)16
3.3设计说明16
3.3.1IIR滤波器的MATLAB设计程序16
3.3.2.音频文件采集数据17
3.3.3主要函数分析:
21
3.4结果分析21
结论22
总结与收获22
谢辞23
参考文献24
第一章概述
1.1背景知识
数字信号处理(DigitalSignalProcessing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。
DSP有两种含义:
digitalSignalProcessing(数字信号处理)、DigitalSignalProcessor(数字信号处理器)。
我们常说的DSP指的是数字信号处理器。
数字信号处理器是一种适合完成数字信号处理运算的处理器。
20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。
在过去的二十多年时间里,数字信号处理已经在通信等领域得到极为广泛的应用。
数字信号处理是利用计算机或专用处理设备,以数字形式对信号进行采集、变换、滤波、估值、增强、压缩、识别等处理,以得到符合人们需要的信号形式。
它是以众多学科为理论基础的,它所涉及的范围极其广泛。
例如,在数学领域,微积分、概率统计、随机过程、数值分析等都是数字信号处理的基本工具,与网络理论、信号与系统、控制论、通信理论、故障诊断等也密切相关。
近来新兴的一些学科,如人工智能、模式识别、神经网络等,都与数字信号处理密不可分。
可以说,数字信号处理是把许多经典的理论体系作为自己的理论基础,同时又使自己成为一系列新兴学科的理论基础。
1.2滤波器概述
1917年美国和德国科学家分别发明了LC滤波器,次年导致了美国第一个多路复用系统的出现。
50年代无源滤波器日趋成熟。
自60年代起由于计算机技术、集成工艺和材料工业的发展,滤波器发展上了一个新台阶,并且朝着低功耗、高精度、小体积、多功能、稳定可靠和价廉方向努力,其中小体积、多功能、高精度、稳定可靠成为70年代以后的主攻方向,导致RC有源滤波器、数字滤波器、开关电容滤波器和电荷转移器等各种滤波器的飞速发展。
到70年代后期,上述几种滤波器的单片集成被研制出来并得到应用。
80年代致力于各类新型滤波器性能提高的研究并逐渐扩大应用范围。
90年代至今主要致力于把各类滤波器应用于各类产品的开发和研制。
当然对滤波器本身的研究仍在不断进行。
滤波器的分类方法很多,目前尚无统一的划分方法。
但总的来说,滤波器可以分为经典滤波器和现代滤波器两大类。
经典滤波器是假定输入信号中的有用成分和无用成分各占不同的频带,通过滤波器后,便可将不需要的频率信号滤掉,留下有用信号。
如果信号和噪声的频谱相互混叠,则经典滤波器无能为力。
现代滤波器是从含有噪声的输入信号中估计出信号的某些特征或信号本身,它将信号和噪声都看作是随机信号,利用它们的统计特性(如自相关函数、功率谱等)推导出滤波器的传递函数。
滤波器按照处理信号的类型可以分为模拟滤波器和数字滤波器两种。
当滤波器的输入输出是连续时间信号时,滤波器的单位冲激响应h(t)也是连续的,称为模拟滤波器(AnaloglogFilter,简称AF)。
它只能用硬件电路来实现,其元件是电阻、电容、电感和集成运算放大器等。
当滤波器的输入输出是离散时间信号时,滤波器的单位脉冲响应h(n)也必然是离散的,该滤波器称为数字滤波器(DigitalFilter,简称DF)。
它既可以用硬件实现,如延迟器、乘法器和加法器等,也可以用软件实现,即为一段线性卷积的程序。
按照滤波功能可分为低通(LP),高通(HP)、带通(BP)和带阻(BS)滤波器四种。
按照滤波器的实现方法,模拟滤波器可分为LC滤波器、螺旋滤波器、晶体滤波器、陶瓷滤波器、声表面滤波器、微带滤波器和有源滤波器等。
数字滤波器可分为有限冲激响应滤波器和无限冲激响应滤波器。
第二章FIR滤波器设计
2.1MATLAB仿真过程
2.1.1FIR滤波器的基本结构
数字滤波器是将输入新号序列,按规定的算法进行处理,从而得到所期望的输出序列。
一个线性位移不变系统的输出序列
和输入序列
之间的关系,应满足常系数线性差分方程:
式中,
为输入序列;
为输出序列;
和
为滤波器系数;N为滤波器阶数。
若所有的
均为0,则得到FIR滤波器的差分方程为
;对这式进行Z
变换,整理后可得FIR滤波器的传递函数为
;FIR滤波器的结构图如下:
FIR滤波器的单位冲激响应
是一个有限长序列。
若
为实数,且满足偶对称或奇对称的条件,即
或
,则FIR滤波器具有线性相位特性。
偶对称线性相位FIR滤波器的差分方程为
式中,N为偶数。
在数字滤波器中,FIR滤波器无反馈回路,是一种无条件系统;并且可以设计成具有线性相位特性。
2.2FIR滤波器的MATLAB设计
滤波器的设计包含在工具箱的Signal中,它提供了多重FIR滤波器设计方法。
下面介绍标准频率响应设计法fir1和任意频率响应法fir2.
2.2.1.fir1函数
用来设计标准频率响应的FIR滤波器,可实现加窗线性相位FIR数字滤波器设计。
语法:
b=fir1(n,
);
b=fir1(n,
’ftype’);
b=fir1(n,
’Window’);
b=fir1(n,
’ftype’,Window);
其中,n为滤波器的阶数;
为滤波器的截止频率;ftype参数用来决定滤波器的类型,ftype=high时,可设计高通滤波器,当ftype=stop时,可设计带阻滤波器。
Window参数用来指定滤波器采用的窗函数类型,其默认值为汉明窗。
使用fir1函数可设计标准的低通、高通、带通和带阻滤波器。
滤波器的系数包含在返回值b中,可表示为:
2.2.2.fir2函数
用来设计有任意频率响应的各种加窗FIR滤波器。
语法:
b=fir2(n,f,m);
b=fir2(n,f,m,Window);
b=fir2(n,f,m,npt);
b=fir2(n,f,m,npt,Window);
b=fir2(n,f,m,npt,lap);
b=fir2(n,f,m,npt,lap,Window);
其中,参数n为滤波器的阶数;f为频率矢量,且
,f=1对应于
。
矢量f按升序排列,且第一个元素必须为0,最后一个必须为1,并可以包含重复的频率点;m为幅度点矢量,在矢量m中包含了与f相对应的期望得到的滤波器幅度;Window是用来指定所使用的窗函数类型,其默认值为汉明;参数npt用来指定fir2函数对频率响应进行内插的点数;lap是用来指定fir2函数在重复频率点附近插入的区域大小。
2.3滤波器的设计(矩形窗)
此处设计的是一个采样频率为16KHZ、截止频率为200HZ的一个滤波器,并且滤波器阶数为30阶。
对采样频率和截止频率进行归一化处理,可以得出归一化后的截止频率,然后产生滤波器系数,并且利用上面的WAV文件读取结果进行滤波处理。
下面是滤波器的主要代码:
2.3.1高通FIR矩形窗实现
2.3.2低通FIR矩形窗实现
2.3.3带通FIR矩形窗实现
2.4滤波器的设计(汉明窗)
其他程序段不变,令
wn=hamming(N);%汉明窗
2.5滤波器的设计(汗宁窗)
其他程序段不变,令
wn=hanning(N);%汉宁窗
2.6滤波器的设计(布莱克曼)
其他程序段不变,令
wn=blackman(N);%凯撒窗
2.7滤波器的设计(凯撒窗)
其他程序段不变,令
wn=kaiser(N+1,beta);%凯撒窗
第三章IIR滤波器设计
3.1IIR滤波器
3.1.1.滤波器的特点:
数字信号处理领域,数字滤波器的设计在其中占有很重要的地位。
从实现方法上分,数字滤波器有两种:
有限长单位冲激响应滤波器(FIR)和无限长单位冲激响应滤波器(IIR)。
如果与幅度响应相比,相位失真的重要性能是第二位的,则所设计的数字滤波器可以由需要较少存储空间、计算复杂程度较低、从而成本也较低的IIR结构来实现,IIR滤波器要比FIR滤波器获得更高的性能,它具有工作速度快、耗用存储空间少的特点,即结构简单,运算量小,经济,高效,用较小的阶数获得很高的选择性,因此得到了广泛的应用,相比之下,FIR的设计有一定的难度,实现的成本费用高。
但有利就必有弊,IIR滤波器在一般的定点DSP上实现比较困难。
因为IIR滤波器的反馈通道计算会导致结果的溢出,虽然可以用缩放输入数据的比例的办法来防止溢出错误,但是这将使输出信号动态范围减少,为了恢复输出信号的动态范围,可以对输出信号作一定左移放大。
3.1.2、IIR滤波器的结构:
IIR滤波器差分方程的一般表达式为
y[n]=
式中,x(n)为输入序列;y(n)为输出序列;
和
为滤波器系数。
若所有系数
=0,则为FIR滤波器。
IIR滤波器具有无限长的单位脉冲响应,在结构上存在反馈回路,具有递归性,即IIR滤波器的输出不仅与输入有关,而且与过去的输出有关。
传递函数可以写成:
H(z)=
=C
式中,具有N个极点
和N个零点
,若有极点位于单位圆外将导致系统不稳定。
对于IIR滤波器,系统稳定的条件如下:
(1)若
的绝对值小于1,系统稳定;
(2)若
的绝对值大于1,系统不稳定。
IIR滤波器具有多种形式,主要有:
直接性,标准型,变换型,级联型和并联型。
二阶IIR滤波器,又称为二阶基本节,分为直接型,标准型和变换型。
对于一个二阶基本节,其输出可以写成:
y(n)=
x(n)+
x(n-1)+
x(n-2)-
y(n-1)-
y(n-2)
3.2IIR滤波器的设计原理
3.2.1IIR滤波器的设计概述
IIR滤波器的设计可以利用模拟滤波器原型,借鉴成熟的模拟滤波器的设计结果进行双线性变换,将模拟滤波器变成满足预定指标的数字滤波器,即根据模拟设计理论设计出满足要求的传递函数H(s),然后将H(s)变换成满足要求的数字滤波器的传递函数H(z)。
设计IIR滤波器的基础是设计模拟滤波器的原型,这些原型滤波器主要有:
(1)巴特沃斯(Butterworth)滤波器,其幅度响应在通带内具有最平特性;
(2)切比雪夫(Chebyshev)滤波器,在通带内具有等波纹特性,且阶数小于巴特沃斯滤波器。
(3)椭圆(Elliptic)滤波器,在通带和阻带内具有等波纹特性,且阶数最小。
3.2.2IIR滤波器的MATLAB设计原理(巴特沃斯)
IIR滤波器设计首先要得到它的系数。
我们可以用MATLAB来辅助设计得到。
这里用巴特沃斯方法来实现。
主要应用函数为butter函数
功能:
用于设计巴特沃斯(Butterworth)滤波器。
语法:
[b,a]=butter(n,Wn);
[b,a]=butter(n,Wn,‘ftype’);
说明:
butter函数可以设计低通,带通,高通和带阻数字滤波器,其特性可使通带内的幅度响应最大限度地平坦,但会损失截止频率处的下降斜度,使幅度相应衰减较慢。
·[b,a]=butter(n,Wn)可以设计截止频率为Wn的n阶低通Butterworth滤波器,其中截止频率Wn应满足0<=Wn<=1,Wn=1相当于0.5fs(采样频率)。
当Wn=[W1,W2]时,butter函数产生一个2n阶的数字带通滤波器,其通带为W1·[b,a]=butter(n,Wn,‘ftype’)可以设计高通和带阻滤波器。
当ftype=high时,可设计截止频率为Wn的高通滤波器;当ftype=stop时,可设计带阻滤波器,此时Wn=[W1,W1],阻带为W1使用butter函数设计滤波器,可以使通带内的幅度响应最大限度地平坦,但会损失截止频率处的下降斜度,因此,butter函数主要用于设计通带平坦的数字滤波器。
3.3设计说明
3.3.1IIR滤波器的MATLAB设计程序
1.巴特沃思方法求IIR滤波器传递函数系数。
(1)程序段:
滤波器的设计指标为:
为IIR低通滤波器,采样率为8000HZ,fp=2100HZ
fs=2500HZ,Rp=3dB,Rs=25dB。
f_N=8000;%采样率
f_p=2100;f_s=2500;R_p=3;R_s=25;%设计要求指标
Ws=f_s/(f_N/2);Wp=f_p/(f_N/2);%计算归一化角频率
[n,Wn]=buttord(Wp,Ws,R_p,R_s);%计算阶数和截止频率
[b,a]=butter(n,Wn);%计算H(z)
freqz(b,a,1000,8000)%作出H(z)的幅频相频图,freqz(b,a,计算点数,采样率)
subplot(2,1,1);axis([04000-303])
(2)结果显示:
图2.3.1-1巴特沃思滤波器的设计效果图
(3)主要函数说明:
其中语句[b,a]=butter(n,Wn)是计算巴特沃思低通滤波器的系数,butter函数可以设计低通,带通,高通和带阻数字滤波器,其特性可使通带内的幅度响应最大限度地平坦,但会损失截止频率处的下降斜度,使幅度相应衰减较慢。
在语句中,n为低通滤波器的阶数,Wn为低通滤波器的截止频率,b为H(Z)的分子多项式的系数,a为H(Z)的分母多项式系数.
3.3.2.音频文件采集数据
2.3.1-2音频文件波形图
2.3.1-3IIR-5阶低通滤波后信号的波形、频谱
2.3.1-4IIR-15阶带通滤波后信号的波形、频谱
2.3.1-5IIR-5阶高通滤波后信号的波形、频谱
3.3.3主要函数分析:
MATLAB中,滤波器主要是使用“filter”指令实现,从以上巴特沃思的设计中,求得了滤波器传递函数的分子和分母[b,a]之后,用“filter”指令可以实现对应的滤波器,具体语法为F=filter(b,a,yyy)即n阶滤波器H(z)的分子系数为b,分母系数为a,输入数据为yyy。
3.4结果分析
在数字信号处理中,滤波有极其重要的作用,数字滤波器是谱分析、雷达信号处理、通信信号处理应用中的基本处理算法.在系统设计中,滤波器的好坏将直接影响系统的性能当今FIR滤波器主要的不足在于其较好的性能是以较高的阶数为代价换来的.对于相同的设计指标,FIR滤波器所要求的阶数比IIR滤波器高2~5倍,信号的延迟偏大.因此,在保证相同性能的前提下,尽量降低其阶数是FIR数字滤波器设计的目标之一。
结论
这次设计主要是利用MATLAB编程,实现FIR、IIR滤波过程,并使用不同的编程方法编程所得到的结果进行比较。
在这次设计中,通过MATLAB成功的实现了语音文件的读取,FIR、IIR滤波,音频文件的播放。
不过还是右很多不足,比如图形的动态显示等等。
这次设计基本完成了预期目标,验证了MATLAB的滤波功能。
基于MATLAB的信号处理工具箱为数字滤波器设计带来了全新的实现手段,设计快捷方便,仿真波形直观。
在MATLAB下设计IIR滤波器可使用Butterworth函数设计出巴特沃斯滤波器;使用kaise函数设计出凯撒窗FIR型滤波器,使用blackman函数设计出布莱克曼窗型滤波器,使用boxcar函数设计出矩形窗FIR型滤波器等。
与FIR滤波器的设计不同,IIR滤波器设计时的阶数不是由设计者指定,而是根据设计者输入的各个滤波器参数(截止频率、通带滤纹、阻带衰减等),由软件设计出满足这些参数的最低滤波器阶数。
在MATLAB下设计不同类型IIR滤波器均有与之对应的函数用于阶数的选择。
综上所述,在这次设计中收获颇多,对数字信号处理有了更深层次的理解,丰富了编程知识,也让所学的理论知识得以应用。
也会尽管此次设计已经达到预期结果,由于时间问题,在很多方面还不足,还有待与优化改进。
总结与收获
本学期我们开设了数字信号处理这门课,这和我们专业有很大的联系,而书上学的都是些理论方面的知识。
正所谓“纸上谈兵终觉浅,觉知此事要躬行。
”学习任何知识,仅从理论方面去求知,而不去实践、探索是不够的。
在进行matlab编程时我总结了如下经验:
(1)不是很确定某个函数的用法和功能时,除了使用help或demo外,更方便更直接的方法就是自己构造一些简单数据试用一下函数。
(2)为了提高程序运行效率,能使用矩阵方法处理的数据尽量用矩阵方法处理,毕竟矩阵处理是matlab的强项。
某些不能用矩阵处理,可设法构造出可以运算的矩阵。
(3)当使用矩阵运算时,直接看代码不是很容易理解,可把矩阵简单的写在草稿纸上,包括初始矩阵和矩阵的变换结果,然后借助草稿纸上直观的矩阵运算理解整个表达式的意义。
(4)设置断点。
设置断点最主要的目的就是查看中间变量的值,从中了解整个程序的运算过程。
(5)最主要也是最基本的就是对算法的正确理解,理解算法的原理和算法每一步的意义;当理解每一步的意义后,同样的目的可采用不同的方法进行处理。
(6)随着版本的不同,某一版本中可以调用的函数,在另一个版本中可能是非法的,这样就必须对其进行分析和转换。
(7)有时可以通过画图的帮助来感性的了解数据,这样处理的时候不会太盲目。
虽然完成这次作业用的时间很短,但对于我来说,每一天都有不同的收获,好奇而又充实。
这次作业的完成培养了我的动手能力,更令我的创造性思维得到扩展。
谢辞
在这次课程设计过程中,要感谢的人实在是太多了。
在这期间,我不仅接收了全新的学习方法,全新的思维方法,更明白了许多待人接物与为人处世的道理,这让我受益匪浅,对我以后的工作和人生道路有非常大的帮助。
同时,设计的顺利完成,也离不开其他各位老师以及同学的帮助,在设计编程过程中,各位老师和同学积极的帮助我查资料和提供一些思考方向,在他们的帮助下,设计得以不断的完善,最终帮助我完成了预期目标。
感谢所有带给我帮助的老师和同学,谢谢你们!
参考文献
[1].A.V.奥本海姆,R.W.谢弗.数字信号处理.董士嘉,杨耀增译.北京:
科学出版社,1992
[2].陈亚勇等.MATLAB信号处理详解.北京:
人民邮电出版社,2001
[3].程佩青.数字信号处理教程.第二版.北京:
清华大学出版社,1995
[4].飞思科技产品研发中心.MATLAB7辅助信号处理技术与应用.北京:
电子工业出版社,2005
[5].胡广书.数字信号处理——理论、算法与实现.第二版.北京:
清华大学出版社,2003
[6].皇甫堪,陈建文,楼强生.现代信号处理.北京:
电子工业出版社,1999
[7].黄文梅,熊桂林,杨勇.信号分析与处理——MATLAB语音及应用.长沙:
国防科技大学出版社,1998
[8].李素芝,万建伟.时域离散信号处理.长沙:
国防科技大学出版社,1994
[9].李勇,徐震.MATLAB辅助现代工程信号处理.西安:
西安电子科技大学出版社,2002
[10].刘福声,罗鹏飞.统计信号处理.长沙:
国防科技大学出版社,1999
[11].楼顺天,李博涵.基于MATLAB的系统分析与设计——信号处理.西安:
西安电子科技大学出版社,1998
[12](美)WatsonK,EspinosaD.BeginningVisualC#.杨浩译.北京:
清华大学出版社,2002
[13](美)ArdestaniK,HoffmanK,DonaldX.高效掌握ADO.NET:
C#编程篇.张哲峰译.北京:
清华大学出版社,2003
[14]A.PeledandBedeLiu.DigitalSignalProcessingTheory,DesignandInplementation.NewYork:
JohnWiley&Sons,Inc.,1976
[15]ProakisJG,ManolakisDG.IntrductionToDigitalSignalProcessing.NewYork:
MeGraw-HillBookCompeny,1988
[16]RabinerLRandGoldB.TheoryandApplicationofDigitalSignalProcessing.Pren-tice-HallInc.,1975