《《应用系统设计举例》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《应用系统设计举例》PPT课件.ppt(62页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第8章 应用系统设计举例DSP应用中几个典型的案例:应用中几个典型的案例:正弦信号发生器正弦信号发生器 FIR数字滤波器的设计和实现方法数字滤波器的设计和实现方法 快速傅里叶变换快速傅里叶变换 语音信号采集和回放的实现方法语音信号采集和回放的实现方法第8章:应用系统设计举例 8.1 DSP8.1 DSP应用系统设计基本步骤应用系统设计基本步骤第8章:应用系统设计举例设计基本步骤 典型的DSP目标板结构框图 第8章:应用系统设计举例设计基本步骤 一个一个DSPDSP应用系统设计包括硬件设计和软件设计两部分。应用系统设计包括硬件设计和软件设计两部分。硬件设计硬件设计又称为目标板设计,考虑算法需求分
2、析和成本、又称为目标板设计,考虑算法需求分析和成本、体积、功耗核算等。体积、功耗核算等。软件设计软件设计是指设计包括信号处理算法的程序,用是指设计包括信号处理算法的程序,用DSPDSP汇编语汇编语言或通用的高级语言言或通用的高级语言(C/C+)(C/C+)编写出来并进行调试。这些程序编写出来并进行调试。这些程序要放在要放在DSPDSP片内或片外存储器中运行,在程序执行时,片内或片外存储器中运行,在程序执行时,DSPDSP会执会执行与行与DSPDSP外围设备传递数据或互相控制的指令。外围设备传递数据或互相控制的指令。DSPDSP的软件与硬件设计调试是密不可分的。的软件与硬件设计调试是密不可分的。
3、第8章:应用系统设计举例设计基本步骤 8.1 DSP8.1 DSP应用系统设计基本步骤应用系统设计基本步骤第8章:应用系统设计举例 正弦信号发生器8.2 正弦信号发生器正弦信号发生器用用DSP实现正弦信号发生器的基本方法有三种:实现正弦信号发生器的基本方法有三种:(1)查表法。查表法。即将某个频率的正弦即将某个频率的正弦/余弦值计算出来后制成一个余弦值计算出来后制成一个表,表,DSP工作时仅作查表运算即可。这种方法适用于信号精度工作时仅作查表运算即可。这种方法适用于信号精度要求不是很高的情况。当对于信号的精度要求较高时,其信号要求不是很高的情况。当对于信号的精度要求较高时,其信号采样点的个数增
4、多,占用的存储器空间也将增大。采样点的个数增多,占用的存储器空间也将增大。(2)泰勒级数展开法。泰勒级数展开法。与查表法相比,需要的存储单元少,但是与查表法相比,需要的存储单元少,但是泰勒级数展开一般只能取有限次项,精度无法得到保证。泰勒级数展开一般只能取有限次项,精度无法得到保证。(3)迭代法。迭代法。利用数字振荡器通过迭代方法产生正弦信号。利用数字振荡器通过迭代方法产生正弦信号。第8章:应用系统设计举例 正弦信号发生器8.2.1 数字振荡器原理数字振荡器原理设单位冲击序列经过一系统后,其输出为正弦序列设单位冲击序列经过一系统后,其输出为正弦序列 则系统的传递函数为则系统的传递函数为其中,其
5、中,其振荡频率由系数其振荡频率由系数A、B和和C来决定。因此,设计振荡器主要就来决定。因此,设计振荡器主要就在于确定这些系数。在于确定这些系数。第8章:应用系统设计举例 正弦信号发生器设初始值为设初始值为0,数字振荡器的二阶差分方程形式为:,数字振荡器的二阶差分方程形式为:利用单位冲击函数性质,即仅当利用单位冲击函数性质,即仅当k=1时,时,xk1=1,得:,得:当当k2,yk能用能用yk1和和yk2算出算出,递归的差分方程。,递归的差分方程。第8章:应用系统设计举例 正弦信号发生器8.2.2 正弦波信号发生器的设计正弦波信号发生器的设计要求:要求:设计产生频率为设计产生频率为 的正弦波;的正
6、弦波;采用定时中断的方法输出采用定时中断的方法输出yn;设采样率为设采样率为 (即通过定时器中断,每隔即通过定时器中断,每隔25 s产生一个产生一个yn)。第8章:应用系统设计举例 正弦信号发生器递归的差分方程系数为:递归的差分方程系数为:将所有系数除以将所有系数除以2,用,用16位定点位定点第8章:应用系统设计举例 正弦信号发生器定时器的初值计算定时器的初值计算要求:要求:定时器产生定时器产生25 s时间间隔,获得时间间隔,获得40kHz的采样频率。的采样频率。定时器的初值计算由下式决定定时器的初值计算由下式决定式中式中 为为DSP时钟频率,时钟频率,为采样频率。为采样频率。设预分频系数设预
7、分频系数TDDR=0,则定时器周期寄存器初值,则定时器周期寄存器初值PRD为为本例中本例中 ,则,则PRD=2499。第8章:应用系统设计举例 正弦信号发生器8.2.3 正弦波信号发生器的实现正弦波信号发生器的实现初始化:初始化:初始化初始化y1和和y2、初始化定时器、初始化中断、初始化定时器、初始化中断1.初始化初始化y1和和y2SSBX FRCT ;置;置FRCT=1,准备进行小数乘法运算,准备进行小数乘法运算ST#INIT_A,AA ;将常数;将常数A装入变量装入变量AAST#INIT_B,BB ;将常数;将常数B装入变量装入变量BBST#INIT_C,CC ;将常数;将常数C装入变量装
8、入变量CCPSHD CC ;将变量;将变量CC压入堆栈压入堆栈POPD y1 ;初始化;初始化y1=CCLD AA,T ;装;装AA到到T寄存器寄存器MPY y1,A ;y1乘系数乘系数A,结果放入,结果放入A寄存器寄存器STH A,y2 ;y2=AA*y1第8章:应用系统设计举例 正弦信号发生器2.初始化定时器程序初始化定时器程序STM#10h,TCR;停止定时器;停止定时器STM#2499,PRD;设置;设置PRD寄存器值为寄存器值为2499,TINT中断频率为中断频率为40KHzSTM#20h,TCR ;重新装入;重新装入TIM和和PSC,启动定时器,启动定时器第8章:应用系统设计举例
9、正弦信号发生器3.中断初始化中断初始化 包括设置中断总开关和中断屏蔽寄存器,修改中断向量表包括设置中断总开关和中断屏蔽寄存器,修改中断向量表的入口地址。中断初始化程序代码片断:的入口地址。中断初始化程序代码片断:LD#0,DP ;设置;设置DP页指针页指针SSBX INTM ;关闭所有中断;关闭所有中断 LD#vector,A;读出中断向量;读出中断向量(地址地址vector在中断在中断 向量表程序中定义向量表程序中定义)AND#0FF80h,A OR PMST,A ;保留;保留PMST的低的低7位位STLM A,PMST ;设置;设置PMST(其中包括其中包括IPTR)RSBX INTM;开
10、所有中断;开所有中断第8章:应用系统设计举例 正弦信号发生器中断服务程序中断服务程序 利用前面的利用前面的y1y1和和y2y2,计算出新的,计算出新的ynyn。_tint_tint:LD LD BB,T BB,T ;将系数;将系数B B 装入装入T T寄存器寄存器MPY MPY y1,A y1,A ;y1y1乘系数乘系数B B,结果放入,结果放入A A寄存器寄存器LTD LTD y2 y2 ;将;将y2y2装入装入T T寄存器,同时复制到寄存器,同时复制到y1y1MAC MAC AA,A AA,A ;完成新正弦数据的计算,;完成新正弦数据的计算,a a寄存器中为寄存器中为 ;y2*AA+y1*
11、BBy2*AA+y1*BBSTH STH A,l,y1A,l,y1;将新数据存入;将新数据存入y1y1,因所有系数都除过,因所有系数都除过2 2,所以,所以 ;在保存结果时转移一位,恢复数据正常大小;在保存结果时转移一位,恢复数据正常大小STH STH A,y0 A,y0 ;将新正弦数据存入;将新正弦数据存入y0y0NOPNOPRETERETE第8章:应用系统设计举例 正弦信号发生器 要获得完整的程序,必须有中断向量表文件和内存定位文件。要获得完整的程序,必须有中断向量表文件和内存定位文件。中断向量表清单如下:中断向量表清单如下:.mmregs .ref _ret .ref _c_int00
12、.ref _tint .global vector .sect.int_table;-;interrupte vector table!;-vector:rs b _c_int00 nop tint b _tint第8章:应用系统设计举例 正弦信号发生器内存定位文件清单如下:内存定位文件清单如下:MEMORY PAGE 0:VEC:origin=1000h,length=0ffh PROG:origin=1100h,length=8000h PAGE 1:DATA:origin=080h,length=0807fhSECTIONS .text PROG PAGE 0 .cinit PROG P
13、AGE 0 .switch PROG PAGE 0 .int_table VEC PAGE 0 .data DATA PAGE 1 .bss DATA PAGE 1 .const DATA PAGE 1 .sysmem DATA PAGE 1 .stack DATA PAGE 1第8章:应用系统设计举例 正弦信号发生器4.观察输出信号波形以及频谱观察输出信号波形以及频谱(1)启动启动CCS,新建工程文件,新建工程文件,。加入:。加入:(2)汇编源程序汇编源程序,包括初始化代码和中断服务程序;,包括初始化代码和中断服务程序;(3)汇编源程序汇编源程序,为中断向量表。,为中断向量表。(4)连接定位
14、连接定位文件文件(2)完成编译、连接,生成完成编译、连接,生成.out文件,并装载文件,并装载.out文件到片内文件到片内存储器。存储器。(3)选择选择“ViewGraphTime/Frequency”,打开图形显示设,打开图形显示设置窗口。在弹出的对话框中按图置窗口。在弹出的对话框中按图设置,主要修改设置,主要修改“Star Address”为为y0(y0为生成的正弦波输出变量为生成的正弦波输出变量);“Acquisition Buffer Size”为为1,“DSP Data Type”为为“16-bit signed integer”。第8章:应用系统设计举例 正弦信号发生器第8章:应用
15、系统设计举例 FIRFIR数字滤波器数字滤波器8.3 FIR数字滤波器数字滤波器8.3.1 FIR滤波器的基本原理和结构滤波器的基本原理和结构差分方程:差分方程:结构图:结构图:算法实际上是一种乘法累加运算。它不断地从输入端读入算法实际上是一种乘法累加运算。它不断地从输入端读入样本值样本值xn,经延时,经延时()后做乘法累加,输出滤波结果后做乘法累加,输出滤波结果yn。第8章:应用系统设计举例 FIRFIR数字滤波器数字滤波器8.3.2 FIR滤波器的设计方法滤波器的设计方法 FIR滤波器的设计方法主要有窗函数法和频率采样法滤波器的设计方法主要有窗函数法和频率采样法。窗函数法是最基本的方法窗函
16、数法是最基本的方法,窗的类型有:,窗的类型有:矩形窗矩形窗 Hanning窗窗 Blackman窗窗 Kaiser窗窗 DSP设计者可以利用功能强大的设计者可以利用功能强大的MATLAB工具很方便的设计工具很方便的设计出逼近理想特性的出逼近理想特性的FIR滤波器。得到阶数滤波器。得到阶数N和系数和系数bi.然后将然后将FIR系数放入系数放入DSP程序中。程序中。第8章:应用系统设计举例 FIRFIR数字滤波器数字滤波器8.3.3 FIR滤波器的滤波器的DSP实现实现 FIR滤波器的输出表达式为滤波器的输出表达式为 不断地对输入样本进行不断地对输入样本进行n1延时后,再进行乘法累加。延时后,再进
17、行乘法累加。C54x通过两种方法实现通过两种方法实现FIR滤波器的延迟线滤波器的延迟线:1.线性缓冲区法线性缓冲区法 2.循环缓冲区法循环缓冲区法 3.系数对称系数对称FIR滤波器的实现方法滤波器的实现方法第8章:应用系统设计举例 FIRFIR数字滤波器数字滤波器1.线性缓冲区法线性缓冲区法(又称延迟线法又称延迟线法)实现实现N阶阶FIR滤波器,需要在数据存储器中开辟一个滤波器,需要在数据存储器中开辟一个N单元的单元的缓冲区缓冲区(滑窗滑窗),用来存放最新的,用来存放最新的N个输入样本。个输入样本。DSP每计算一个输出值,都需要读取每计算一个输出值,都需要读取N个样本并进行个样本并进行N次乘次
18、乘法和累加法和累加;每当读取一个样本后,将此样本向后移动每当读取一个样本后,将此样本向后移动,如如xn-7,读完最,读完最后一个样本后,最老的样本被推出缓冲区,输入最新样本后一个样本后,最老的样本被推出缓冲区,输入最新样本xn+1存入缓冲区的顶部。存入缓冲区的顶部。优点:存储器中新老数据位置直观明了。优点:存储器中新老数据位置直观明了。缺点:线性缓冲区只能定位在缺点:线性缓冲区只能定位在DARAM中。中。第8章:应用系统设计举例 FIRFIR数字滤波器数字滤波器N=8的线性缓冲区的线性缓冲区:顶部为低地址单元,存放最新样本,底部为高地址单元,存放最老样本;AR1被用作间接寻址的数据缓冲区的辅助
19、寄存器,指向最老样本单元。AR2被用作间接寻址的系数区的辅助寄存器。第8章:应用系统设计举例 FIRFIR数字滤波器数字滤波器实现实现 的运算的运算 可通过执行存储器延时指令可通过执行存储器延时指令DELAY来实现:来实现:DELAY Smem;(Smen)(Smem+1)将延时指令与其它指令结合使用,可在同样的机器周期内完将延时指令与其它指令结合使用,可在同样的机器周期内完成这些操作。例如:成这些操作。例如:LTD LD+DELAY MACDMAC+DELAY注意:用线性缓冲区实现运算时,缓冲区的数据需要移动,这注意:用线性缓冲区实现运算时,缓冲区的数据需要移动,这样在一个机器周期内需要一次
20、读和一次写操作。因此,线性缓样在一个机器周期内需要一次读和一次写操作。因此,线性缓冲区只能定位在冲区只能定位在DARAM中。中。第8章:应用系统设计举例 FIRFIR数字滤波器数字滤波器线性缓冲区法实现线性缓冲区法实现FIR滤波器的汇编语言程序设计滤波器的汇编语言程序设计 .titleFIR1.ASM.mmregs.defstartX.usectx,7;自定义数据空间;自定义数据空间PA0.set0PA1.set1.dataCOEF:.word 1*32768/10 ;定义;定义b6.word 2*32768/10;定义;定义b5.word-4*32768/10;定义;定义b4.word 3*
21、32768/10;定义;定义b3.word-4*32768/10;定义;定义b2 .word 2*32768/10 ;定义;定义b1.word 1*32768/10;定义;定义b0 .text第8章:应用系统设计举例 FIRFIR数字滤波器数字滤波器start:SSBX FRCT ;设置小数乘法;设置小数乘法STM#x+7,AR1;AR1指向缓冲区底部指向缓冲区底部x(n-6)STM#7,AR0;AR0=7,设置设置AR1复位值复位值PORTR PA1,x ;输入;输入x(n)FIR1:RPTZ A,#7 ;累加器;累加器A清清0,设置迭代次数设置迭代次数 MACD*AR1-,COEF,A ;
22、完成乘法;完成乘法-累加累加,数据移位数据移位STHA,*AR1;暂存;暂存y(n)PORTW *AR1,PA0 ;输出;输出y(n)BDFIR1 PORTR PA1,*AR1+0 ;输入最新样本,并修改输入最新样本,并修改 ;AR1=AR1+AR0;指向缓冲区底部;指向缓冲区底部.end第8章:应用系统设计举例 FIRFIR数字滤波器数字滤波器2.循环缓冲区法循环缓冲区法(重点重点)用线性缓冲区法的限制:用线性缓冲区法的限制:实现运算时,缓冲区的所有数据需要实现运算时,缓冲区的所有数据需要移动,只能定位在移动,只能定位在DARAM中。中。循环缓冲区法:循环缓冲区法:每当输入新的样本时,以新样
23、本改写滑窗中最每当输入新的样本时,以新样本改写滑窗中最老的数据,而滑窗的其他数据不需要移动。老的数据,而滑窗的其他数据不需要移动。优点:优点:不用移动数据,不需要在一个机器周期中要求进行一次不用移动数据,不需要在一个机器周期中要求进行一次读和一次写的数据存储器,因此,可将循环缓冲区定位在数据读和一次写的数据存储器,因此,可将循环缓冲区定位在数据存储器的任何位置,而不像线性缓冲区要求定位在存储器的任何位置,而不像线性缓冲区要求定位在DARAM中中那样。那样。缺点:缺点:在循环缓冲区新老数据不很直接明了。在循环缓冲区新老数据不很直接明了。第8章:应用系统设计举例 FIRFIR数字滤波器数字滤波器指
24、针指针ARx指向最新样本单元。顶部为低地址单元,底部为高地址单元;指向最新样本单元。顶部为低地址单元,底部为高地址单元;第第1次运算,求次运算,求yn 的过程如下的过程如下:(1)以以ARx为指针,按为指针,按xn,xn-7 的顺序取数,每取一次的顺序取数,每取一次数后,完成一次乘法累加运算;数后,完成一次乘法累加运算;(2)当经过当经过8次取数、运算之后,得到次取数、运算之后,得到 yn;(3)求得求得 yn后,后,ARx指向最老样本指向最老样本 单元;单元;(4)从从I/O口输入新样本口输入新样本xn+1,替代最老样本,替代最老样本xn-7,为下,为下次计算做好准备,如次计算做好准备,如
25、图图8.8(b)所示。所示。第第2次运算按次运算按xn+1,xn,xn-6 的顺序取数的顺序取数,求得求得yn+1后,后,ARx指向指向xn-6,输入的新样本,输入的新样本xn+2 将替代将替代xn-6 样本,如图样本,如图8.8(c)所示。所示。第8章:应用系统设计举例 FIRFIR数字滤波器数字滤波器第8章:应用系统设计举例 FIRFIR数字滤波器数字滤波器实现循环缓冲区间接寻址的关键:循环寻址方式实现循环缓冲区间接寻址的关键:循环寻址方式第一,第一,BK(循环缓冲区长度循环缓冲区长度)满足:满足:BK=N 在实现在实现N阶阶FIR时,设定时,设定BK的值为的值为FIR的阶数,就能保证循的
26、阶数,就能保证循环缓冲区的指针环缓冲区的指针ARx始终指向循环缓冲区,实现循环缓冲区顶始终指向循环缓冲区,实现循环缓冲区顶部和底部的相邻。部和底部的相邻。第二,第二,必须满足必须满足2kN,其中,其中k是循环缓冲区的基地址是循环缓冲区的基地址ARx的的k个最低有效位,必须为个最低有效位,必须为0。如如N=31时,由于时,由于25=3231,k=5,该地址的最低,该地址的最低5位为位为0,所以循环缓冲区必须从二进制地址所以循环缓冲区必须从二进制地址xxxx xxx0 0000B开始开始 第8章:应用系统设计举例 FIRFIR数字滤波器数字滤波器利用循环缓冲区和双操作数寻址方法实现的利用循环缓冲区
27、和双操作数寻址方法实现的FIR滤波器滤波器第8章:应用系统设计举例 FIRFIR数字滤波器数字滤波器.titleFIR2.ASM.mmregs.defstart.bssy,1X.usectx,7;定义数据存储器空间;定义数据存储器空间b0.usectb0,7PA0.set0PA1.set1.dataCOEF:.word 1*32768/10;定义;定义b6.word 2*32768/10;定义;定义b5.text第8章:应用系统设计举例 FIRFIR数字滤波器数字滤波器start:SSBX FRCT ;设置小数乘法;设置小数乘法STM#b0,AR1 ;AR1指向指向b0RPT#6 MVPD C
28、OEF,*AR1+;完成数据搬移;完成数据搬移STM#x+6,AR2 ;AR2指向缓冲区底部指向缓冲区底部xn-6 STM#b0+6,AR3 ;AR3指向系数缓冲区底部指向系数缓冲区底部b6STM#7,BK;BK=7 STM#-1,AR0PORTR PA1,x;输入;输入xn 第8章:应用系统设计举例 FIRFIR数字滤波器数字滤波器FIR2:RPTZ A,#6 ;累加器;累加器A清清0,迭代迭代7次次 MAC*AR2+0%,*AR3+0%,A;完成乘法;完成乘法-累加累加,循环循环STH A,y ;暂存;暂存ynPORTW y,PA0 ;输出;输出ynBDFIR2 PORTR PA1,*AR
29、2+0%;循环输入最新样本并修改循环输入最新样本并修改 ;AR2=AR2+AR0 ;指向;指向xn-5.end第8章:应用系统设计举例 FIRFIR数字滤波器数字滤波器3.系数对称系数对称FIR滤波器的实现方法滤波器的实现方法 长度为N 的线性相位FIR滤波器的输出表达式为:优点优点:乘法的次数减少了一半。乘法的次数减少了一半。第8章:应用系统设计举例 FIRFIR数字滤波器数字滤波器实现方法实现方法:使用专门用于系数对称使用专门用于系数对称FIR滤波器的指令。滤波器的指令。FIRS Xmem,Ymem,Pmad该指令的操作如下:该指令的操作如下:执行:执行:PmadPAR 当当(RC)0(循
30、环计数器)(循环计数器)(Xmem)(Ymem)16A (B)(A(3216)PARB (PAR1)PAR (RC)1RC说明:说明:FIRS指令在同一机器周期内,通过指令在同一机器周期内,通过C和和D总线读两次数总线读两次数据存储器,同时通过据存储器,同时通过P总线读程序存储区的一个系数。总线读程序存储区的一个系数。第8章:应用系统设计举例 FIRFIR数字滤波器数字滤波器注意两点:注意两点:(1)在数据存储器中开辟两个循环缓冲区,如在数据存储器中开辟两个循环缓冲区,如New和和Old缓冲区,缓冲区,分别存放分别存放N/2个新数据和老数据,循环缓冲区的长度为个新数据和老数据,循环缓冲区的长度
31、为N/2。再。再设置相应的循环缓冲区指针,如用设置相应的循环缓冲区指针,如用AR2指向指向New缓冲区中最新缓冲区中最新的数据,的数据,AR3指向指向Old缓冲区中最老的数据;缓冲区中最老的数据;(2)将系数表存放在程序缓冲区内。将系数表存放在程序缓冲区内。第8章:应用系统设计举例 FIRFIR数字滤波器数字滤波器 .mmregs.def start.bssy,1x_new:.usectDATA1,4x_old:.usectDATA2,4size .set4PA0.set0PA1.set1.dataCOEF .word 1*32768/10,2*32768/10.word 3*32768/10
32、,4*32768/10.text第8章:应用系统设计举例 FIRFIR数字滤波器数字滤波器start:SSBX FRCTSTM#x_new,AR2 ;AR2指向新缓冲区第一个单元STM#x_old+(size-1),AR3;AR3指向老缓冲区最后1个单元STM#size,BK;循环缓冲区长度STM#-1,AR0PORTR PA1,x_new;输入xnFIR:ADD*AR20%,*AR30%,A;AH=xn+xn-7(第一次)RPTZ B,#(size-1);B=0,下条指令执行size次FIRS*AR2+0%,*AR30%,COEF ;B+=AH*a0,AH=xn-1+xn-6,STHB,y;
33、保存结果第8章:应用系统设计举例 FIRFIR数字滤波器数字滤波器 PORTW y,PA0 ;输出结果;输出结果MAR*+AR2(2)%;修正;修正AR2,指向新缓冲区最老数据,指向新缓冲区最老数据MAR*AR3+%;修正;修正AR3,指向老缓冲区最老数据,指向老缓冲区最老数据MVDD*AR2,*AR3+0%;新缓冲区向老缓冲区传送一个数;新缓冲区向老缓冲区传送一个数BDFIRPORTR PA1,*AR2 ;输入新数据至新缓冲区输入新数据至新缓冲区.end第8章:应用系统设计举例 FIRFIR数字滤波器数字滤波器8.3.3 FIR滤波器应用举例设计指标:设计指标:设计一个设计一个FIR低通滤波
34、器低通滤波器 通带边界频率为通带边界频率为1500Hz,通带波纹小于,通带波纹小于1dB,阻带边界频率为阻带边界频率为2000Hz,阻带衰减大于,阻带衰减大于40dB,采样频率为采样频率为8000Hz。设计步骤设计步骤(4步步):(1)设计设计FIR滤波器滤波器利用利用MATLAB工具箱工具箱Signal中的中的fir1函数,选择函数,选择Hamming窗。窗。b=fir1(16,1500/8000*2);FIR数字滤波器系数为数字滤波器系数为b0 b16,系数对称。系数对称。将上述系数存盘,建立一个数据文件将上述系数存盘,建立一个数据文件(如如)。第8章:应用系统设计举例 FIRFIR数字滤
35、波器数字滤波器(2)建立建立DSP汇编程序的汇编程序的FIR滤波器系数文件。滤波器系数文件。上述系数必须转换成上述系数必须转换成Q15格式,并放置在格式,并放置在DSP汇编程序的汇编程序的.inc文件中,进行文件中,进行FIR滤波器的汇编程序的汇编、链接时,滤波器的汇编程序的汇编、链接时,inc文件将被自动地加入到工程中去。文件将被自动地加入到工程中去。从从MATLAB中产生的文件,通过执行转换命令,将自动变换中产生的文件,通过执行转换命令,将自动变换为滤波器系数文件。为滤波器系数文件。利用利用MATLAB中的转换命令:中的转换命令:!将产生文件。将产生文件。第8章:应用系统设计举例 FIRF
36、IR数字滤波器数字滤波器(3)产生滤波器输入信号的文件产生滤波器输入信号的文件 一个产生输入信号的一个产生输入信号的C语言程序。语言程序。这个信号是频率为这个信号是频率为1000Hz和和2500Hz的正弦波合成的波形,的正弦波合成的波形,文件名为。文件名为。该程序将产生名为的输入信号程序。该程序将产生名为的输入信号程序。(4)编写应用编写应用FIR数字滤波器的汇编程序数字滤波器的汇编程序 一个一个FIR滤波器源程序滤波器源程序 fir.asm 对应以上对应以上FIR滤波器的汇编程序的链接文件。滤波器的汇编程序的链接文件。第8章:应用系统设计举例 快速傅里叶变换快速傅里叶变换(FFT)(FFT)
37、8.4 快速傅里叶变换快速傅里叶变换(FFT)FFT:是一种高效实现离散傅氏变换的算法。是一种高效实现离散傅氏变换的算法。FFT:一个非常重要的工具经常使用,甚至成为一个非常重要的工具经常使用,甚至成为DSP运运 算能力的一个考核因素。算能力的一个考核因素。主要内容:主要内容:1 基基2按时间抽取按时间抽取FFT算法算法 2 FFT算法的算法的DSP实现实现 3 FFT算法的模拟信号产生和输入算法的模拟信号产生和输入第8章:应用系统设计举例 快速傅里叶变换快速傅里叶变换(FFT)(FFT)8.4.1 基基2按时间抽取按时间抽取FFT算法算法8点基点基2 FFT流图与蝶形运算流图与蝶形运算 第8
38、章:应用系统设计举例 快速傅里叶变换快速傅里叶变换(FFT)(FFT)第8章:应用系统设计举例 快速傅里叶变换快速傅里叶变换(FFT)(FFT)8.4.2 FFT算法的算法的DSP实现实现 一般假定输入序列是复数。一般假定输入序列是复数。当输入是实数时,利用对称性质计算当输入是实数时,利用对称性质计算DFT。原始的原始的2N个点的实输入序列组合成一个个点的实输入序列组合成一个N点的复序列点的复序列;之后对复序列进行之后对复序列进行N点的点的FFT运算运算;最后再由最后再由N点的复数输出拆散成点的复数输出拆散成2N点的复数序列。这点的复数序列。这2N点点的复数序列与原始的的复数序列与原始的2N点
39、的实数输入序列的点的实数输入序列的DFT输出一致。输出一致。使用这种方法,在组合输入和拆散输出的操作中,使用这种方法,在组合输入和拆散输出的操作中,FFT运算运算量减半。量减半。下面用这种方法来实现一个下面用这种方法来实现一个256点实数点实数FFT(2N=256)运算。运算。第8章:应用系统设计举例 快速傅里叶变换快速傅里叶变换(FFT)(FFT)1.实数实数FFT运算序列的存储分配运算序列的存储分配 程序代码安排在程序代码安排在0 x3000开始的存储器中,其中开始的存储器中,其中0 x30000 x3080存放中断向量表;存放中断向量表;FFT程序使用的正弦表、余弦表数据程序使用的正弦表
40、、余弦表数据(.data段段)安排在安排在0 xc00开开始的地方;始的地方;变量变量(.bss段定义段定义)存放在存放在0 x80开始的地址中。开始的地址中。256点实数点实数FFT程序的输入数据缓冲为程序的输入数据缓冲为0 x23000 x23ff;图图 FFT变换后功率谱的计算结果存放在变换后功率谱的计算结果存放在0 x22000 x22ff中。中。连接定位连接定位.cmd文件确定。文件确定。第8章:应用系统设计举例 快速傅里叶变换快速傅里叶变换(FFT)(FFT)2.基基2实数实数FFT运算的算法(四步)运算的算法(四步)1)输入数据的组合和位倒序输入数据的组合和位倒序组合:组合:首先
41、,原始输入的首先,原始输入的2N=256个点的实数序列个点的实数序列an,当成,当成N=128点的复数序列点的复数序列dn,dn表示复合表示复合FFT的输入。的输入。dn=rn+j in rn a2n表示实部;表示实部;in a2n1表示虚部。表示虚部。位倒序:位倒序:按位倒序的方式存储按位倒序的方式存储dn到数据处理缓冲中,是为了到数据处理缓冲中,是为了在整个运算最后的输出中得到的序列是自然顺序。在整个运算最后的输出中得到的序列是自然顺序。使用位倒序寻址方式可以大大提高程序执行的速度和使用使用位倒序寻址方式可以大大提高程序执行的速度和使用存储器的效率。图存储器的效率。图第8章:应用系统设计举
42、例 快速傅里叶变换快速傅里叶变换(FFT)(FFT)2)N点复数点复数FFT运算运算旋转因子分为正弦和余弦部分,用旋转因子分为正弦和余弦部分,用Q15格式将它们存储在两个格式将它们存储在两个分离的表中。每个表中有分离的表中。每个表中有128项,对应从项,对应从0180。把把128点的复数点的复数FFT分为七级来算,第一级是计算分为七级来算,第一级是计算2点的点的FFT蝶形结,第二级是计算蝶形结,第二级是计算4点的点的FFT蝶形结,然后是蝶形结,然后是8点、点、16点、点、128点的蝶形结计算。最后所得的结果表示为点的蝶形结计算。最后所得的结果表示为第8章:应用系统设计举例 快速傅里叶变换快速傅
43、里叶变换(FFT)(FFT)3)分离复数分离复数FFT的输出为奇部分和偶部分的输出为奇部分和偶部分分离分离FFT输出为相关的四个序列:偶实数输出为相关的四个序列:偶实数RPk、奇实数、奇实数RMk、偶虚数偶虚数IPk和奇虚数和奇虚数IMk,以便第四步形成最终结果。,以便第四步形成最终结果。RPk=RPN-k=0.5*(Rk+RN-k)RMk=-RMN-k=0.5*(Rk-RN-k)IPk=IPN-k=0.5*(Ik+IN-k)IMk=-IMN-k=0.5*(Ik-IN-k)RP0=R0 IP0=I0 RM0=IM0=RMN/2=IMN/2=0 RPN/2=RN/2 IPN/2=IN/2 图图第
44、8章:应用系统设计举例 快速傅里叶变换快速傅里叶变换(FFT)(FFT)4)产生最后的产生最后的N=256点的复数点的复数FFT结果结果 通过下面的公式由通过下面的公式由RPk、RMn、IPn和和IMn四个序列可四个序列可以计算出以计算出an的的DFT。Ak=A2N-k=ARk+j AIk=Fa(n)即是即是an的的DFT结果结果 实数实数FFT输出按照实数输出按照实数/虚数的自然顺序填满整个虚数的自然顺序填满整个4N=512个个字节的数据处理缓冲器。如图所示。字节的数据处理缓冲器。如图所示。计算所求信号的功率计算所求信号的功率由于最后所得的由于最后所得的FFT数据是一个复数,通常对所得的数据
45、是一个复数,通常对所得的FFT数据数据进行处理进行处理取其实部和虚部的平方和即求得该信号的功率。取其实部和虚部的平方和即求得该信号的功率。第8章:应用系统设计举例 快速傅里叶变换快速傅里叶变换(FFT)(FFT)8.4.3 FFT算法的模拟信号产生和输入算法的模拟信号产生和输入 在在CCS集成开发环境下利用集成开发环境下利用Simulator进行进行FFT的调试并观察的调试并观察运行结果时,需要输入一个模拟信号,该信号有两种方法产生:运行结果时,需要输入一个模拟信号,该信号有两种方法产生:第一种方法:第一种方法:是用是用C语言程序产生文件,然后,在语言程序产生文件,然后,在DSP汇编语言汇编语
46、言程序中通过程序中通过.copy汇编命令将数据文件复制到汇编程序中去。汇编命令将数据文件复制到汇编程序中去。第二种方法:第二种方法:先建立与信号对应的数据流文件,然后,输入数据先建立与信号对应的数据流文件,然后,输入数据通过通过CCS开发环境下的开发环境下的FileI/O功能完成待处理的数据的输入。功能完成待处理的数据的输入。第8章:应用系统设计举例 快速傅里叶变换快速傅里叶变换(FFT)(FFT)8.4.4 观察信号时域波形及其频谱观察信号时域波形及其频谱 第8章:应用系统设计举例语音信号采集8.5 语音信号采集语音信号采集8.5.1 语音接口芯片语音接口芯片TLC320AD50C简介简介
47、TLC320AD50C是是TI公司生产的音频接口芯片,集成了公司生产的音频接口芯片,集成了16位位A/D和和D/A转换器,可工作在主、从两种方式,由上电时转换器,可工作在主、从两种方式,由上电时M/S管脚的电管脚的电平决定。在与平决定。在与DSP的的McBSP连接时,一般连接时,一般TLC320AD50C配置为配置为主方式,而主方式,而McBSP为从方式。为从方式。支持主通信和辅助通信两种通信模式,主通信用于正常的支持主通信和辅助通信两种通信模式,主通信用于正常的ADC或或DAC的数据传输,辅助通信用于控制寄存器的读写。辅助通信的数据传输,辅助通信用于控制寄存器的读写。辅助通信模式可由硬件和软
48、件两种方式触发。模式可由硬件和软件两种方式触发。工作方式通过对其内部工作方式通过对其内部7个控制寄存器的设置来进行控制。其中个控制寄存器的设置来进行控制。其中寄存器寄存器0是无操作寄存器。寄存器是无操作寄存器。寄存器5和和6保留用于工厂测试,故只保留用于工厂测试,故只有有4个寄存器可用。表个寄存器可用。表8-1表表8-4 第8章:应用系统设计举例语音信号采集8.5.2 TLC320AD50C与与DSP的连接的连接在实际应用中,一般将在实际应用中,一般将TLC320AD50C接至接至DSP的同步串行口,的同步串行口,并将并将TLC320AD50C设置在主动工作方式,即由设置在主动工作方式,即由T
49、LC320AD50C提供帧同步信号和移位时钟。提供帧同步信号和移位时钟。第8章:应用系统设计举例语音信号采集8.5.3 语音采集和回放程序语音采集和回放程序 实现初始化实现初始化DSP后,打开后,打开McBSP串口串口;初始化初始化AD50C,然后使串口在,然后使串口在AD50C 的控制下接受数据。的控制下接受数据。主函数用主函数用C语言编写语言编写(参考参考节节),其中其中InitC5402(void)是初始化是初始化DSP,OpenMcBSP(void)是初始化串口和初始化是初始化串口和初始化AD50C,READAD50(void)用来读取数据。用来读取数据。第8章:应用系统设计举例C C
50、语言编程及应用语言编程及应用8.6 C语言编程及应用语言编程及应用8.6.1 C语言编程的基本方法语言编程的基本方法 通常通常DSP应用程序需要用应用程序需要用C语言和汇编语言的混合编程方法语言和汇编语言的混合编程方法来实现。以达到最佳的利用来实现。以达到最佳的利用DSP芯片软、硬件资源的目的。芯片软、硬件资源的目的。用用C语言和汇编语言混合编程方法主要有以下语言和汇编语言混合编程方法主要有以下3种种:(1)独立编写独立编写C程序和汇编程序,分开编译或汇编形成各自的程序和汇编程序,分开编译或汇编形成各自的目标代码模块,然后用链接器将目标代码模块,然后用链接器将C模块和汇编模块链接起来。模块和汇