第7章 TMS320C54x DSP汇编语言程序设计_第1页
第7章 TMS320C54x DSP汇编语言程序设计_第2页
第7章 TMS320C54x DSP汇编语言程序设计_第3页
第7章 TMS320C54x DSP汇编语言程序设计_第4页
第7章 TMS320C54x DSP汇编语言程序设计_第5页
已阅读5页,还剩93页未读 继续免费阅读

下载本文档

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

文档简介

1、第第7章章 汇编语言程序设计汇编语言程序设计n7.1 程序流程控制程序流程控制n7.2 数据块传送数据块传送n7.3 定点数的基本算术运算定点数的基本算术运算n7.4 长字运算和并行运算长字运算和并行运算n7.5 FIR滤波器的滤波器的DSP实现实现n7.6 IIR数字滤波器的数字滤波器的DSP实现实现n7.7 FFT运算的运算的DSP实现实现7.1 程序流程控制程序流程控制n7.1.1 程序存储器地址生成程序存储器地址生成n7.1.2 条件操作条件操作n7.1.3 分支转移分支转移n7.1.4 调用与返回调用与返回n7.1.5 重复操作重复操作n7.1.6 TMS320C54x中断系统中断系

2、统n7.1.7 堆栈的使用堆栈的使用返回首页7.1.1 程序存储器地址生成程序存储器地址生成n程序存储器中存放指令代码、参数表和立即数。程序地址程序存储器中存放指令代码、参数表和立即数。程序地址产生逻辑(产生逻辑(PAGEN),), 包括以下包括以下5个寄存器(如图个寄存器(如图7-1所所示):示):n 程序计数器(程序计数器(PC););n重复计数器(重复计数器(RC););n块重复计数器(块重复计数器(BRC););n块重复起始地址寄存器(块重复起始地址寄存器(RSA););n块重复结束地址寄存器(块重复结束地址寄存器(REA)。)。图7-1 程序地址产生逻辑(PAGEN)寄存器返回本节7

3、.1.2 条件操作条件操作表7-1 条件指令中的各种条件表7-2 多条件指令中的条件组合第一组第二组A 类B 类A 类B 类C 类EQOVTCCBIONEQNOVNTCNCNBIOLT LEQ GT GEQ 返回本节7.1.3 分支转移分支转移表7-3 无条件分支转移指令指令说明周期数(非延迟/延迟)BD用指令中给出的地址加载PC4/2BACCD用指定累加器(A或B)的低16位作为地址加载PC6/4表7-4 条件分支转移指令指令说明周期数(条件满足/不满足)非延迟延迟BCD如果指令中的条件满足,就用指令中给出的地址加载PC5/33/3BANZD如果所选择的辅助寄存器不等于0,就用指令中给出的地

4、址加载PC(用于循环)4/22/2表7-5 远分支转移指令指令说明周期数(非延迟/延迟)FBD可以转移到由指令所给定的23位地址(C5402为20位地址)4/2FBACCD可以转移到指定累加器所给定的23位地址(C5402为20位地址)6/4返回本节7.1.4 调用与返回调用与返回表7-6 无条件调用与返回指令表7-7 条件调用与返回指令表7-8 远调用和远返回指令返回本节7.1.5 重复操作重复操作1单条指令的重复操作单条指令的重复操作nRPT(重复执行下一条指令)和重复执行下一条指令)和RPTZ(累加器累加器清清0后重复执行下一条指令)可重复执行其后的后重复执行下一条指令)可重复执行其后的

