dsp课程设计要点_第1页
dsp课程设计要点_第2页
dsp课程设计要点_第3页
dsp课程设计要点_第4页
dsp课程设计要点_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于dsp的fir滤波器程序设计班级:2012级通信工程(2)班 姓名:吕成龙 学号:201202405201【摘要】:21世纪是数字化的时代,随着信息处理技术的飞速发展,dsp(数字 信号处理器)技术逐渐发展成为一门主流技术,它在电子信息、通信、自动控制、 信息家电等高科技领域得到了越来越广泛的应用。本课题主要应用dsp®成开发 环境一ccs调试汇编程序,用tms320c540来实现了 fir数字滤波。具体工作包 括:对fir数字滤波器的基本理论进行了分析和探讨;采用matla歆件来学习数 字滤波器的基本知识,计算数字滤波器的系数,研究算法的可行性,对fir低通数 字滤波器进行前期

2、的设计和仿真;系统介绍了 ti公司tms320c54濠列数字信号 处理器的硬件结构、性能特点和 dsp的集成开发环境ccs应用dsp#成开发环 境一ccss试汇编程序,用tms320c540来实现了 fir数字滤波。【关键词】:频率抽样;fir滤波器;tms320c5402; ccs仿真1设计任务和目的1.1 设计题目基于dsp的fir滤波器程序设计1.2 设计目的1)掌握dsp®程的过程和指令的使用;2)熟悉运用ccs1成开发环境进行仿真和tms320c540妁基本功能和使用 方法;3)熟悉fir滤波器的实现方法和设计过程。2设计思路ds呢一种实时、快速、特别适合于实现各种数字信号

3、处理运算的微处理器。 由于它由具有丰富的硬件资源、改进的哈佛结构、高速数据处理能力和强大的指 令系统。数字滤波器的设计可分为5个独立的阶段:滤波器技术规范、系数计算、实 现结构、误差分析和滤波器实现。滤波器技术规范与应用有关,且应该包括振幅 和相位特性的规范。系数计算本质上就是求出满足所期望的规范的 h(n)值。计算fir滤波器系 数最常用的方法有三种:窗口方法,频率抽样方法,最佳方法。窗口方法是最容 易的,但是缺乏灵活性,特别是当通带波纹和阻带波纹不同时更是如此。频率抽样方法非常适合fir滤波器的递归实现,频率抽样法也适合那些除了要求标准频 率选择性滤波器(低通、高通、带通和带阻)之外的滤波

4、器。最佳方法是最高效 和灵活的一种设计方法。三中最常用的fir滤波器结构是横向结构、频率抽样结 构和快速卷积结构。横向结构包含一个使用滤波器系数的直接卷积; 频率抽样结 构直接同系数计算的频率抽样方法相联系。 结构的选择与具体的应用有关。此处 选择横向结构。长字长的或者高阻带衰减的fir滤波器的性能可能会受到有限字长的影响。 例如,系数量化后他们的频率响应可能会发生变化。因而应当对这些滤波器的特 性进行检查以确保允许的合适的字长。在完成好前四步后,通常要考虑实现问题,以及考虑软件编程或选择结构 的硬件实现,而我们主要考虑软件的实现过程。163 fir滤波器设计步骤流程图图3-1 fir滤波器设

5、计步骤流程图4软件流程图图4-1 qgf.asm 程序流程5设计部分5.1 硬件的整体设计和规划cputej¥ ti公司的16位定点dsp具体型号为tms320c540是为实现低功 耗、高性能而专门设计的定点 dsp5片,其主要应用时无限通信系统等。tms320c5x勺主要特点包括:运算速度快,内部有一个算术逻辑单元,2个累加器、2个加法器、1个乘法器、1个桶形移位器、4条内部总线和2个地址产 生器。内部还集成了维特比加速器,用于提高维特比编译码的速度。它是低功耗 方式,可以在3.3v或2.7v电压下工作,3个低功耗方式可以节省 dsp的功耗, tms320c54021别适合于无线移

