数字信号与处理 FIR滤波器设计
院 系 : 专业(班级): 姓 名: 学 号: 指导教师: 职 称:
机电工程学院 电子信息工程2班
2010408
副教授、助教
完成日期: 2013 年11 月 18 日
目 录
1 引 言......................................................... 1 2 滤波器的简介 ................................................... 2
2.1 数字滤波器的发展 ............................................ 2 2.2数字滤波器的实现方法......................................... 2 2.3数字滤波器的分类............................................. 2 3.1 设计方法 .................................................... 4 3.2有限冲击响应滤波原理......................................... 4 3.3 FIR滤波器的结构图........................................... 5 3.3 FIR数字滤波器阶数计算....................................... 5 3.3 在matlab中算出滤波系数 ..................................... 6 3.4 FIR数字滤波器设计方法....................................... 6 3.5 程序功能顺序图 .............................................. 8 4 调试的步骤及调试过程中出现的问题以及解决方法.................... 10
4.1 调试步骤 ................................................... 10 4.2调试结果.................................................... 12 4.3调试问题解决................................................ 13 5 结 论.......................................................... 15 6 设计心得体会.................................................... 16 附录A 程序 ........................................................ 18
FIR滤波器设计
1 引 言
数字滤波器是数字信号处理中最重要的组成部分之一,数字滤波器是由数字乘法器、加法器和延时单元组成的一种算法或装置,可作为应用系统对信号的前期处理。用DSP芯片实现的数字滤波器具有稳定性好、精确度高、灵活性强及不受外界影响等特性。因此基于DSP实现的数字滤波器广泛应用于语音图像处理、数字通信、频谱分析、模式识别、自动控制等领域,具有广阔的发展空间。
随着计算机和信息技术的飞速发展,数字信号处理已经成为高速实时处理的一项关键技术,广泛应用在语音识别、智能检测、工业控制等各个领域。数字滤波器是对数字信号实现滤波的线性时不变系统。数字滤波实质上是一种运算过程,实现对信号的运算处理。
DSP数字信号处理是一门涉及许多学科而又广泛应用于许多领域的新兴学科。20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。传感器数字信号处理是利用传感器对模拟信号或数字信号进行采集并把其转换成计算机可识别的电信号,并利用计算机对信号进行处理以达到计算机辅助控制或是计算机自动控制的目的。
DSP 芯片是一种特别适合数字信号处理运算的微处理器,主要用来实时、快速地实现各种数字信号处理算法。用DSP 芯片实现FIR数字滤波器,不仅具有精确度高、不受环境影响等优点,而且因DSP 芯片的可编程性,可方便地修改滤波器参数,从而改变滤波器的特性,设计十分灵活。
1
2 滤波器的简介
2.1 数字滤波器的发展
数字滤波是数字信号处理的一部分。数字信号处理主要是研究用数字或符号的序列来表示信号波形,并用数字的方式去处理这些序列,把它们改变成在某种意义上更为有希望的形式,以便估计信号的特征参量,或削弱信号中的多余分量和增强信号中的有用分量。具体来说,凡是用数字方式对信号进行滤波、变换、调制、解调、均衡、增强、压缩、估值、识别、产生等加工处理,都可纳入数字信号处理领域。数字信号处理学科的一项重大进展是关于数字滤波器设计方向 的研究。
科技发展的必然趋数字信号处理由于运算速度快,具有可编程特性和接口灵活的特点,使得它在许多电子产品的研制、开发和应用中,发挥着及其重要的作用。采用DSP芯片来实现数字信号处理系统是当前势。
在数字信号处理中,数字滤波器占及其重要的地位。数字滤波是语音和图像处理、模式识别、频谱分析等应用中的基本算法之一。在许多信号处理应用中用数字滤波器替代模拟滤波器具有许多优势。数字滤波器容易实现不同的幅度和相位频率特性指标,克服了与模拟滤波器性能相关的电压漂移、温度漂移和噪声等问题。用DSP芯片实现数字滤波器除了具有较好的稳定性、较高的精确度、不受外界环境影响外,还具有灵活性特点。在用可编程DSP实现数字滤波器可通过修改滤波器的参数十分方便的改变滤波器的相关特性。 2.2数字滤波器的实现方法
软件实现方法就是在通用的微型计算机上用软件来实现。利用计算机的存储器、运算器和控制器把滤波所要完成的运算编程程序通过计算机来执行,软件可由使用者自己编写,也可使用现成的。 2.3数字滤波器的分类
按照不同的分类方法,数字滤波器有许多种类,但总起来可以分成两大类:经典滤波器和现代滤波器。经典滤波器的特点是输入信号中有用的频率成分和希
2
望滤除的的频率成分各占有不同的频带,通过一个合适的的选频滤波器达到滤波的目的。例如,输入信号中含有干扰,如果信号和干扰的频带互不重叠,可滤除干扰得到纯信号。但是,如果信号和干扰的频带互相重叠,则经典滤波器不能有效滤除干扰,这时就需要采用现代滤波器,例如维纳滤波器,卡尔曼滤波器、自适应滤波器等最佳滤波器。现代滤波器是根据随机信号的一些统计特性,在某种最佳准则下,最大限度地抑制干扰,同时最大地恢复信号,从而达到最佳滤波的目的。
经典数字滤波器从滤波特性上分类,可以分成低通、高通、带通和带阻等滤波器。它们有些理想幅频特性,是不可能实现的因为他们的的单位响应均是非因果且是无限长的。我们只能按照某些准则去设计滤波器使之在误差容限内逼近理想滤波器,因此理想的滤波器可作为逼近的标准。
3
3 总体设计思路及功能描述(附框图)
3.1 设计方法
(1)进一步了解滤波器的原理,了解FIR滤波器的设计过程。 (2)了解CCS的使用方法,以及掌握基本编程语言。 (3)掌握CCS设计FIR滤波器。
(4)掌握CCS工程的建立,源文件的汇编、连接以及调试程序,并且观察其输入、输出波形。
3.2有限冲击响应滤波原理
数字滤波是将输入的信号序列,按规定的算法进行处理,从而得到所期望的输出序列。一个线性位移不变系统的输出序列y[n]与输入序列x[n]之间的关系,应满足常系数线性差分方程:
y(n)bx(ni)a(ni)iiyi0i1N1M (3-1)
式中,X(n)为输入序列;Y(n)为输出序列;a和b为滤波器系数;N为滤波器阶数。若所有的a均为0,则得到FIR滤波器的差分方程为
y(n)b(ni)ixi0N1 (3-2)
对这式进行Z变换,整理后可得FIR滤波器的传递函数为
N1Y(z)1Hz()bizX(z)i0 (3-3)
4
3.3 FIR滤波器的结构图
x(n) z1 x(n1) z1 x(nN1) z1 + y(n) bN2 b b 图3-1结构图
FIR滤波器的单位冲激响应h(n)是一个有限长序列。若h(n)为实数,且
()nh(N1n)()nh(N1n)满足偶对称或奇对称的条件,即h或h,则
FIR
滤波器具有线性相位特性。偶对称线性相位FIR滤波器的差分方程为
yn()bx[(ni)x(nN1i)]ii0N12 (3-4)
式中,N为偶数。 在数字滤波器中,FIR滤波器无反馈回路,是一种无条件系统;并且可以设计成具有线性相位特性。 3.3 FIR数字滤波器阶数计算
-过渡带宽度=阻带边缘频率-通带边缘频率=25-10=15kHz
-采样频率:
f1=通带边缘频率+(过渡带宽度)/2=10000+15000/2=12.5kHz Ω1=2πf1/fs=0.π -理想低通滤波器脉冲响应:
h1[n]=sin(nΩ1)/n/π=sin(0.πn)/n/π -根据要求,选择布莱克曼窗,窗函数长度为:
5
N=5.98fs/过渡带宽度=5.98*50/15=20 -选择 N=20,窗函数为:
w[n]=0.42+0.5cos(2πn/24)+0.8cos(4πn/24) -滤波器脉冲响应为:
h[n]=h1[n]w[n] |n|≤12 h[n]=0 |n|>12
根据上面计算,各式计算出h[n] ,然后将脉冲响应值移位为因果序列。 3.3 在matlab中算出滤波系数
如下:
B=fir1(19,(10+25)/50,blackman(20)) B =
Columns 1 through 13
-0.0000 -0.0001 -0.0014 0.0055 -0.0060 -0.0123 0.0509 -0.0677 -0.0300 0.5609 0.5609 -0.0300 -0.0677
Columns 14 through 20
0.0509 -0.0123 -0.0060 0.0055 -0.0014 -0.0001 -0.0000
-完成的滤波器的差分方程为:
y[n]=-0.00x[n-2]-0.00x[n-3]-0.001x[n-4]+0.001x[n-5]-0.006x[n-6]-0.01x[n-7]+0.05x[n-8]-0.07x[n-9]-0.56x[n-10]+0.56x[n-11]-0.03x[n-1
2]-0.07x[n-13+0.05x[n-14]-0.01x[n-15]-0.006x[n-16]+0.006x[n-17]-0.001x[n-18]-0.00x[n-19]
3.4 FIR数字滤波器设计方法
由:窗函数法、频率抽样法。窗函数法分为固定窗和可变窗。
窗函数法
窗函数法的设计思想是按照所要求的理想滤波器频率响应错误!未找到引用源。,设计一个FIR滤波器,使之频率响应错误!未找到引用源。来逼近错误!未找到引用源。。先由错误!未找到引用源。的傅里叶反变换导出理想
6
滤波器的冲激响应序列 错误!未找到引用源。,即:
(3-5)
由于错误!未找到引用源。是矩形频率特性,所以错误!未找到引用源。是一无限长的序列,且是非因果的,而要计的FIR滤波器的冲激响应序列是有限长的,所以要用有限长的序列h(n)来逼近无限长的序列错误!未找到引用源。,最有效的方法是截断错误!未找到引用源。,或者说用一个有限长度的窗口函数w(n)序列来截取错误!未找到引用源。,即: 错误!未找到引用源。。 布莱克曼窗
(3-6)
增加一个二次谐波余弦分量,可进一步降低旁瓣,但主瓣宽度进一步增加,增加N可减少过渡带。 频谱的幅度函数为:
+0.04 (3-7)
7
3.5 程序功能顺序图
开始 初始化工作变量 调用波形发生子程序产生混叠的波形(高频+低频) 调用fir滤波子程序计算当前输出
Fir滤波 用滤波器系数乘以保存的N-1个输入值和当前输入值并求和 返回计算结果
8
波形发生 计算步长 用标准C的sin函数和cos函数计算当前波形值 返回波形值
图3-2流程图
9
4 调试的步骤及调试过程中出现的问题以及解决方法
4.1 调试步骤
1.连接实验箱
2.设置Code Composer Studio 2.21 在硬件仿真(Emulator)方式下运行: ---设置CCS 通过ICETEK-5100USB 仿真器连接ICETEK-VC5416-AR 硬件环境进行软件调试和开发 单击桌面上图标: (1)进入CCS 设置窗口。
(2)在出现的窗口如下图先点击Clear,选择“是”;
之后选择VC5416Emulator配置,单击 “ import”输入配置,最后按下Close;
图4-1CCS Clear设置窗口 图4-2import设置图
(3)在出现的窗口按标号顺序进行如下设置:
图4-3Graph输入设置
10
(4)在出现的窗口按标号顺序进行如下设置:
图4-4Graph输出设置
以上设置完成后,CCS 已经被设置成Emulator 的方式(用仿真器连接硬件板卡的方式),并
且指定通过ICETEK-5100USB 仿真器连接ICETEK-VC5416-AR 评估板。 3.启动Code Composer Studio 2.21: (1)启动Simulator 方式
双击桌面上图标
(2)启动Emulator 方式
首先将实验箱电源关闭。连接实验箱的外接电源线。
检查ICETEK-5100USB 仿真器的黑色JTAG 插头是否正确连接到ICETEK-VC5416-AR板的J3 插头上。注:仿真器的插头中有一个孔加入了封针,与J3 插头上的缺针位置应重合,保证不会插错。 4、新建一个工程文件
(1)选择菜单“Project”的“New…”项
11
图4-5Project新建 按编号顺序操作建立20084082047pjt 工程文件: (2)在工程文件中添加程序文件:
选择菜单“Project”的“Add Files to Project…”项;在“Add Files to Project”对话框中选
择文件目录为C:\\ICETEK-VC5416-EDULab\\Lab0402- LedArray\\LedArray.pjt,改变文件类型为“C Source Files(*.c;*.ccc)”,选择显示出来的文件“fir.c”;重复上述各步骤,添加fir.cmd文件到20084082047工程中;添加C:\i\\C5400\\cgtools\\lib\\rts.lib。 5、打开工程文件:
将系数放入fHn数组中:-0.00, -0.000,-0.001 ,0.006,-0.006, -0.012,0.051, -0.068,-0.03, 0.56, 0.56, -0.03, -0.068,0.05,-0.012,-0.006, 0.0056, -0.001, -0.00, -0.00
6、编译、下载程序。
选择菜单“Project”的“Rebuild All”项,或单击工具条中的
按钮;注意编
译过程中CCS 主窗口下部的“Build”提示窗中显示编译信息,最后将给出错误和警告的统计数。 4.2调试结果
12
图4-6波形发生程序的结果 图4-7低通滤波后的结果
8、结束程序运行,退出CCS。 4.3调试问题解决
检查是否已经用电源连接线连接了ICETEK-VC5416-AR 板上的POW1 插座和实验箱底板上+5V 电源插座。
检查其他连线是否符合实验要求。检查实验箱上三个拨动开关位置是否符合实验要求。
打开实验箱上电源开关(位于实验箱底板左上角),注意开关边上红色指示灯点亮。
ICETEK-VC5416-AR 板上指示灯D5 和D6 点亮。如果打开了ICETEK-CTR 的电源开关,ICETEK-CTR 板上指示灯L1、L2 和L3 点亮。如果打开了信号源电源开关,相应开关边的指示灯点亮。
用实验箱附带的USB 信号线连接ICETEK-5100USB 仿真器和PC 机后面的USB 插座,注意ICETEK-5100USB 仿真器上指示灯Power 和Run 灯点亮。 双击桌面上仿真器初始化图标:
13
如果出现下面提示窗口,表示初始化成功,按一下空格键进入下一步操作。 如果出现下面提示窗口,表示初始化成功,按一下空格键进入下一步操作。
图4-7软件初始化
如果窗口中没有出现“按任意键继续…”,请关闭窗口,关闭实验箱电源,再将USB电缆从仿真器上拔出,返回第(2)步重试。如果窗口中出现“The adapter returned an error.”,并提示“按任意键继续…”,表示初始化失败,始化失败,请关闭窗口重试两三次,如果仍然不能初始化则关闭实验箱电源,再将USB电缆从仿真器上拔出,返回第(2)步重试。 双击桌面上图标:启动CCS2.21。
如果进入CCS 提示错误,先选“Abort”,然后用“初始化ICETEK-5100USB2.0 仿真器”初始化仿真器,如提示出错,可多做几次。如仍然出错,拔掉仿真器上USB接头(白色方形),按一下ICETEK-VC5416-AR 板上S1 复位按钮,连接USB 接头,再做“初始化ICETEK-5100 USB2.0 仿真器”。
如果遇到反复不能连接或复位仿真器、进入CCS 报错,请打开Windows 的“任务管理器”,在“进程”卡片上的“映像名称”栏中查找是否有“cc_app.exe”,将它结束再试。
14
5 结 论
本文首先介绍了数字滤波器的概念及分类,以及数字滤波器的实现方法。在理解FIR滤波器的工作原理及其设计方法的基础上,在MATLAB环境下利用矩形窗设计实现FIR滤波器。然后通过DSP结合CCS2.0软件进行编程,最终实现了基于DSP的FIR数字低通滤波器的设计。仿真结果表明,基于DSP实现的滤波器具有稳定性好、精确度高、灵活性强等优点,并能实现对信号的实时滤波。
经过20多年的发展,DSP产品的应用已扩大到人们的学习、工作和生活的各个方面,并逐渐成为电子产品更新换代的决定因素。目前DSP正处于高速发展时期,它的技术可以说是日新月异,它的应用领域也随之扩展。相信DSP技术发展和应用将会对社会的发展以及我们的工作生活产生更大的影响,前景十分可观。
15
6 设计心得体会
课程设计是培养我们综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,数字技术已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。
通过这次课程设计,我了解了fir低通滤波器的基本原理及设计方法,对dsp课程的了解更加深入,此外,也知道了团队合作的重要性,虽然是一个人一组,但是各组之间相互讨论更加深了大家对此课程的认识。这个课程设计让我明白了,付出是有收获的。本次的课程设计,让我明白了细节决定成败这句话的道理,在实验中,有很多注意的地方,都被我忽视了,导致我再花费时间去修改,这严重影响了我试验的进度。同时,在实验中我了解了FIR滤波器的原理,熟练掌握了MATLAB的操作,不仅是我学到了知识,更锻炼了我的动手能力。也进一步认识了CCS软件的使用,了解了各种窗函数对滤波器特性的影响。
这一学期的理论知识学习加上这次课程设计,我对DSP这门学科有了更为深刻的了解,对数字信号的处理功能,硬软件相结合,语音的压缩、去噪和编码等等方面都有了很深的了解。相信本次课程设计,无论是对我以后的学习,还是工作等方面都有一个很大的帮助。因此,本次课程设计我受益匪浅。
经过几天的奋斗终于做出来了,当时心情非常的激动,这些让我很有成就感,总之这次课程设计让我充实自己,也让我发现了很多问题和不足,对以前所学的知识理解的不够深刻,对知识点掌握的不够牢靠等,我以后会好好注意这方面。
16
参 考 文 献
[1] 戴逸民,梁晓雯,裴小平.基于DSP的现代电子系统设计[M].北京:电子工业出版社,2002:117-124.
[2] 高西全,丁玉美.数字信号处理(第三版)[M].西安电子科技大学出版社,2008:58-62.
[3] 周丽清,苏菲.数字信号处理基础[M].北京:北京邮电大学出版社,2005:158-170.
[4] 支长义,程志平.DSP原理及开发应用[M].北京:航空航天大学出版社,2006:77-81.
[5] 陈后金.数字信号处理[M].北京:高等教育出版社,2004:67-69.
[6] Vinay K.Ingle.Digital Signal Process Using Matlab[M].Nelson Engineering;International ed of 2nd revis ed,2006:245-251.
[7] 李勇,徐震.MATLAB辅助现代工程数字信号处理[M].西安西安电子科技大学出版社,2002:22-30.
[8] 邹彦.DSP 原理及应用[J].北京:电子学报,2005:605-621. [9] 阎石.数字电子技术基础[M].高等教育出版社,2003:201-211.
17
附录A程序
程序源文件。
#include float InputWave(); float FIR(); float fHn[FIRNUMBER]={ -0.00, -0.000,-0.001 ,0.006,-0.006, -0.012,0.051, -0.068,-0.03, 0.56, 0.56, -0.03, -0.068,0.05,-0.012,-0.006, 0.0056, -0.001, -0.00, -0.00 }; float fXn[FIRNUMBER]={ 0.0 }; float fInput,fOutput; float fSignal1,fSignal2; float fStepSignal1,fStepSignal2; float f2PI; int i; float fIn[256],fOut[256]; int nIn,nOut; main() { nIn=0; nOut=0; f2PI=2*PI; fSignal1=0.0; fSignal2=PI*0.1; fStepSignal1=2*PI/30; fStepSignal2=2*PI*1.4; while ( 1 ) { fInput=InputWave(); fIn[nIn]=fInput; nIn++; nIn%=256; fOutput=FIR(); fOut[nOut]=fOutput; nOut++; /* break point */ if ( nOut>=256 ) 18 { nOut=0; } } } float InputWave() { for ( i=FIRNUMBER-1;i>0;i-- ) fXn[i]=fXn[i-1]; fXn[0]=sin((double)fSignal1)+cos((double)fSignal2)/6.0; fSignal1+=fStepSignal1; if ( fSignal1>=f2PI ) fSignal1-=f2PI; fSignal2+=fStepSignal2; if ( fSignal2>=f2PI ) fSignal2-=f2PI; return(fXn[0]); } float FIR() { float fSum; fSum=0; for ( i=0;i return(fSum); } 19
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务