5、一条指令,重复的次数是指令操作数加一条指令,重复的次数是指令操作数加1,这个,这个值保存在值保存在16位的重复计数寄存器(位的重复计数寄存器(RC)中,这中,这个值只能由重复指令(个值只能由重复指令(RPT或或RPTZ)加载,而加载,而不能编程设置不能编程设置RC寄存器中的值,一次给定指令重寄存器中的值,一次给定指令重复执行的最大次数是复执行的最大次数是65536。2块重复操作指令块重复操作指令n块重复指令块重复指令RPTB用于将一个码块重复执行用于将一个码块重复执行N1次,次,N是装入块重复计数器(是装入块重复计数器(BRC)的值。一个的值。一个码块可以有一条或多条指令。单条重复指令执行码块

6、可以有一条或多条指令。单条重复指令执行时关闭所有可屏蔽中断,而块重复操作执行期间时关闭所有可屏蔽中断,而块重复操作执行期间可以响应中断。可以响应中断。 返回本节7.1.6 TMS320C54x中断系统中断系统1中断类型中断类型nC54x支持软件中断和硬件中断。软件中断由程序支持软件中断和硬件中断。软件中断由程序指令产生(指令产生(INTR、TRAP或或RESET)。)。硬件中断硬件中断由设备的一个信号产生,包括两种类型:外部由设备的一个信号产生,包括两种类型:外部硬件中断由外部中断口的信号触发;内部硬件硬件中断由外部中断口的信号触发;内部硬件中断由片内外设的信号触发。无论是硬件中断还中断由片内

7、外设的信号触发。无论是硬件中断还是软件中断,都属于以下两种类型:是软件中断,都属于以下两种类型:(1)可屏蔽中断)可屏蔽中断 (2)非屏蔽中断)非屏蔽中断 表7-9 C5402中断源的中断向量及硬件中断优先权2中断标志寄存器(中断标志寄存器(IFR)和中断屏蔽寄存器和中断屏蔽寄存器(IMR)n中断标志寄存器(中断标志寄存器(IFR)是存储器映象的是存储器映象的CPU寄寄存器。如图存器。如图7-2所示为所示为C5402中断标志寄存器中断标志寄存器(IFR)结构图。中断屏蔽寄存器(结构图。中断屏蔽寄存器(IMR)也是也是存储器映象的存储器映象的CPU寄存器,用来屏蔽外部和内部寄存器,用来屏蔽外部和

8、内部的可屏蔽中断,其结构图同的可屏蔽中断,其结构图同IFR完全一致。完全一致。 图7-2 中断标志寄存器(IFR)结构图3中断响应过程(中断响应过程(如图如图7-3所示)所示)(1)接受中断请求。)接受中断请求。 (2)响应中断。)响应中断。(3)执行中断服务程序()执行中断服务程序(ISR)。)。接受中断请求是可屏蔽中断吗?INTM=0 ?IMR 屏蔽位 =1 ?是硬件中断或INTR 指令中断吗? 响应中断 , 发出 信号 IACKPC 保存到软件堆栈执行中断服务程序中断返回,恢复PC继续执行主程序INTM 位置1否是是是否是否否图7-3 中断操作流程图4重新映象中断向量地址重新映象中断向量

9、地址nC54x的中断向量表是可重定位的,即在的中断向量表是可重定位的,即在DSP复位复位时,中断向量表的起始地址固定为时,中断向量表的起始地址固定为0FF80H,复复位后,此表的起始地址可由用户指定。位后,此表的起始地址可由用户指定。n中断向量可重新被映象到程序存储器的任何一个中断向量可重新被映象到程序存储器的任何一个128字页开始的地方(除保留区域外)。中断向字页开始的地方(除保留区域外)。中断向量地址由量地址由PMST中的中断向量指针中的中断向量指针IPTR(9位)位)和中断向量号(和中断向量号(031)左移两位后组成。如图)左移两位后组成。如图7-4所示。所示。中断向量号左移两位后中断向

10、量地址图7-4 中断向量地址的产生返回本节7.1.7 堆栈的使用堆栈的使用n堆栈被用于保存中断程序、调用子程序的返回地堆栈被用于保存中断程序、调用子程序的返回地址,也用于保护和恢复用户指定的寄存器和数据,址,也用于保护和恢复用户指定的寄存器和数据,还可用于程序调用时的参数传递。返回地址是由还可用于程序调用时的参数传递。返回地址是由DSP自动保存的。自动保存的。 n用户编写的压栈指令和出栈指令将指定的内容压用户编写的压栈指令和出栈指令将指定的内容压入和弹出堆栈,入和弹出堆栈,SP总是指向最后压入堆栈的数据,总是指向最后压入堆栈的数据,压栈之前压栈之前SP减减1,出栈之后,出栈之后SP加加1。 n

