版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
FIR滤波器的DSP实现小组成员:一、实验目的:巩固数字FIR滤波器的概念理解定点DSP中数的定标、有限字长、溢出等概念理解算法实现中实时的概念掌握DSP开发过程以及基本调试方法理解汇编以及高级语言开发DSP、实现算法的区别二、实验仪器:计算机,C2000DSP实验箱,仿真器,示波器,信号源三、实验步骤:系数设计,利用MATLAB设计滤波器系数并定标,分别做出幅频、相频曲线,看是否满足设计要求。设备检查启动集成开发环境建立工程加载程序算法功能验证算法实时性验证连接外部电路,打开信号源,产生一个合适的频率的正弦信号,幅度控制在0.5v以内,并通过INPUT1就如到DSP中。打开示波器,将OUT3口接在示波器上,全速运行程序,调节信号源频率,记录各频点示波器上输出幅度。描点作图,与理论幅频特性比较,看是否满足要求。四、实验过程:1、DSP实现流程:读取AD结果DSP初始化退出中断等待数据写DAC复位ADC保存读取AD结果DSP初始化退出中断等待数据写DAC复位ADC保存AD结果FIR计算EVA设置ADC设置中断设置开始2、算法实现流程:五、实验要求:独立完成项目编译调试全过程。完成FIR滤波器系数的定点设计并仿真。在数据采集程序的基础上,添加FIR模块,实现算法。调试程序,实现FIR功能,利用硬件验证。改变输入正弦信号频率,记录对应的幅度,描点作图,与理论幅频曲线比较。数码管轮流显示实验者的学号。验证系统的实时性。观察各种信号通过数字滤波器之后的波形,解释信号失真原因。加载其他格式编写程序所产生的FIR滤波器程序,测量运算时间,比较分析c语言效率低的原因。以该FIR滤波器系统为例,总结分析系统实时性的取决因素。六、数据、波形记录与分析:用MATLAB生成N=40,Wn=0.2的高通滤波器的系数,并用Q15定标,数据如下:0,27,56,75,64,0,-118,-252,-329,-260,0,417,846,1061,828,0,-1398,-3142,-4850,-6098,26224,-6098,-4850,-3142,-1398,0,828,1061,846,417,0,-260,-329,-252,-118,0,64,75,56,27,0定标前后的幅频、相频特性分别如图4-1和4-2图4-1图4-2图4-1图4-2二者除了在增益上有所差别外,波形几乎一致,说明定标后的系数满足要求。2、在程序中实现FIR滤波器功能,其中核心代码如下:#defineN40#defineN40unsignedintx[N+1];inth[N+1]={0,27,56,75,64,0,-118,-252,-329,-260,0,417,846,1061,828,0,-1398,-3142,-4850,-6098,26224,-6098,-4850,-3142,-1398,0,828,1061,846,417,0,-260,-329,-252,-118,0,64,75,56,27,0};interruptvoidadc_isr(void){longinty=0; longinttemp; inta; intb;//*DAOUT=0x5000;for(j=0;j<=N;j++)x[j]=x[j+1];x[N]=((AdcRegs.ADCRESULT0))>>4;for(k=0;k<=40;k++){ a=h[k]; b=(x[N-k]); temp=(b*a); y=y+temp;} *DAOUT=((y>>10)+0x8000);……//*DAOUT=0xffff;}分析:①、代码中定义了两个数组,其中X[]用来存储AD采集的数据,是无符号数,h[]用来存储滤波器系数,为有符号数。二者的长度都是N+1(N为滤波器阶数)。②、第一个for循环用来实现数据重排功能,实现最近采集的数据放入数组的末尾,之前采集的数据依次向前移动一个位置。其中之所以把AD寄存器中的采样值右移四位在存入数组时因为ADC的精度是12bit,而且是高12bit有效(在实验三中已通过查看寄存器验证)故把其有效位向后移四位方便后面计算。(具体数制问题后文会单独分析)③、第二个for循环则用来实现FIR滤波器的算法:y=∑x*h将y的结果赋值给输出的时候,要根据y的动态范围对y进行适当右移。因为DAOUT接受的是一个16bit数据,而y是longint型,即32bit,直接赋值势必会溢出。检验y的动态范围有多种方法,其中比较简便的方法是将y添加到变量观察窗口,在赋值语句后设置断点,动态运行,观察y的动态范围,即估计y最大最小值的位数,目标是保留有效数值的高16位,于是便能确定最后赋值给输出口前y需要右移的位数。④、开头和末尾两条屏蔽的语句用于实时性验证。(原理在实验三中已经阐述)⑤、上面程序为了便于调试,定义了一些中间变量,可以进一步优化代码。调试程序,验证滤波器功能:系统参数:高通FIR滤波器,wn=0.2系统采样频率为12kHz,则截止频率fn=1.2kHz验证波形如下:图4-3图4-3f=900Hzw=0.15幅度:0.8格图4-4图4-4f=1000Hzw=0.167幅度:1.2格图4-5图4-5f=1200Hzw=0.2幅度:3.4格图4-6图4-6f=1400Hzw=0.233幅度:6.0格图47图47f=1500Hzw=0.25幅度:6.5格图4-8图4-8f=2000Hzw=0.333幅度:6.8格图4-9f=2500Hz图4-9f=2500Hzw=0.417幅度:6.8格描点作图验证滤波器性能:图4-10分析:①从图4-10看出,低频信号经过滤波器幅度衰减,而高频信号幅度不变,实现了高通滤波的功能。截止频率w=0.2处的信号幅度为通带波形幅度的一半,即-6dB,符合设计要求。②另外,可以从波形图中估算该FIR滤波器的过渡带长度约为800Hz—1600Hz,即w∈(0.13,0.25)从图4-1可以读出理论过渡带为W∈(0.12,0.26),实际过渡带比理论值略大。可能是数字处理过程中的有限字长效应和AD量化误差造成的。③截止频率点的波形幅度并不是输入信号幅度的一半。这是由于AD在采样时把[-1.5v,1.5v]的信号转换成[0,3v]的信号,而DA输出时又将信号转换为[-2v,2v],故输入输出信号之前虽然存在某种关系,但幅值已不相同,自然在截止频率点输出波形幅度不是输入波形幅度的一半。此时应该以通带波形的幅度作为参考幅度,而截止频率点的波形幅度应该等于通带幅度的一半,验证正确。④当输入信号频率大于2500Hz输出波形幅度虽然不变,但已经看不出是正弦波形了,这是由于采样频率只有12kHz,而输入波形假设是3kHz,那么平均一个采样周期才采样4个点,凭借4个采样点很难准确地表示出正弦波形。实时性验证:图4-1图4-11采样频率fs=12kHz采样周期:83.3us指令执行时间:20us满足实时性要求图4-1图4-12采样频率fs=24kHz采样周期:41.7us指令执行时间:20us满足实时性要求分析:实时实时取决因素运算量数据率算法复杂度芯片速度如上图,按照软硬件来分,可以分为运算量和芯片速度两个方面。而运算量又可以分为数据率和算法复杂程度。实时性的要求就是指在下一个数据到达前,前一个数据的处理必须已经完成。实验中改变采样频率就是改变数据率,可见数据率越高(即采样频率越高)实时性越难满足。通过改变滤波器的阶数N,比较代码执行时间可以看出,N越大(即算法越复杂),实时性越难满足。而通过c语言和汇编语言实现相同算法所需时间的比较也可以看出,算法或者代码的复杂程度对实时性也有很大影响。C语言代码的执行效率比汇编语言低,从反汇编窗口即可以看出一条c语言可能对应很多句汇编指令,从而占用的存储空间也相对较多。而且c语言对于运算的数制类型定义并不明确,不像汇编,无符号数乘法和有符号数乘法是不同的指令。可见熟练掌握汇编语言对dsp的开发有很大的好处。5、实验中遇到的问题:相比于前三个实验的一帆风顺来说,实验四可谓一波三折,在第一次实验时已验证程序代码功能正确的情况下,始终调试不出符合要求的波形,经历了4次实验的调试,最后总算在老师的协助下实现了功能(惭愧,12学时的实验做了近18个学时才完成…)以下记录实验过程中从迷茫到解决问题的探索过程。①首先通过降低阶数以及自定义特殊输入和系数等方法调试验证代码实现数据重排和结果乘加的功能。验证无误后,计算滤波器系数(刚开始选择的是N=50,Wn=0.5,高通),接信号发生器产生一个同代频率的正弦波并连接示波器,输出波形杂乱无章。②首先怀疑是y发生了溢出,于是通过修改h的定标大小以及通过观察y的动态范围进行适当移位,依然得不到预期波形。(输入信号幅度太大也可能造成溢出)③于是反思是否是滤波器参数的选择有问题,因为wn=0.5,也就是说截止频率点一个采样周期只能采样4个点,而我们设计的又是高通滤波器,只有大于截至频率的信号才能通过,那么通带信号的周期内采样点会更少,一个周期内只有不到4个采样点,自然没法正确显示波形。同时,考虑到N=50比较大,可能不满足实时性要求,于是将参数改成N=40,Wn=0.2。改动后波形没有明显改善。测得实时性满足要求,也就是说问题出在程序的计算过程中。④通过图4-2可以看出MATLAB给出的设计是线性相位型的FIR滤波器,根据数字信号处理的理论知识,设计线性相位型FIR滤波器,滤波器系数可以是奇对称或者偶对称,观察matlab算出的系数,是偶对称,而用偶对称的系数设计高通滤波器,滤波器阶数必须为奇数(四种线性相位型FIR滤波器的特点如图4-12,4-13),而我们取的N=40,是偶数,似乎不满足要求。后来发现其实这里N虽然是40,但系数是41个,为奇数,只是对阶数的定义不一样。问题不在此处。图4-13图4-13h(n)为偶函数图4-14h(n)为奇函数⑤接下来对数字运算的程序段进行调试,打开变量x,h以及y的观察窗口进行单步调试,发现问题在于x*h在y中得不到正确的结果。(当时y定义的是longint型,x为unsignedint型,h为int型)例如令x=5,h=-1,结果y=0x0004fffb(理论上应该等于0xfffffffb),而把y调整成int型,结果就正确了(这就说明当y的类型和x,h一致时,可以将有符号数h与无符号数x的乘积赋给y,系统自动转换为两个有符号数的乘法。但若y的类型和x,h不同,系统就不支持把有符号数*无符号数的结果存储在y里,结果会出错。所以,如果要给long型的y赋值,必须先把无符号数x强制转换成有符号数(这里之所以把x强制转换后不会出错时由于x是AD的采样数据,只有高12bit有效,而在之前的程序中已经将x右移了四位,高位补零,所以转换成有符号数之后不存在负数的可能。倘若之前没有对x进行移位,直接强制转换后运算就不对了,因为若原x的最高为1,转换后成了负数,幅值必然改变。)将x强制转换成有符号数后再运行终于在示波器上观察到了久违的正弦波形。(另外,如果该ADC不是12bit而是16bit精度的话,若仍使用unsignedint型定义采样数据x将无法实现算法,因为一个无符号数*有符号数在编译的时候是默认为有符号数乘法,例如有符号数h=-1,无符号数x=0xffff,x*h得到的结果是1,而我们希望得到的是-32767)⑥虽然正弦波显示了出来,但是验证滤波器特性时发现过渡带非常宽,和理论不符,那么问题只可能出在滤波器的系数上。于是重新导入滤波器系数,再次验证得到正确的结果。七、实验总结:回顾四次实验,得益于预习充分,前三个实验较为轻松地完成了任务,最后一个由于纠缠于数制类型上的种种问题,一波三折,不过最终也还是按照设计要求实现了高通滤波器的功能。从基础实验到任意信号发生器到数据采集再到最后的FIR滤波器的实现,由浅入深地让我们体验了一个数字信号处理系统从软件到硬件的实现过程,收获颇丰,主要总结如下:1、大到对DSP系统的总体开发过程(写出任务说明确定技术指标选择软硬件确定芯片软硬件说明软件编程、硬件布局软硬件调试系统集成系统测试)和调试流程(功能验证实时性验证性能验证)有了初步的了解。小到对FIR滤波器设计流程有了一定的认识(先给定要求的理想滤波器频响是,然后设计一个FIR滤波器,用其频响去逼近。实现方法是先用IDTFT求出理想滤波器的,因为一般是非因果的,且无限长,物理上无法实现。所以通过加窗来截取长度为N的有限长序列。这个就是用MATLAB计算出来的系数)。最后到对FIR滤波器具体实现过程过程(见实验过程部分)有了深刻的体会。2、掌握了TMS320F2812DSP芯片、片内外设等硬件的工作原理、内部构造和使用方法(主要是memorymap、内部中断、ADC、DAC、LED)。熟悉了软件CCS,掌握了DSP的基本调试方法。3、较为深刻地理解了定点DSP中数的定标、有限字长和溢出等概念(这也是实验四的症结所在)。4、对DSP系统实时性的定义和要求有了深刻的认识。5、巩固了数字信号处理的理论知识,尤其是FIR滤波器部分。如线性相位型FIR滤波器的系数特点,阶数N对过渡带和幅度特性波动的影响等。6、对matlab的一些基本操作指令有了初步的了解。大学三年,做过那么多实验,不敢说本实验是最有意义的,但一定最合理的,也是我做得最认真的。原因有二。其一,数字信号处理有其独特的魅力,一台计算机,一块芯片,若干外设就能实现多种多样的功能,对输入信号进行无穷的变换,有很广的应用价值(如第一次课上视频中展示的人物识别、读心术和汽车电子都是通过很普通的硬件实现了神奇的功能。)其二是就本实验来说并不困难,原理不涉及高深的理论,算法尤为简单,硬件也并不复杂,上手很快,可以说整个实验的难度是在我们的能力所及的范围内,也就是让实验者能够看到成功的曙光,自然在实验过程中有动力可言。对比之下,这里就不得不吐槽一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论