




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第五章 数字信号处理应用程序设计一、FFT运算的DSP实现二、数字滤波器的DSP实现三、工程问题的DSP实现1一、FFT运算的DSP实现1、DFT与FFTDFT:离散傅立叶变换FFT:一种高效实现离散傅立叶变换的算法。 作为一个非常重要的工具经常使用,甚至成为DSP运算能力 的一个考核标准。傅立叶变换2 时域 频域 离散信号 周期谱 周期信号 离散谱 离散周期信号 离散周期谱34DFT的定义56DFT和FFT计算量对比72、N点蝶2FFTx1n = x2nx2n = x2n+1将N点的序列分为两个N/2点的序列89上式的最后一步是因为10我们已经将一个N点的DFT分解成为两个N/2点的DFT。
2、但是,X(k)有N点,但X1(k)和X2(k)都只有N/2点,因此,前面计算的只是X(k)的前一半项的结果。11对于后一半X(k),有这是因为12 这样,只要计算出(0,N/2-1)区间的X1(k)和X2(k),也就可以很方便地计算整个(0,N-1)区间的全部X(k),从而大大地节省了运算量。13将N点DFT分为两个N/2点DFT14将N/2点DFT分为两个N/4点DFT152点DFT168点蝶2FFT17按频率抽取(DIF) x1n = xn x2n = xn+N/2 n=0,1,N/2-11819DIT与DIF对比 DIT输入是混序的,频域的输出是顺序的; DIF输入是顺序的,频域的输出是
3、混序的。 DIT的复数乘法出现在加减之前; DIF的复数乘法出现在加减之后。20 21定点DSP计算1024点FFT的时间 DSP 时间(ms) TMS320C25 10.9 TMS320C6201 0.067 DSP56001 1.6522浮点DSP计算1024点FFT的时间 DSP 时间(ms) TMS320C30 3.87 TMS320C40 1.02 ADSP21060 0.46 DSP96001 0.6 ADSP21160 0.45s23顺序、混序与位倒序DIT与DIF总有一边是混序的;所有DSP都提供了位倒序(bit reverse)寻址指令; 溢出问题无论是C语言,还是DSP汇编
4、语言的FFT程序都有现成的程序可用。243、FFT运算的DSP实现主要内容:1 基二实数FFT运算的算法2 FFT运算模拟信号的产生及输入3 实序列FFT汇编源程序及链接命令文件4 观察信号时域波形及其频谱251. 基二实数FFT运算的算法该算法主要分为以下四步:第一步,输入数据的组合和位倒序把输入序列作位倒序是为了在整个运算最后的输出中得到的序列是自然顺序。第二步,N点复数FFT在DATA数据处理缓冲器里进行N点复数FFT运算。26第三步,分离复数FFT的输出为奇部分和偶部分分离FFT输出为RP、RM、IP和IM四个序列,即偶实数、奇实数、偶虚数和奇虚数四部分。第四步,产生2N点的复数FFT
5、输出序列产生2N=256个点的复数输出,它与原始的256个点的实输入序列的DFT一致。272. FFT运算模拟信号的产生及输入产生模拟输入信号可以有两种方法:第一种方法是用C语言程序产生mdata.inc文件,然后,在DSP汇编语言程序中通过.copy汇编命令将生成的数据文件mdata.inc复制到汇编程序中。第二种方法是建立与输入信号对应的数据流文件mdata.dat,具体操作步骤见教材内容。283. 实序列FFT汇编源程序及链接命令文件【例】256点实序列FFT的DSP实现。 256点实序列FFT汇编源程序如下: * *Radix-2,DIT,Real-input FFT Program
6、* * fft.asm * * .mmregs .global reset,start,sav_sin,sav_idx,sav_grp .def start,_c_int00 .data 29DATA .space 1024.copy mdata1.inc; mdata1.inc 为模拟输入信号数据,起始地址标号INPUTN.set128 ;复数点数LOGN.set7 ;蝶形级数sav_grp.usect tempv,3 ;定义组变量值sav_sin.setsav_grp+1 ;定义旋转因子表sav_idx.setsav_grp+2OUTPUT.usect OUTPUT,256 ;信号功率谱B
7、OS.usectstack,0Fh ;定义堆栈TOS.usectstack,1 .copy “twiddle1.inc” ;正弦表系数由twiddle1.inc ;文件给出,起始地址标号TWI130.copy “twiddle2.inc“ ; 余弦表系数由twiddle2.inc文件给 ;出,起始地址标号TWI2.text_c_int00b start nopnopstart:STM#TOS,SPLD#0,DPSSBXFRCT 31输入信号时域波形、频谱图及其功率谱4. 观察信号时域波形及其频谱32二、数字滤波器的DSP实现1、模拟滤波器回顾 数字信号处理主要是面向实时的密集型数据运算。而滤波
8、在数字信号处理中占有极其重要的地位,是语音处理、图像处理、模式识别、频谱分析等应用的基本处理算法。33理想低通滤波器34低通、高通、带通与带阻滤波器35高通滤波器36带通滤波器37带阻滤波器38截止频率与带宽39通带、阻带与过渡带40滚 降(过渡带)41阻带衰减42带内平坦度43巴特沃尔斯滤波器(Butterworth)4445契比协夫滤波器(Chebyshev)契比协夫多项式46契比协夫滤波器(Chebyshev)I型47契比协夫滤波器(Chebyshev)II型48椭圆滤波器49 在同样的通带平滑度、过渡带宽和阻带衰减指标下,三种滤波器所需要的阶数为:巴特沃尔什 6阶契比雪夫 4阶 椭圆
9、3阶50二阶低通滤波器51幅频特性和相频特性5253 2、数字滤波器 数字滤波又称程序滤波,是将输入信号通过一定的运算关系(程序)变为所需的输出信号,即:实现数字滤波就必须把输入输出信号关系转变成可实现的数学模型或算法。 用DSP芯片实现数字滤波具有稳定性好、精确度高、不受环境影响,以及灵活性好等突出优点。54数字滤波器的差分方程分为无限冲激响应系统(IIR)和有限冲激响应系统(FIR)。IIR系统因为与过去某些输出有关,所以网络结构有反馈支路称为递归结构,FIR系统只与激励有关没有反馈支路,称为非递归结构。55IIR滤波器的主要特点单位冲击响应有无限多项高效率(因为结构简单、系数小、乘法操作
10、较少)与模拟滤波器有对应关系可以解析控制,强制系统在指定位置为零点有极点,在设计时要考虑稳定性具有反馈,可能产生噪声、误差累积56yk = a0 xk + a1xk-1 + a2xk-2 b1yk-1 b2yk-2Y(z)=a0X(z)+a1X(z)z-1+a2X(z)z-2b1Y(z) z-1 b2Y(z) z-2Y(z)= (a0+a1z-1+a2z-2 )/(b1z-1+b2z-2)X(z)57零极点子系统交换位置(传输函数不变,但差分方程不同)58标准型二阶节59二阶节的C54实现 STM #d+5, AR3;AR3:d(n), d(n-1), d(n-2)STM #table, AR
11、4 ;AR4:coeff of IIR filter B2,B1,A2,A1,A0.* Feedback pathMAC *AR4+, *AR3-, A ;input+d(n-2)*B2MAC *AR4+, *AR3-, A ;input+d(n-2)*B2+d(n-1)*B1STH A, *AR3;d(n) = input+d(n-2)*B2+d(n-1)*B1* Forward pathMPY *AR4+, *AR3-, A ;d(n-2)*A2MAC *AR4+, *AR3, A ;d(n-2)*A2+d(n-1)*A1DELAY *AR3-;d(n-2)=d(n-1)MAC *AR4+
12、, *AR3, A ;d(n-2)*A2+d(n-1)*A1+d(n)*A0DELAY *AR3- ;d(n-1)=d(n).60级 连61多级二阶节级连成多级 IIR62并 联63IIR滤波器的设计(1)设计一个符合要求的模拟滤波器(2)从S平面映射到Z平面,得到相应的数字滤波器64冲激响应不变法 h(nts)= hak65Z平面的单位圆映射为S平面的fs/2的区间66双线性变换67有限冲击响应(FIR)滤波器= a0 + a1z-1 + + aNz-(N-1)68FIR滤波器的结构69频率响应70FIR滤波器的主要特点单位冲击响应只有有限多项可以设计成线性相位系统只在零点处有极点,因此系统
13、总是稳定的便于DSP实现并可用立即数乘加指令编程,(节约存储器) 71系统非线性相移造成输出信号失真系统相位特性决定了信号不同频率的时延72 输入波形DFT变换忽略相位信息IDFT变换输出波形忽略相位信息的后果73相位特性74要求线性相位的例子通信系统:数据通信、调制解调器希尔伯特变换器:要求输入输出信号正交。高保真音响系统:音乐的相位失真必须减到最小,尽可能逼真地重现原来的声音。理想微分器:75线性相位的FIR滤波器系统的群延时76线性相位设计当 hp=hN-p 即hp关于中点对称,且:则满足线性相位要求,群延时为:77假设在 时H() = 0,有:当H()为偶函数有:用付氏级数实现FIR滤
14、波器78截取有限项得近似H(z):其中:h(p) =79用DSP实现FIR滤波器的存储器安排80FIR滤波器编程实现RPTBD fir_filter_loop-1 STM #K_FIR_BFFR, BK ; FIR circular bffr sizeLD *INBUF_P+, A ; load the input valuefir_filter:STL A, *FIR_DATA_P+% ; replace oldest sample with ;newest sampleRPTZ A, (K_FIR_BFFR-1)MAC *FIR_DATA_P+0%, *FIR_COFF_P+0%, A ;
15、filteringSTH A, *OUTBUF_P+ ; replace the oldest bffr valuefir_filter_loop81计算16阶的FIR滤波器输出256个点.sect “fir-prog”STM #255, BRC ; Repeat 256 timesRPTBD fir_filter_loopSTM #16, BK ; FIR circular buffer sizeLD *AR7+, A ; load the input valueSTL A, *AR4+% ; replace oldest sample with; newest sampleRPTZ A,
16、#15MAC *AR4+0%, *AR3+0%, A ; filteringSTH A, *AR5+ ; replace the oldest buffer valuefir_filter_loop82C54的FIRS指令 该指令实现一个对称的FIR滤波器。累加器A的高段(bit32-16)和由pmad(程序存储器地址)寻址的pmem相乘,结果加到累加器B中。同时,存储器操作数Xmem和Ymem相加,结果左移16bits,然后装入累加器A。在下一个循环中,pmad加1。语法:FIRS Xmem,Ymem,pmad例:FIRS *AR3+,*AR4+,COEFFS 83矩形窗84Hamming窗
17、85Blackman窗86矩形窗与blackman窗的比较87 窗函数 旁瓣峰值 过渡带宽 阻带 Wn 幅度(dB) 衰减(dB)矩形窗三角窗海宁窗海明窗布兰克门窗凯撒窗-21-25-44-53-74-804 /N8 /N8 /N8 /N12 /N10 /N-13-25-31-41-57-57各种窗函数基本参数小结88数字滤波器设计软件包DFDP4/plus通过双线性变换法,由Butterworth、Chebyshev、elliptic等原型滤波器来设计IIR通过窗函数设计法设计FIR滤波器使用代码生成器(CGEN)可生成TMS320 DSP的汇编代码可生成采样信号(如矩形波、单脉冲波、三角波
18、、正余弦、高斯噪声波等)89 1FIR滤波器的基本结构 FIR滤波器的系统函数没有反馈回路,因此它是稳定系统,其单位冲激响应h(n)是一个有限长序列。FIR系统的差分方程实际上是一种乘法累加运算。3、FIR滤波器的DSP实现90FIR滤波器的结构图:由图看出,实际算法由一组基本运算单元:乘法器、加法器、延迟器组成。显然,最主要的问题是延迟环节如何实现。91 2. FIR滤波器中z-1的实现 对于N级的FIR滤波器,在数据存储器中开辟一个称为滑窗的N个单元的线性数据缓冲区,存放最新的N个输入数据样本;从最老的样本开始,每读一个样本后,将此样本向下移位,读完最后一个样本后,输入最新样本至缓冲区的顶
19、部。 用线性缓冲区实现z-1的优点是,新老数据在存储器中存放的位置直接明了。(1)用线性缓冲区法实现z-1 92N=6的线性缓冲区存储器图93C54x片内没有I/O资源,CPU通过外部译码可以寻址64K的I/O空间。有两条实现输入和输出的指令:PORTR PA, Smem ;将PA端口的内容送 ;数据存储器SmemPORTW Smem, PA ;将地址为Smem的数据 ;存储器内容送端口PA数据的输入/输出 94 使用存储器延时指令DELAY,可以将数据存储单元中的内容向较高地址的下一单元传送。实现z-1的运算指令为:DELAY Smem ;(Smem)Seme+1,数据存储器 ;单元的内容复
20、制下一高地址单元DELAY *AR2 ;AR2指向源地址,即将AR2所指单 ;元内容复制到下一高地址单元中 ;延时指令与其它指令结合 LD+DELAYLTD指令 ;单数据存储器的值装入 ;T寄存器并送下一单元延时 MAC+DELAYMACD指令 ;乘加延迟存储器的延时操作95 在数据存储器中开辟一个称为滑窗的N个单元的循环缓冲区,循环缓冲区地址首尾相邻:滑窗中存放最新的N个输入样本,每次输入新样本时,以新样本改写滑窗中最老的数据,而滑窗中的其它数据不动;利用片内循环缓冲区长度寄存器对滑窗进行间接寻址。 利用循环缓冲区实现Z-1的优点是不需要移动数据,不存在一个机器周期中要求能一次读和一次写的数
21、据存储器,因而可以将循环缓冲区定位在数据存储器的任何位置(而线性缓冲区要求定位在DARAM)。 (2)用循环缓冲区法实现z-196N=6的循环缓冲区存储器图97 3FIR滤波器的DSP实现方法 FIR滤波器的输出表达式写为 y(n)=b0 x(n)+b1x(n-1)+bn-1x(n-N+1)其结构图FIR滤波算法实际上是一种乘累加运算。它不断地从输入端读入样本值 xn,经延时(z-1)后做乘法累加,输出滤波结果yn。98例:编写N=5的y(n)计算程序。y(n)=a0*x(n)+a1*x(n-1)+a2*x(n-2)+a3*x(n-3)+a4*x(n-4), 先将系数a0a4存放在数据存储器中
22、,然后设置线性缓冲区,用以存放输入和输出数据。(1)用线性缓冲区和直接寻址方法实现FIR线性缓冲区安排:99 .title “FIR1.ASM” ;定义源程序名 .mmregs ;定义存储器映象寄存器 .def start ;定义语句标号start .bss y,1 ;为结果y预留1个单元的空间XN .usect “XN”,1 ;在自定义的未初始化段“XN”XNM1 .usect “XN”,1 ;中保留5个单元的空间XNM2 .usect “XN”,1XNM3 .usect “XN”,1 XNM4 .usect “XN”,1A0 .usect “A0”,1 ;在自定义的未初始化段“A0”A1
23、.usect “A0”,1 ;中保留5个单元的空间A2 .usect “A0”,1A3 .usect “A0”,1A4 .usect “A0”,1PA0 .set 0 ;定义PA0为输出端口PA1 .set 1 ;定义PA1为输入端口100 .datatable: .word 1*32768/10 ;假定程序空间有五个参数 .word -3*32768/10 .word 5*32768/10 .word -3*32768/10 .word 1*32768/10 .textstart: SSBX FRCT ;设置进行小数相乘 STM #A0,AR1 ;将数据空间用于放参数的首地址送AR1 RPT
24、 #4 ;重复下条指令5次传送 MVPD table,*AR1+ ;传送程序空间的系数到数据空间 LD #XN,DP ;设置数据存储器页指针的起始位置 PORTR PA1,XN ;从数据输入端口I/O输入最新数据x(n)FIR1: LD XNM4,T ;x(n-4)T101MPY A4,A ;a4*x(n-4)ALTD XNM3 ;x(n-3)T, x(n-3)x(n-4)MAC A3,A ;A+a3*x(n-3)ALTD XNM2 ;x(n-2)T, x(n-2)x(n-3)MAC A2,A ;A+a2*x(n-2)ALTD XNM1 ;x(n-1)T, x(n-1)x(n-2)MAC A1
25、,A ;A+a1*x(n-1)ALTD XN ;x(n)T, x(n)x(n-1)MAC A0,A ;A+a0*x(n)ASTH A,y ;保存y(n)的高字节PORTW y,PA0 ;输出y(n)BD FIR1 ;执行完下条指令后循环(带延迟转移)PORTR PA1,XN ;输入新的x(n).end102vectors.objfir1.obj-o fir1.out-m fir1.map-e startMEMORY PAGE 0 : EPROM: org=01OOOH len=01000H VECS: org=03F80H len=00080H PAGE 1 : SPRAM: org=0006
26、0H len=00020H DARAM: org=00080H len=01380H SECTIONS .vectors: VECS PAGE 0 .text: EPROM PAGE 0 .data: EPROM PAGE 0 .bss: SPRAM PAGE 1 .XN: DARAM align(8) PAGE 1 .A0: DARAM align(8) PAGE 1 103(2)用线性缓冲区和间接寻址方法实现FIR例:编写y(n)=a0*x(n)+a1*x(n-1)+a2*x(n-2)+a3*x(n-3)+a4*x(n-4),的计算程序,其中N=5。 将系数a0a4存放在数据存储器中,并设
27、置线性缓冲区存放输入数据。利用AR1和AR2分别作为间接寻址线性缓冲区和系数区的辅助寄存器。 104 .title “FIR2.ASM” ;定义源程序名 .mmregs ;定义存储器映象寄存器 .def start ;定义语句标号start .bss y,1 ;为结果y预留1个单元的空间x .usect “x”,5 ;在自定义的未初始化段“x”中保留5个单元的空间a .usect “a”,5 ;在自定义的未初始化段“a”中保留5个单元的空间PA0 .set 0 ;定义PA0为输出端口PA1 .set 1 ;定义PA1为输入端口 .datatable: .word 2*32768/10 ;假定程
28、序空间有五个参数 .word -3*32768/10 .word 4*32768/10 .word -3*32768/10 .word 2*32768/10105 .textstart: SSBX FRCT ;小数相乘 STM #a,AR2 ;将数据空间用于放系数的首地址送AR2 RPT #4 ;重复下条指令5次传送 MVPD table,* AR2+ ;传送程序空间的系数到数据空间 STM #x4, AR1 ;AR1指向x(n-4) STM #a4, AR2 ;AR2指向a4 STM #4, AR0 ;指针复位值4AR0 LD #x, DP ;设置数据存储器页指针的起始位置 PORTR PA
29、1,x ;从端口PA1输入最新值x(n)106FIR2: LD *AR1-, T ;x(n-4)T MPY *AR2-, A ;a4*x(n-4)A LTD *AR1- ;x(n-3)T, x(n-3)x(n-4) MAC *AR2-, A ;A+a3*x(n-3)A LTD *AR1- ;x(n-2)T, x(n-2)x(n-3) MAC *AR2-, A ;A+a2*x(n-2)A LTD *AR1- ;x(n-1)T, x(n-1)x(n-2) MAC *AR2-, A ;A+a1*x(n-1)A LTD *AR1 ;x(n)T, x(n)x(n-1) MAC *AR2+0, A ;A+
30、a0*x(n)A ,AR2复原,指向a4 STH A,y ;保存运算结果的高位字到y(n) PORTW y(n),PA0 ;将结果y(n)输出到端口PA0 BD FIR2 ;执行完下条指令后,从FIR2开始循环 PORTR PA1,*AR1+0 ;输入新值x(n), AR1复原指向x4 .end107(3)用线性缓冲区和带移位双操作数寻址方法实现FIR例:编写y(n)=a0*x(n)+a1*x(n-1)+a2*x(n-2)+a3*x(n-3)+a4*x(n-4),的计算程序,其中N=5。 系数a0a4存放在程序存储器中,输入数据存放在数据存储器的线性缓冲区中。乘法累加利用MACD指令,该指令完
31、成数据存储器单元与程序存储器单元相乘,并累加、移位的功能。 108 .title “FIR3.ASM” ;定义源程序名 .mmregs ;定义存储器映象寄存器 .def start ;定义语句标号start .bss y,1 ;为结果y预留1个单元的空间x .usect “x”,6 ;在自定义的未初始化 ;段“x”中保留6个单元PA0 .set 0 ;定义PA0为输出端口PA1 .set 1 ;定义PA1为输入端口 .data ;假定程序空间有五个参数COEF: .word 1*32768/10 ;a4 .word -4*32768/10 ;a3 .word 3*32768/10 ;a2 .w
32、ord -4*32768/10 ;a1 .word 1*32768/10 ;a0109 .textstart: SSBX FRCT ;设置小数乘法 STM #x+5, AR1 ;AR1指向x(n-4) STM #4, AR0 ;设置AR1复位值 LD #x+1, DP ;设置数据存储器页指针的起始位置 PORTR PA1, x+1 ;输入最新值x(n)FIR3: RPTZ A,#4 ;累加器A清0, 设置重复下条指令5次 MACD *AR1-, COEF, A ;x(n-4)T, A= x(n-4)*a4 +A ;(PAR)+1PAR, x(n-4)x(n-3) STH A, *AR1 ;暂存
33、结果到y(n) PORTW *AR1+, PA0 ;输出y(n)到PA0,AR1指向x(n) BD FIR3 ;执行下条指令后循环 PORTR PA1, *AR1+0 ;输入新数据到x(n), AR1指向x(n-4)110【例】用循环缓冲区和双操作数寻址方法编写实现FIR滤波的程序。1)FIR滤波器设计 设计一个FIR低通滤波器,通带边界频率为1500Hz,通带波纹小于1dB;阻带边界频率为2000Hz,阻带衰减大于40dB;采样频率为8000Hz。试用MATLAB窗函数进行FIR滤波器的设计 b=fir1(17,1500/8000*2)-设计滤波器参数 h=round(b*215) -浮点数
34、转换为定点数Q15格式(4)用循环缓冲区和双操作数寻址方法实现FIR1112)产生滤波器输入信号的文件 按照通常的程序调试方法,先用Simulator逐步调试各子程序模块,再用硬件仿真器在实际系统中与硬件仪器联调。使用CCS的Simulator进行滤波器特性测试时,需要输入时间信号x(n)。 本例设计一个采样频率Fs为8000Hz,输入信号频率为1000Hz和2500Hz的合成信号,通过设计的低通滤波器将2500Hz信号滤掉,余下1000Hz信号。1123)编写FIR数字滤波器的汇编源程序FIR数字滤波器汇编程序fir.asm如下:*一个FIR滤波器源程序fir.asm * .mmregs .
35、global start .def start,_c_int00INDEX .set 1KS .set 256 ;输入样本数据个数N .set 17 ;FIR滤波器阶数COEF_FIR .sect COEF_FIR;FIR滤波器系数113 .word 0,158,264,-290,-1406,-951,3187,9287,12272 .word 9287,3187,-951,-1406,-290,264,158,0 .dataINPUT .copy “firin.inc” ;输入数据在数据区0 x2400OUTPUT .space 1024 ;输出数据在数据区0 x2500COEFTAB .u
36、sect “FIR_COEF”,N ;自定义段,为未初始化变量DATABUF .usect “FIR_BFR”,N ;保留存储空间BOS .usect “STACK”,0FhTOS .usect “STACK”,1 114 .text ;文本段 .asg AR0,INDEX_P ;将一个字符串赋给一个符号 .asg AR4,DATA_P ;输入数据x(n)循环缓冲区指针 .asg AR5,COEF_P ;FIR系数表指针 .asg AR6,INBUF_P ;模拟输入数据指针 .asg AR7,OUTBUF_P ;FIR滤波器输出数据指针_c_int00 b start nop nopstart
37、: SSBX FRCT ;设置小数乘法 STM #COEFTAB, COEF_P ;将FIR系数从程序存储区 RPT #N-1 ;移到数据存储区 MVPD #COEF_FIR,*COEF_P+ STM #INDEX,INDEX_P115 STM #DATABUF,DATA_P ;数据循环缓冲区清零 RPTZ A,#N-1 STL A,*DATA_P+ STM #(DATABUF+N-1),DATA_P ;数据循环缓冲区指针 ;指向xn-(N-1) STM #COEFTAB,COEF_P FIR_TASK: STM #INPUT,INBUF_P STM #OUTPUT,OUTBUF_P STM
38、#KS-1,BRC ;块重复计数器116 RPTBD LOOP-1 STM#N,BK ;FIR循环缓冲区大小 LD *INBUF_P+,A ;装载输入数据FIR_FILTER: ;FIR滤波运算 STL A,*DATA_P+% ;用最新的样本值 ;替代最旧的样本值 RPTZA,N-1 MAC *DATA_P+0%,*COEF_P+0%,A ;计算 STH A,*OUTBUF_P+ LOOP: EEND B EEND .end1174)编写FIR滤波器链接命令文件对应以上汇编程序的链接命令文件fir.cmd如下:fir.obj-m fir.map-o fir.outMEMORYPAGE0: RO
39、M1(RIX) :ORIGIN=0080H,LENGTH=100HPAGE1: INTRAM1(RW) :ORIGIN=2400H,LENGTH=0200H INTRAM2(RW) :ORIGIN=2600H,LENGTH=0100H INTRAM3(RW) :ORIGIN=2700H,LENGTH=0100H B2B(RW) :ORIGIN=0070H,LENGTH=10H118SECTIONS.text :ROM1PAGE 0.data : INTRAM1 PAGE 1FIR_COEF: INTRAM2 PAGE 1FIR_BFR : INTRAM3 PAGE 1.stack : B2B
40、PAGE 1 1195)CCS集成开发环境下上机操作过程(1)在CCS上建立fir工程并运行fir.out程序。 (2)观察输入信号的波形及频谱。(3)观察输出信号的波形及频谱。120 Graph 属性设置窗口121 输入信号的时域波形 输入信号的频谱图122 滤波器输出信号时域波形 滤波器输出信号频谱图123 4.系数对称FIR滤波器设计 系数对称的FIR滤波器具有线性相位特性,这种滤波器是用得最多的FIR滤波器,特别是对相位失真要求很高的场合。 如果FIR滤波器的h(n)是实数,且满足偶对称h(n)=h(N-1-n)或奇对称h(n)=-h(N-1-n)的条件,则滤波器具有线性相位特性。 一
41、个对称FIR滤波器满足h(n)=h(N-1-n)。 124例如,N=8的FIR滤波器,其输出方程为:Y(n)=h0 x(n)+h1x(n-1)+h2x(n-2)+h3x(n-3)+h3x(n-4) +h2x(n-5)+h1x(n-6)+h0 x(n-7) 总共有8次乘法和7次加法。如果利用对称性,可将其改写成: Y(n)=h0 x(n)+x(n-7)+h1x(n-1)+x(n-6)+h2x(n-2) +x(n-5)+h3x(n-3)+x(n-4) 变成4次乘法和7次加法,乘法运算的次数少了一半。这是对称FIR的一个优点。 125 对称FIR滤波器的实现可按如下步骤进行:(1)将数据存储器分为新
42、旧两个循环缓冲区,每个循环缓冲区的长度为N/2,New循环缓冲区中存放N/2=4个新数据;Old循环缓冲区中存放N/2=4个老数据。126(2)设置循环缓冲区指针,以AR2指向New循环缓冲区中最新数据;以AR3指向Old循环缓冲区中最老数据。(3)在程序存储器中设置系数表。(4)(AR2)+(AR3)AH(累加器A的高位),AR2-1AR2,AR3-1AR3。(5)将累加器B清0,重复执行4次(i=0,1,2,3)下面的运算: (AH)*系数hi+(B)B,系数指针(PAR)加1, (AR2)+(AR3)AH,AR2和AR3减。127(6)保存和输出结果(结果在BH中)。(7)修正数据指针,
43、让AR2和AR3分别指向New循环缓冲区最新的数据和Old循环缓冲区中最老的数据。(8)用New循环缓冲区中最老的数据替代Old循环缓冲区中最老的数据。Old循环缓冲区指针减1。(9)输入一个新数据替代New循环缓冲区中最老的数据。 重复执行(4)(9)步。128 C54x的有限冲激响应滤波器指令FIRS为: FIRS Xmem,Ymem,Pmad该指令执行 PmadPAR(程序存储器地址寄存器) 当(RC)!= 0 (B)+(A(3216)(由PAR寻址Pmem)B (Xmem)+(Ymem)16A (PAR)+1PAR (RC)-1RC FIRS指令在同一个机器周期内,通过C和D总线读2次
44、数据存储器,同时通过P总线读一个系数。129例 设计对称FIR滤波器(N=8)。 .title “FIR5.ASM” ;给汇编程序取名 .mmregs ;定义存储器映象寄存器 .def start ;定义标号start的起始位置 .bss y,1 ;为未初始化变量y保留空间x_new .usect “DATA1”,4 ;自定义4个单元的未初始化段DTAT1x_old .usect “DATA2”,4 ;自定义4个单元的未初始化段DATA2Size .set 4 ;定义符号size=4PA0 .set 0 ;设置数据输出端口I/O,PA0=0PA1 .set 1 ;设置数据输入端口I/O,PA1
45、=1 .dataCOEF .word 1*32768/10,2*32768/10 ;系数对称,只需 .word 3*32768/10,4*32768/10 ;给出N/2=4个系数130 .textstart: LD #y, DP ;设置数据存储器页指针的起始位置 SSBX FRCT ;小数乘法 STM #x_new, AR2 ;AR2指向新缓冲区第1个单元 STM #x_old+(size-1), AR3 ;AR3指向老缓冲区最后1个单元 STM #size, BK ;设置循环缓冲区长度BK =size STM #-1, AR0 ;循环控制增量AR0=-1 PORTR PA1, #x_new
46、;从I/O输入端口PA1 ;输入数据到x(n)131FIR5: ADD *AR2+0%,*AR3+0%,A ;AH=x(n)+ x(n-7) ;(第一次) RPTZ B, #(size-1) ;RC=#size-1+1,B=0 FIRS *AR2+0%,*AR3+0%, COEF ;B+=AH*h0, ;AH=x(n-1)+x(n-6) STH B, y ;保存结果到y PORTW y, PA0 ;输出结果到PA0 MAR *+AR2(2)% ;修正AR2,指向新缓 ; 冲区最老的数据 MAR *AR3+% ;修正AR3,指向老缓 ;冲区最老的数据 MVDD *AR2, *AR3+0% ; 新
47、缓冲区向老缓冲区传送一个数 ; 用新缓冲区最老的数据覆盖旧缓冲区 ; 最老的数据 BD FIR5 ;执行完下条指令后转移FIR5并循环 PORTR PA1, *AR2 ; 输入新数据至新缓冲区 .end1325、IIR滤波器的DSP实现 1IIR滤波器的基本概念 N阶无限冲激响应(IIR)滤波器的脉冲传递函数表达式为:其差分方程表达式可写为:133Y(n)由两部分构成:第一部分 是一个对x(n)的M节延时链结构,每节延时抽头后加权相加,是一个横向结构网络;第二部分 也是一个N节延时链的横向结构网络,不过它是对y(n)的延时,因此是个反馈网络。IIR滤波器的脉冲传递在Z平面上有极点存在,其单位冲
48、激响应是无限长序列。134 IIR滤波器与FIR滤波器的一个重要区别是,IIR可以用较少阶数获得很高的选择特性,所用存储单元少,运算次数少,具有经济、高效的特点。但是,在有限精度的运算中,可能出现不稳定现象。而且,选择性越好,相位的非线性越严重,而FIR滤波器可以得到严格的线性相位。 因此,在相位要求不很敏感的场合,如语言通信等,选用IIR滤波器较为合适;而对于图像信号处理、数据传输等以波形携带信息的系统,对线性相位要求较高,在条件许可的情况下,采用系数对称FIR滤波器较好。135直接形式的二阶IIR数字滤波器 对于直接形式的二阶IIR数字滤波器,其结构如图所示: 2二阶IIR滤波器的实现方法
49、 136存放输入、输出变量和滤波器 系数的缓冲区编程时,将变量和系数都存放在DARAM中,并采用循环缓冲区方式寻址,共需开辟4个循环缓冲区,用来存放变量和系数。这4个循环缓冲区的结构如图所示:137【例】设计一个三阶的切比雪夫型带通数字滤波器,其采样频率Fs=16kHz,其通频带3.2kHzf4.8kHz,内损耗不大于1dB;f5.6kHz为阻带,其衰减大于20dB。(1)IIR滤波器的设计利用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
50、(n,rp,wn) 138设计结果为: 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.539758139(2)产生滤波器输入信号的文件使用CCS的Simulator进行滤波器特性的测试时,需要输入时间信号x(n)。 #include #include void main() int i; double f256; FILE *fp; if(fp=fopen(
51、iirin.inc,wt)=NULL) printf(cant open file! n); return; 140fprintf(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 1149 3高阶IIR滤波器的实现 一个高阶IIR滤波器可以分解成若干个二阶基本节相级联。由于调整每个二阶基本节的系数,只涉及到这个二阶节的一对极点和零点,不影响其他零、极点,因此便于调整系统的性能。 此
52、外,由于字长有限,每个二阶基本节运算后都会带来一定的误差,合理安排各二阶基本节的前后次序,将使系统的精度得到优化。150对高阶IIR滤波器的几点特殊处理 当出现一个或一个以上系数。此时,既可以用最大的系数来定标,即用最大的系数去除所有的系数,也可以将此的系数分解成两个的系数进行运算和相加,例如B0=1.2,则:X(n)*B0=x(n)*(B0/2)+x(n)*(B0/2)=0.6*x(n)+0.6*x(n)这样,将使所有的系数保持精度,而仅仅多开销一个机器周期。(1)系数时的定标方法151(2)对输入数据定标 一般地,从外设口输入一个数据加载到累加器A,可用以下指令: PORTR 0001h,
53、 Xin LD Xin, 16,A如果运算过程中可能出现的输出值,可在输入数据时将其缩小若干倍,如: PORTR 0001h, Xin LD Xin, 16-3,A将输入数据除以8,将使输出值小于。上面用多种不同的方法进行了滤波器的设计,在实现滤波器功能的前提下,程序的繁简和对存储器的使用情况是不同的,应用中应根据具体情况进行选择。 152三、工程问题的DSP实现例:DTMF的编解码用DSP实现双音多频(DTMF)的拨号产生和解码。DTMF(Dual-Tone Multiple Frequency)153实现步骤对象分析算法设计DSP选择系统设计系统实现系统调试154对象分析 对所要开发的系统
54、的功能、性能要有深入的了解和分析,尤其对技术指标,要作透彻的理解和把握。155 DTMF用一对频率(行频/列频)来表示一个符号(电话键盘上的09,AD,*,#,共16个符号) 一次按键的时间是100ms,其中,频率对存在的时间是45ms,不允许超过55ms,其余的时间是静音。156 157CCITT关于DTMF的指标Low band: 697、770、852、941(Hz)RBW3.5%High band: 1209、1336、1477、1633(Hz) RBW4dB REV 8dBDYN RANGE: 25dBGUARD TIME: MIN TONE TIME 45msSNR:NOISE -
55、24dBV158算法设计 算法设计是非常关键的步骤,因为算法决定运算量和存储器的大小,从而决定DSP的选择,进而决定系统的设计,包括硬件和软件的设计。159DTMF拨号的产生 基于DSP的DTMF的音频信号发生器,使用两个二阶的数字正弦波振荡器,一个产生行频,一个产生列频。160 161DTMF发生器的系数和初始条件162DTMF发生器的信号流程163音频检测Goertzel算法是DTMF解码器的基础,实际上是一个两极点的IIR滤波器。DFT或FFT需要在处理之前准备好一个数据块,而Goertzel算法是一个递归的结构,就每个输入的样本进行计算。164Goertzel算法的特点Goertzel
56、算法的IIR滤波器结构涉及两个复共轭极点,但对于实际的DTMF音频检测,只要有幅度信息就够了(实际上使用幅度平方),从而简化为只需要一个实系数参与计算。 Goertzel算法要比FFT快得多,因为只需要提供8个行/列频和它们的二次谐波的信息(二次谐波的信息用于将DTMF与话音或音乐区别开来)。165Goertzel算法166行频/列频及相应的系数167有效性检查信号强度 DTMF行频、列频信号之和的强度是否达到一定的门限值168扭曲度 标准扭曲: 行频峰值 列频峰值 4dB 反向扭曲: 列频峰值 行频峰值 8dB169二次谐波强度 以便将DTMF信号与其他语音信号、音乐信号等区别开来。170数
57、字信息的稳定性 如果一个数字成功地检测到两次,认为该数字是稳定的171数字信息的有效性 检测到的数字前面必须是静音符时,该数字才是有效的,以便将各次击键区别开来172 173编码器对速度和存储器的要求174175DSP芯片选择算法对DSP芯片计算速度的要求系统的管理(如任务管理、进程管理、存储器管理、I/O管理等)对DSP的要求片内存储器和片外存储器的要求(包括容量的要求和速度的要求)176对外设(如串口、并口、定时器、总线宽度、等待状态等)的要求DSP封装对印制板的设计影响甚大开发环境技术支持性能价格比177DSP芯片的速度178DSP的片内存储器179DSP的外设180BGA(BALL G
58、RID ARRAY)181PLCC(PLASTIC J-LEADED CHIP CARRIER)182PQFP(PLASTIC QUAD FLAT PACK)183PDLP(PLASTIC DUAL-IN-LINE PACKAGE)184LCCC(LEADLESS CERAMIC CHIP CARRIER)185系统设计硬件系统设计软件系统设计工作软件测试软件功能框图(指标分配)电原理图印制板(数字与模拟电路,接地,电源,多层板)186系统的实现从C程序作起 用C Compiler将C源程序编译成为汇编语言源程序,然后汇编、连接后输出可执行代码;也可以使用shell程序,将编译、汇编、连接一齐
59、完成。187 188源程序分析器 输入是C源文件。读入源语句,检查语法和语意错误,写出一个中间文件(.if)189优化器 可选择项。其输入是分析器产生的中间文件(.if)。当运行优化器时,用户可以选择优化的层次。产生一个与中间文件格式相同的高效率版本。190代码生成器 输入是分析器或优化器产生的中间文件(.if或.opt文件),产生一个汇编语言源文件191内部列表公用程序 输入是C编译器产生的汇编语言源程序和C源程序。产生的是按C文件的语句展开的汇编语言源文件192汇编器和连接器汇编器的输入是代码生成器产生的汇编语言文件,产生COFF目标文件 连接器的输入是汇编器产生的COFF目标文件,产生可
60、执行的目标文件193运行C编译器 cl500 -options filenames -z link_options object filescl500调用编译器和汇编器的命令。-options 影响编译器处理输入文件的途径filenames 一个或多个C源文件、汇编语言源文件,或目标文件。-z 运行连接器的选择项。link_options 影响连接器处理输入文件的途径object files 命名编译器产生的目标文件194cl500 -q symtab file seek.asm z 编译文件symtab和file,汇编第三个文件seek.asm,连接这三个文件,并使用quiet选择项,抑制输
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 职业危害知识培训课件
- 美妆知识类培训课件内容
- 儿童学习摄影课程
- 2024年档案管理员考试复习重点试题
- 掌握园艺师复习策略试题及答案
- 糖尿病知识培训课件文档
- 二零二五版酒店物业管理合同书
- 二零二五研发人员劳动合同模板
- 水电承包合同书
- 2024年辅导员考试常识性试题
- 2024年新疆中考语文试卷真题(含答案)
- CHT 1027-2012 数字正射影像图质量检验技术规程(正式版)
- 围挡施工组织设计方案
- 2024年河南应用技术职业学院单招职业适应性测试题库必考题
- 专用车辆安全管理制度罐式容器
- 2024年河南师范大学附中中招二模英语试卷含答案
- 第22课 现代科技革命和产业发展(教学设计)-【中职专用】《世界历史》同步课堂(高教版2023•基础模块)
- 妇科分级护理标准
- 山东省青岛市城阳区2023-2024学年八年级下学期期中考试语文试题
- 武汉大学介绍PPT
- 广西桂林市国龙外国语学校2022-2023学年下学期期中考试八年级数学试题+
评论
0/150
提交评论