11、C54x支持软件堆栈,在用户指定的存储区开辟一支持软件堆栈,在用户指定的存储区开辟一块存储区作为堆栈存储器。堆栈的定义及初始化块存储区作为堆栈存储器。堆栈的定义及初始化步骤为:步骤为:1)声明具有适当长度的未初始化段;)声明具有适当长度的未初始化段;2)将堆栈指针指向栈底;)将堆栈指针指向栈底;3)在链接命令文件)在链接命令文件(.cmd)中将堆栈段放入内部中将堆栈段放入内部数据存储区。数据存储区。 返回本节7.2 数据块传送数据块传送nC54x有有10条数据传送指令,为:条数据传送指令,为:n数据存储器数据存储器数据存储器:数据存储器:MVDK Smem,dmad MVKD dmad,Sme

12、m MVDD Xmem,Ymemn数据存储器数据存储器MMR:MVDM dmad,MMR MVMD MMR,dmad MVMM mmr,mmr返回首页n程序存储器程序存储器数据存储器:数据存储器: MVPD Pmad,Smem MVDP Smem,Pmad READA Smem WRITA Smem1编写汇编源程序为编写汇编源程序为 .mmregs .def _c_int00 .dataTBL: .word0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,1 7,18,19 .word 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,

13、1PROM: .usect PROM,20 .bss a,20 .bss x,20 .bss y,20DATA: .usectDATA,20 .text_c_int00 b start nop nopstart:STM: #a,AR1;a20=0,1,2,3,4,5,6,7,8,9,10, ;11,12,13,14,15,16,17,18,19 RPT #39 ;x20=1,1,1,1,1,1,1,1,1,1 MVPD TBL,*AR1+ ;1,1,1,1,1,1,1,1,1,1 STM #x,AR2;将数据存储器中的数组将数据存储器中的数组x20复制到数组复制到数组y20 STM #y,AR

14、3 RPT #19 MVDD *AR2+,*AR3+ STM #a,AR1;将数据存储器中的将数据存储器中的a20写入到程序存储器写入到程序存储器PROM LD #PROM,A STM #19,AR3LOOPP:WRITA *AR1+ ADD #1,A,A BANZ LOOPP,*AR3- LD #PROM-1,A ;读程序存储器读程序存储器PROM中中20个数据存入数据个数据存入数据存储器存储器DATA STM#DATA,AR1 ST #19,BRC RPTB LOOP2 ADD #1,A,ALOOP2: READA *AR1+ ;该指令为单字指令该指令为单字指令WAIT: NOP B WA

15、IT2建立汇编源程序建立汇编源程序n点 击点 击 CCS C5000图标,进入图标,进入 CCS环境,再点 击环境,再点 击FileNewSource File菜单命令,打开一个空白文档,菜单命令,打开一个空白文档,将汇编源程序逐条输入。将汇编源程序逐条输入。n单击单击FileSave菜单命令,出现如图菜单命令,出现如图7-5所示的窗口,选所示的窗口,选择择D:Program Filesti myprojcetsmymove子目录,在子目录,在“文件名文件名”一栏中输入一栏中输入mymove,并选择保存类型为并选择保存类型为Assembly Source Files(*.asm),),单击单击

16、“保存保存”按钮,按钮,以上汇编程序被存盘。以上汇编程序被存盘。3建立链接命令文件建立链接命令文件n点击点击FileNewSource File菜单命令,打开一个空白菜单命令,打开一个空白文档,逐条输入链接命令文件。文档,逐条输入链接命令文件。 mymove.obj -o mymove.out -m mymove.map MEMORY PAGE 0:RAM: origin=1000h,length=800h RAM1: origin=2000h,length=300hPAGE 1: DARAM1: origin=0100h,length=100hDARAM2: origin=0200h,len