6、动设备。5.2 fir滤波器的特点数字滤波器是由一系列滤波器系数定义的方程。这些方程构成数字滤波程序 部分,滤波程序接收原始数据,并且输出滤波后的数据。这种程序的最大优点在 于滤波器的再设计不需要硬件方面的更改,只要简单地改变滤波器的系数表即可 完成滤波器特性的修改。数字滤波程序可在任何处理器上实现,但最有效的是在 专门设计用来进行高速滤波或其他 dsp处理的硬件上实现。dsp硬件可使非常复 杂的任务在极短的时间内完成,因此它经常作为大计算量的系统核心。dspm的有较大灵活性,可以进行编程或再编程来执行许多功能而不需要修改硬件,这或许是dsp系统最主要的特征,同时拥有优良的性能, dsfw以执

7、行 许多模拟系统不可能完成的性能,例如可以实现线性相位响应,复杂的自适应滤 波算法可以利用ds限术来实现。5.3 fir滤波器的结构选择首先对其结构进行选择,结构的选择取决于多种因素和折中考虑,其中包含 实现的容易程度,也就是软件和硬件的复杂度,求冲击响应或传递函数系数的难 易程度,以及它们对系数量化的相对敏感度。在实际中,系数描述的精度受限于 所用处理器的字长。使用有限的位数来表示描述每个系数趋向于将零从期望的位 置移出,这会导致频率响应上的偏差。响应中偏差的大小取决于位数和所用的结 构。横向结构非常易于编程,且可由大多数dsp5片有效的实现,因为这些芯片 有针对横向fir滤波器的指令。直接

8、构造是实现非递归滤波器的最常用方法,它 的最主要的优点是其简单性,要求的器件最少,且数据的存储不复杂。串联结构 对系统误差和量化噪声不敏感,但是系数值需要做更大的努力才能求出,且程序 设计不适合dsp芯片的结构。快速卷积结构能提供出比他方法更好的计算优势, 但需要有效的fft。对于窄带频率选择滤波器来说,频率抽样结构比等价的横向结构计算更有 效,在此滤波器中,仅有相对少量的频率抽样值不为零, 因此每输出一个值仅需 非常少的乘法。然而,频率抽样结构可能要求更为复杂的编程,因为在其差分方 程中固有的对数据的复杂索引。为了避免稳定问题,频率抽样结构的零点和极点 应该位于单位圆稍内一点。当要求fir滤

9、波器递归实现时,这种结构是一种自然 的选择。这种结构易于模块化,并有利于并行处理。总之,除非规范要求采用频 率抽样结构,或者需要计算数据的谱采用快速卷积, 那么采用横向结构不失为一 个好的选择。采用横向结构,对于这种结构,滤波器的输入x(n)与输出y(n)之间的关系如 下:下面两个公式刻画出基本的fir滤波器n 1y(n) = h h(i)x(n - i)i =0对式(4-1)进行z变换,整理后可以得到fir滤波器的传递函数为:h(z)=xzh:h(i)”(5-1)(5-2)图5-1所示是fir滤波器的一般结构。图5-1 fir滤波器结构图 1.式中h(i)(i=0,1,n-1),是滤波器的冲

10、击响应系数。符号z代表一个抽样延迟或单位时间延迟。对于横向结构,每一个输出抽样值y(n)的计算要求:n-1个存储位置来保存n-1个输入抽样值;n个存储位置来保存n个系数;n个 乘法器;n-1个加法器。h(z)是滤波器的传递函数,n是滤波器长度,即滤波器 系数的数目。式(5-1)是fir时域差分方程,它使用非递归形式描述了fir滤波器:当前输出信号y(n)只是过去和当前的输入值 x(n)的函数。那么做x(n-1)至u x(n-n) 的加权和。当fir滤波器利用这种形式实现时,即直接根据 (5-1)式进行计算, 那么滤波器总是稳定的。式(5-2)是滤波器的传递函数,它提供了分析滤波器的一种方法,例