17、gth=100h SECTIONS .data :RAM PAGE 0.text :RAM PAGE 0PROM:RAM1 PAGE 0.bss:DARAM1 PAGE 1DATA:DARAM2 PAGE 1n点击点击FileSave菜单命令,如图菜单命令,如图7-5所示,选择所示,选择D:Program Filestimyprojcetsmymove子目录,在子目录,在“文件名文件名”一栏中输入一栏中输入mymove,并选择保存类型为并选择保存类型为TI Command Language File(*.cmd),),单击单击“保存保存”按按钮,以上链接命令程序被存盘。钮,以上链接命令程序被存

18、盘。4创建一个新工程创建一个新工程n在在Project菜单中选择菜单中选择New项,弹出项,弹出Project Creation(工程创建)窗口,如图工程创建)窗口,如图7-6所示。在所示。在Project一栏键入一栏键入mymove,然后单击然后单击“完成完成”按按钮,钮,CCS将创建一个名为将创建一个名为mymove.pjt的工程,的工程,此文件保存了工程的设置信息及工程中的文件引此文件保存了工程的设置信息及工程中的文件引用情况。用情况。 图7-5 保存汇编源程序 图7-6 工程创建窗口5将有关文件添加到工程中将有关文件添加到工程中n从从Project菜单中选取菜单中选取Add Files

19、 to Project命令,命令,选择文件选择文件mymove.asm,双击将双击将mymove.asm添加到工程中。添加到工程中。n点击点击ProjectAdd Files to Project菜单命令,菜单命令,将将mymove.cmd添加到工程文件中。添加到工程文件中。n逐层打开如图逐层打开如图7-7所示。双击所示。双击mymove.asm打开文打开文件,可以观察和修改件,可以观察和修改mymove.asm文件的内容。文件的内容。 6汇编、编译和链接产生汇编、编译和链接产生.out文件文件n点击点击Project菜单中的菜单中的Rebuild All。请注意在监请注意在监视窗口显示的汇编

20、、编译和链接的相关信息。如视窗口显示的汇编、编译和链接的相关信息。如果没有错误,将产生果没有错误,将产生mymove.out文件;如果有文件;如果有错,在监视窗口以红色字体显示出错行,用鼠标错,在监视窗口以红色字体显示出错行,用鼠标双击该行,光标跳将至源程序相应的出错行。修双击该行,光标跳将至源程序相应的出错行。修改错误后,重新汇编、链接。改错误后,重新汇编、链接。7加载并运行加载并运行.out文件文件n执行菜单命令执行菜单命令FileLoad Program,选择选择mymove.out并打开,将并打开,将Rebuild All生成的程序生成的程序加载到加载到DSP中。中。CCS将自动打开一

21、个反汇编窗口,将自动打开一个反汇编窗口,显示加载程序的反汇编指令。显示加载程序的反汇编指令。n点击点击DebugRun菜单命令运行程序,单步执行菜单命令运行程序,单步执行程序则点击程序则点击DebugStepInto菜单命令,或按菜单命令,或按F8键。键。8观察运行结果观察运行结果n点击点击ViewMemory菜单命令,将出现如图菜单命令,将出现如图7-8所所示的选项窗口,将示的选项窗口,将Address改为改为0 x0100,单击单击OK按钮,将在汇编窗口显示选定的数据空间的按钮,将在汇编窗口显示选定的数据空间的内容。内容。n当结果数据错误时,可检查源程序并进行修改。当结果数据错误时,可检查

22、源程序并进行修改。修改完毕,可重新汇编、链接,再加载运行修改完毕,可重新汇编、链接,再加载运行.out文件,直到结果正确。文件,直到结果正确。返回本节7.3 定点数的基本算术运算定点数的基本算术运算n7.3.1 加法、减法和乘法运算加法、减法和乘法运算n7.3.2 定点除法运算定点除法运算返回首页7.3.1 加法、减法和乘法运算加法、减法和乘法运算1定点定点DSP中数据表示方法中数据表示方法n定点定点DSP芯片的数值表示是基于芯片的数值表示是基于2的补码表示形的补码表示形式。数的定标有式。数的定标有Q表示法和表示法和S表示法,表表示法,表7-10列出列出了了16位数的位数的16种种Q表示和表示

23、和S表示,以及它们所能表示,以及它们所能表示的十进制数范围。表示的十进制数范围。16位中有一个符号位、位中有一个符号位、Q个小数位和个小数位和15-Q个整数位来表示一个数。个整数位来表示一个数。 表7-10 Q表示、S表示及数值范围图7-9 DSP定点运算中小数的表示216位定点加法和位定点加法和16位定点减法位定点减法nC54x中提供了多条用于加法的指令,如中提供了多条用于加法的指令,如ADD、ADDC、ADDM和和ADDS。其中,其中,ADDS用于无符用于无符号数的加法运算,号数的加法运算,ADDC用于带进位的加法运算用于带进位的加法运算而而ADDM专用于立即数的加法。专用于立即数的加法。

24、n C54x中提供了多条用于减法的指令,如中提供了多条用于减法的指令,如SUB、SUBB、SUBC和和SUBS。其中,其中,SUBS用于无符用于无符号数的减法运算,号数的减法运算,SUBB用于带进位的减法运算,用于带进位的减法运算,而而SUBC为条件减法指令。为条件减法指令。316位定点整数乘法位定点整数乘法nC54x中提供了大量的乘法运算指令,其结果都是中提供了大量的乘法运算指令,其结果都是32位,放在累加器位,放在累加器A或或B中。乘数在中。乘数在C54x的乘法的乘法指令中很灵活,可以是指令中很灵活,可以是T寄存器、立即数、存储寄存器、立即数、存储单元和累加器单元和累加器A或或B的高的高1

25、6位。在位。在C54x中,一般中,一般对数据的处理都当做有符号数,如果是无符号数对数据的处理都当做有符号数,如果是无符号数相乘,使用相乘,使用MPYU指令,这是一条专门用于无符指令,这是一条专门用于无符号数乘法运算的指令,其他指令都是有符号数的号数乘法运算的指令,其他指令都是有符号数的乘法。乘法。 4Q15定点小数乘法运算定点小数乘法运算n两个两个16位整数相乘,乘积总是位整数相乘,乘积总是“向左增长向左增长”,这,这就意味着多次相乘后乘积将会很快超出定点器件就意味着多次相乘后乘积将会很快超出定点器件的数据范围。而且要将的数据范围。而且要将32位乘积保存到数据存储位乘积保存到数据存储器,就要耗

26、费两个机器周期以及两个字的程序和器,就要耗费两个机器周期以及两个字的程序和RAM单元。然而,两个单元。然而,两个Q15的小数相乘,乘积总的小数相乘,乘积总是是“向右增长向右增长”,这就意味着超出定点器件数据,这就意味着超出定点器件数据范围的将是不太感兴趣的部分。范围的将是不太感兴趣的部分。 5混合表示法混合表示法n有些情况下,运算过程中为了既满足数值的动态有些情况下,运算过程中为了既满足数值的动态范围又保证一定的精度,必须采用范围又保证一定的精度,必须采用Q0与与Q15之间之间的表示方法。的表示方法。n在做加、减运算时,如果两个操作数的定标不一在做加、减运算时,如果两个操作数的定标不一样,在运

27、算前要进行小数点的调整,为保证运算样,在运算前要进行小数点的调整,为保证运算精度,需要使精度,需要使Q值小的数调整为与另一个数的值小的数调整为与另一个数的Q值一样大。值一样大。返回本节7.3.2 定点除法运算定点除法运算n在一般的在一般的DSP中,没有专门的除法指令。同样,在中,没有专门的除法指令。同样,在C54x中也没有提供专门的除法指令。一般有两种方法来完成除中也没有提供专门的除法指令。一般有两种方法来完成除法。一种是用乘法来代替,除以某个数相当于乘以其倒数,法。一种是用乘法来代替,除以某个数相当于乘以其倒数,所以先求出其倒数,然后相乘。这种方法对于除以常数特所以先求出其倒数,然后相乘。这