11、如评估 频率响应。fir滤波算法实际上是一种乘法累加运算。它不断输入样本,经延时 z",作乘法累加,再输出滤波结果y(n)。系统的单位冲激响应h(n)在有限个n 值处不为零;系统函数h(z)在|z|>0处收敛,在|z|>0处只有零点,有限z平 面只有零点,而全部极点都在 z=0处结构主要是非递归结构,fir滤波器最主要的特点是没有反馈回路,因此它 是无条件稳定系统。它的单位脉冲响应h(n)是一个有限长序列,脉冲响应顾名思义,滤波器的脉冲响应就是滤波器对脉冲输入的响应;换句话讲,当滤波器的 输入为单位脉冲时,滤波器的输出就是单位脉冲响应。脉冲响应反映了滤波器的 基本特性,由

12、于所有的数字信号可以由脉冲函数构成,所以脉冲响应可用来求各种输入时的输出。如果h(n)是实数,且满足偶对称或奇对称的条件,即h(n)=h(n-1-n)或h(n尸-h(n-1-n),则滤波器具有线性相位特性的充要条件。对 于非递归fir滤波器,系数的存储空间和算术运算次数几乎减少了2倍,对于递归滤波器系数转变为简单整数,提高了处理速度。在线性相位滤波器中,所有频 率分量通过滤波器时会遇到同样大小的延迟,即没有相位失真。5.4 fir滤波器的延迟用线性缓冲区法实现在这里用线性缓冲区法实现za ,它的优点是新老数据在存储器中存放的 位置直接明了,算法便于理解,以幅度特性随意设计的同时,保证精确、严格

13、的 线性相位,由于fir滤波器的单位脉冲响应h(n)是有限长序列,因此fir滤波 器没有不稳定问题,fir滤波器一般为非递归结构,因此在有限精度运算下,不 会出现递归型结构中的极限震荡等不稳定现象,误差较小,可以用fft实现过滤信号,可大大提高运算效率。其特点是:对于 n级白fir滤波器,在数据存储区 中开辟一个称之为滑窗的n个单元的缓冲区,存放最新的n个输入样本。 从最 老的样本开始,每读一个样本后,将此样本向下移位。读完最后一个样本后,输 入最新样本至缓冲区的顶部。以上过程,可以用n=6的线性缓冲区存储器图来说明,如图5-2所示。图中 线性缓冲区顶部是存储器的低地址单元,底部为高地址单元。

14、参看图 5-2(a),当5第一次执行"a 一二"时,由arx指向线性缓冲区的底部,并 开始取数、运算。每次乘法累加运算之后,还要将该数据向下 (高地址)移位。求 得y(n)以后,从i/o 口输入一个新数据x(n+1)全线性缓冲区的顶部单元,再将 arx指向底部单元,开始第二次执行y(n+1) = £ h(i)x(n-i),如图5-2(b)所 i zz0 示。之后,再计算y(n+2)依次循环下去。数据存储 器数据存储 器数据存储 器线性缓冲区顶 部x(n)portrfx(n+1 )portrftx(n+2_)x(n-1 )x(n)x(n+1)x(n-2 )x(n-1

15、 )x(n)x(n-3 )x(n-2 )x(n-11x(n-4)ax(n-3 )x(n-2_)*arx-x(n-5 )*arx-x(n-4)*arx-x(n-3 _)_(a)(b)(c)图5-2 n=6的线性缓冲区存储器图5.5 误差问题因为在用定点dsp实现时,所有 的数据都是定长的,运算 也都是定 点运算,因而会产生有限字长效应。所产生的误差主要包括:系数量化 引起的误差以及运算过程中的舍入误差,还有溢出误差。任何一种近似 方法得到得滤波器系数通常精确到小数点的几位。系统量化误差:为了 实现滤波器,滤波器系数必须有固定的位数表 示并且这个固定的位数常常是由使用的处理器的字长决定的。滤波器中

16、 我们使用16位dsp处理机,则滤波 器系数就由16位字长来 表示,然而 这样做会自动的引入误差,这种误差使得有限字长滤波器的频率响应偏 离期望的响应。在某些情况下,这种偏离意味着初始的规范不再满足。 系数量化在本质上将未量化的滤波器变换成一套新的规范,由于它会使 阻带或通带波纹衰减,然后用新规范来求系数。这种 变换必须是系数量 化后仍满足原来的规范。舍入误差:滤波器的输出是由h(i)和x(n-i)的乘积和得到的。每 一个相乘后,积包含的位数要比h(i)和x(n-i)都多。例如12位输入乘 以16位系数,结果有28位长,在存储到存储器之前需要将该28位的 结果量化回16位,这种量化产生误差,它

17、的影响类似于 adc噪声,但 是可能更为严重。量化算术运算结果常用的方法是把结果截断,得到高 的有效位而放弃低位,或者对结果舍入,即选择最接近未舍入结果的高 位数据,这是 通过给结果加1/2lsb来实现的。用两倍 长的寄存器准确 的表示所有的乘积,然后在得到最终和后对结果进行舍入,即在得到y(n) 后对y(n)做舍入,这样可使舍入误差达到最小。这种方法要比另一种在 求和前每个积都做舍入引入的误差小。溢出误差发生在两个数求和时,通常符号相同的两个大数之和会超 出允许的字长。如果 输出y(n)超出允许的限制,那么很显然,样本 值会 发生错误,这需要采取一定措施避免这种情况发生。在用定点dsp时,产

18、生误差是不能避免的,但是可以通过一些方法 减小误差。如,可以用两个存储单元来表示一个数,运算时使用双字运 算;可以根据需要要将滤波器系数都用双字表示,也可以只将一半的系 数用双字表示,视需要而定。fir数字滤波器主要采用非递归结构,因 而在有限精度的运算中都是稳定的。除了 有限字长效应以外,不同 结构 引入的误差也有所不同。在实际设计中,要注意实现中的误差问题。在 选择不同的结构时,应考 虑它们所引入的误差,并用 高级语言进行定点 仿真,以比较不同结构下误差的大小,从而作出合理选择。5.6 程序分析这部分为未初始化段,在tms320c54x的目标存储器中保留空间以 供程序运行过程中的变量作为临

19、时存储空间使用。在目标文件中,在这 些段中没有确切的内容,通常将他们定位到ram区中,其中未初始化段 为命令定义,由.usect汇编器伪指令来编写语法,符号对应于保留的存 储空间第一个字的变量名称,这个符号可以在其他段引用,为每一个符 号留一个存储空间,程序如下: .title "qgf.asm”.mmregsstack .usect "stack",40h.def _main.bss y,19xn .usect "xn",1xnm1 .usect"xn",1xnm2 .usect"xn",1h3.use

20、ct"h0",1h4.usect"h0",1h5.usect"h0",1h18.usect"h0",1xnm3xnm4xnm5.usect.usect.usect"xn",1"xn",1"xn",1xnm18h0h1h2.usect.usect.usect.usect"xn",1"h0",1"h0",1"h0",1给程序中的未初始化部分保留存储空间后为每一个保留存储空间赋值,在

21、table中给出数值,赋值过程先把xn送至ij ar1, table中的值依次给*ar1中,循 环28次每循环一次之后*ar1加一,赋值完成之后把指针 dpt向#xn y送入ar2 中,程序如下:.text_main: ssbx frctstm#xn,ar1rpt#37mvpd table,*ar1 +stm #xn+18,ar3stm#h0+18,ar4stm#30,bkstm#-1,ar0ld#xn,dpstm#y,ar2具体运算过程如下:fir1: ld xnm18,tmpyh18,altdxnm17;x(n-18)放入t中;a=h18*x(n-18) h18;x(n-17)放入t中;x

22、(n-17) 放入 x(n-18)mach17,a;a=a+h17*x(n-18)ltdxnm16mach16,altdxnm15mach15,altdxnm14mach14,altdxnm13mach13,altdxnm12mach12,altdxnm11mach11,altdxnm10mach10,altdxnm9mach9,altdxnm8mach8,altdxnm7mach7,altdxnm6mach6,altdxnm5mach5,altdxnm4mach4,altdxnm3mach3,altdxnm2mach2,altdxnm1mach1,altdxnmach0,a;保存y(n);循

23、环stha,*ar2+st#0h,xnbfir1.end链接器命令文件的编写和使用:链接器命令文件是将连接的信息放在一个文 件中,这样,如果需要多次使用同样的链接信息可以方便的调用。在命令文件中使用两个重要的伪指令 memofry sections指定实际应用中的存储器结构和进 行地址的映射,其中memory来指定目标存储器结构,sections来控制段的 构成与地址分配。memory指令的page(页面)选项来分开构成程序存储器区 域和数据存储器区域的地址空间。 在默认的方式下,page呐程序存储器,page1 为数据存储器链接器将这两个空间当做完全分开的存储器空间来处理。伪指令 secti

24、ons说明如何将输入的段结合成输出段,也可在执行程序中定义输出段,同时指定输出段放在存储器中的位置,并且允许对输出段重新命名。memory指令一般和sections;指令一起使用,控制输出段的分配。在用 memory指令定义目标存储器的模型之后,可以使用段伪指令section够输出段分配到具有指定名称或属性的存储器中, 将.text和.data段分配进命名为rom 的存储器区间,而将.bss段分配进称为spramj区间。memorypage 0: /* program space */eprom: org = 0x0e000, len = 0x0800vecs: org = 0x0ff80,

25、len = 0x0080page 1: /* data space */sram: org=0x60,len=0x0200dram: org = 0x0280, len = 0x1000 /* */sections.vectors :。> .text : > .data : > .bss : >applications */ stk : >vecs page 0 /* interrupt vector table */eprom page 0 /* program code */eprom page 0 /* initialized data */sram pag

26、e 1 /* uninitialized vars fordram page 1其中直接寻址线性缓冲区数据分配如下图:数据存储器y(n)yx(n)xnx(n-1)xnm1x(n-18)xnm18h0h0h1h1h18h18图5-3直接寻址线性缓冲区数据分配5.7计算机芯片上实现过程ccs1成开发环境:ccs是ti推出的用于开发其dspe片的集成开发环境。 ccs1一个开发环境,可以通过设置不同的驱动程序来完成对不同环境的支持。它的配置过程很简单,双击桌面上的“ setup ccs2(' c5000)”图标使用c54xx 软件仿真器,则选择 c5402device simulator选项

27、,然后单击import按钮,单 击close按钮,保存设置,这样就完成了配置。在 file菜单下保存设置,调出 ccs1成开发用户界面。在源程序编辑调试窗口中先建立一个新的工程,冉编写 程序,包括.asm和.cmd源文件,把源文件和库文件添加到工程中。当程序加载成功后,ccs自动打开一个反汇编窗口。在 ccs中可以观察某 个特定地址内存单元数据。执行菜单命令"view”至memory在“address”中 显示存储器首地址为 0x0060,其中设置的各种属性如下图:图5-4 存储器窗口执行完此过程后,源程序窗口如下:0k0060:00060:yokccceokcqodeb334xco

28、do01sd99aoxgggaox19a0e3fff口必次9日0a599(0kd06a:0x59900x3fff0x199b0xd99aoxcooo0xe334kcooooxcccdoaoodt0x0074:0x0000oxoqodeoooo口苴口口口口oaooqooxdooooxoqooeooooauaoaooaooqck007e!koooooxoqodeooooaxaonooaooqo0x0000oxoqooeooooaitaodoaooac0xd098 :0x0000oxodookoooooxooddoxooao0x0000oxodookoooooxooddoxooot01s0092 :

29、 oudoao oxoqoo ok0094 ; _cleanup_ptr 口戈口口94: oxdoofl 0k0095 i _dtors_ptr 口!sdci95: ouooao j£0096 : _lock k0096 : okooatl 口!suci97: _unlock qj£q097: okoooo ozd098: end图5-5寄存器窗口接下来设置图形窗口: ccsm以将数据按图形化方式显示出来,数据准备好 后,执行菜单命令" view”至u “ graph”至u “time/frequency ",显示如图所示 的对话框,设置相应的显示类型和

30、显示参数,即按希望的图形类型显示数据。一共取20个点,设置首地址,dsp data type都要进行从新设定,具体设 置如图:e3 graph property dialog冈1 display typesingle timea.1 graph ti tiegr aphi cal bi spliystart address:膈 11mlpagedataacquisition buffer siwe20index increment1di£play data size2。dsf d&ta type16-bit sigjied inttgerq-value0sampling r区t± q工)1plot data fromltft to rightleft-shi fted eati

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论