28、种方法对于除以常数特别适用。另一种方法是使用条件减法别适用。另一种方法是使用条件减法SUBC指令,加上重指令,加上重复指令复指令RPT #15,重复重复16次减法完成无符号数除法运算。次减法完成无符号数除法运算。两种不同情况下的除法程序。两种不同情况下的除法程序。1|被除数被除数|ROM1PAGE 0.data : INTRAM1 PAGE 1FIR_COEF: INTRAM2 PAGE 1FIR_BFR : INTRAM3 PAGE 1.stack : B2B PAGE 1 5CCS集成开发环境下上机操作过程集成开发环境下上机操作过程(1)在)在CCS上建立上建立fir工程并运行工程并运行f

29、ir.out程序。程序。 (2)观察输入信号的波形及频谱(如图)观察输入信号的波形及频谱(如图7-137-15所示)。所示)。(3)观察输出信号的波形及频谱(如图)观察输出信号的波形及频谱(如图7-16、7-17所示所示 )。)。 图7-13 Graph 属性设置窗口 图7-14 输入信号的时域波形 图7-15 输入信号的频谱图 图7-16 滤波器输出信号时域波形 图7-17 滤波器输出信号频谱图返回本节7.5.3 系数对称系数对称FIR滤波器的滤波器的DSP实现实现1在数据存储器中开辟两个循环缓冲区:在数据存储器中开辟两个循环缓冲区:nNew循环缓冲区中存放循环缓冲区中存放N/2=4个新数据

30、(设个新数据(设N=8););Old循环缓冲区中存放循环缓冲区中存放4个老数据。循环个老数据。循环缓冲区的长度为缓冲区的长度为N/2。缓冲区指针缓冲区指针AR2指向指向New 缓冲区中最新的数据;缓冲区中最新的数据;AR3指向指向Old 缓冲区中最缓冲区中最老的数据,并在程序存储器中设置系数表,如图老的数据,并在程序存储器中设置系数表,如图7-18所示。所示。2.(AR2)+(AR3)AH(累加器累加器A的高位)的高位)n(AR2)-1AR2,(AR3)-1AR33将累加器将累加器B清清0,重复执行以下操作,重复执行以下操作N/2次(次(i=0,1,2,3):):n(AH)系数系数ai+(B)

31、B,系数指针(系数指针(PAR)加加1n(AR2)+(AR3)AH,AR2 和和AR3减减1n并保存或输出结果(结果在并保存或输出结果(结果在BH中)。中)。4修正数据指针修正数据指针n将将AR2和和AR3分别指向分别指向New缓冲区中最新的数据缓冲区中最新的数据和和Old 缓冲区中最老的数据。用缓冲区中最老的数据。用New 缓冲区最老缓冲区最老的数据替代的数据替代Old 缓冲区中最老的数据,如图缓冲区中最老的数据,如图7-18中箭头所示。中箭头所示。Old 缓冲区指针减缓冲区指针减1。5输入一个新的数据替代输入一个新的数据替代New 缓冲区中最老的数缓冲区中最老的数据据n重复执行步骤重复执行

32、步骤25。返回本节7.6 IIR数字滤波器的数字滤波器的DSP实现实现nIIR数字滤波器的传递函数数字滤波器的传递函数H(z)为:为:n其对应的差分方程为:其对应的差分方程为:n例如,对于直接形式的二阶例如,对于直接形式的二阶IIR数字滤波器,其结数字滤波器,其结构如图构如图7-19所示,编程时,可以分别开辟四个缓冲所示,编程时,可以分别开辟四个缓冲区,存放输入、输出变量和滤波器的系数,如图区,存放输入、输出变量和滤波器的系数,如图7-20所示。所示。N1iiiM0iiiza1zb)z(H) in(ya) in(xb)n(yN1iiM0ii(7-4)(7-3)返回首页图7-19 直接形式的二阶

33、IIR数字滤波器图7-20 存放输入、输出变量和滤波器系数的缓冲区n【例【例7-15】设计一个三阶的切比雪夫】设计一个三阶的切比雪夫型带通数字滤波器,型带通数字滤波器,其采样频率其采样频率Fs =16kHz,其通频带其通频带3.2kHzf4.8kHz,内内损耗不大于损耗不大于1dB;f 5.6kHz为阻带,其衰减为阻带,其衰减大于大于20dB。1IIR滤波器的设计滤波器的设计n在在MATLAB中设计中设计IIR滤波器,程序为:滤波器,程序为: wp=3.2,4.8;ws=2.4,5.6;rp=1;rs=20 n,wn=cheb1ord(wp/8,ws/8,rp,rs) b,a=cheby1(n

34、,rp,wn) n设计结果为:设计结果为: N=3 wn =0.4000 0.6000 b0=0.0114747 a0=1.000000 b1=0 a1=0 b2=-0.034424 a2=2.13779 b3=0 a3=0 b4=0.034424 a4=1.76935 b5=0 a5=0 b6=-0.0114747 a6=0.5397582产生滤波器输入信号的文件产生滤波器输入信号的文件n使用使用CCS的的Simulator进行滤波器特性的测试时,需要输进行滤波器特性的测试时,需要输入时间信号入时间信号x(n)。 #include #include void main() int i; do

35、uble f256; FILE *fp; if(fp=fopen(iirin.inc,wt)=NULL) printf(cant open file! n); return; fprintf(fp,INPUT: .sect %cINPUT %cn,);for(i=0;iROM PAGE 0.data:DARAM PAGE 1BN:DARAM PAGE 1AN:DARAM PAGE 1 INBUF:RAM1 PAGE 1OUTPUT:RAM2 PAGE 1返回本节7.7 FFT运算的运算的DSP实现实现n7.7.1 基二实数基二实数FFT运算的算法运算的算法n7.7.2 FFT运算模拟信号的产生

36、及输入运算模拟信号的产生及输入n7.7.3 实序列实序列FFT汇编源程序及链接命令文件汇编源程序及链接命令文件n7.7.4 观察信号时域波形及其频谱观察信号时域波形及其频谱返回首页7.7.1 基二实数基二实数FFT运算的算法运算的算法n该算法主要分为以下四步。该算法主要分为以下四步。第一步,输入数据的组合和位倒序第一步,输入数据的组合和位倒序n把输入序列作位倒序是为了在整个运算最后的输把输入序列作位倒序是为了在整个运算最后的输出中得到的序列是自然顺序。如图出中得到的序列是自然顺序。如图7-21所示。所示。第二步,第二步,N点复数点复数FFTn在在DATA数据处理缓冲器里进行数据处理缓冲器里进行

37、N点复数点复数FFT运算。运算。如图如图7-22所示。所示。第三步,分离复数第三步,分离复数FFT的输出为奇部分和偶部分的输出为奇部分和偶部分n分离分离FFT输出为输出为RP、RM、IP和和IM四个序列,即四个序列,即偶实数、奇实数、偶虚数和奇虚数四部分。偶实数、奇实数、偶虚数和奇虚数四部分。第四步,产生第四步,产生2N点的复数点的复数FFT输出序列输出序列n产生产生2N=256个点的复数输出,它与原始的个点的复数输出,它与原始的256个个点的实输入序列的点的实输入序列的DFT一致。如图一致。如图7-24所示。所示。返回本节7.7.2 FFT运算模拟信号的产生及输入运算模拟信号的产生及输入n产生模拟输入信号可以有两种方法,第一种方法是用产生模拟输入信号可以有两种方法,第一种方法是用C语言程序产生语言程序产生mdata.inc文件,然后,在文件,然后,在DSP汇编语言汇编语言程序中通过程序中通过.copy汇编命令将生成的数据文件汇编命令将生成的数据文件mdata.inc复制到汇编程序中,如例复制到汇编程序中,如例7-12和例和例7-15,数据起始地址,数据起

温馨提示

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

评论

0/150

提交评论