版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章数字信号处理应用程序设计一、FFT运算的DSP实现二、数字滤波器的DSP实现三、工程问题的DSP实现1一、FFT运算的DSP实现1、DFT与FFTDFT:离散傅立叶变换FFT:一种高效实现离散傅立叶变换的算法。
作为一个非常重要的工具经常使用,甚至成为DSP运算能力的一个考核标准。傅立叶变换2
时域——频域
离散信号周期谱周期信号离散谱离散周期信号离散周期谱34DFT的定义56DFT和FFT计算量对比72、N点蝶2FFTx1[n]=x[2n]x2[n]=x[2n+1]将N点的序列分为两个N/2点的序列89上式的最后一步是因为10我们已经经将一个个N点的的DFT分解成成为两个个N/2点的DFT。。但是,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))x1[n]=x[n]x2[n]=x[n+N/2]n=0,,1,………,N/2-11819DIT与与DIF对比DIT输输入是混混序的,,频域的的输出是是顺序的的;DIF输输入是顺顺序的,,频域的的输出是是混序的的。DIT的的复数乘乘法出现现在加减减之前;;DIF的的复数乘乘法出现现在加减减之后。。2021定点DSP计算算1024点FFT的的时间DSP时时间间(ms)TMS320C2510.9TMS320C62010.067DSP560011.6522浮点DSP计算算1024点FFT的的时间DSP时时间(ms)TMS320C303.87TMS320C401.02ADSP210600.46DSP960010.6ADSP211600.45s23顺序、混混序与位位倒序DIT与与DIF总有一一边是混混序的;;所有DSP都提提供了位位倒序((bitreverse))寻址指指令;溢出问题无论是C语言言,还是DSP汇编语言言的FFT程程序都有现成成的程序可用用。243、FFT运算算的DSP实现现主要内容容:1基基二实数数FFT运算的的算法2FFT运运算模拟拟信号的的产生及及输入3实实序列FFT汇汇编源程程序及链链接命令令文件4观观察信号号时域波波形及其其频谱251.基基二实实数FFT运算算的算法法该算法主主要分为为以下四四步:第一步,,输入数数据的组组合和位位倒序把输入序序列作位位倒序是是为了在在整个运运算最后后的输出出中得到到的序列列是自然然顺序。。第二步,,N点复复数FFT在DATA数据据处理缓缓冲器里里进行N点复数数FFT运算。。26第三步,,分离复复数FFT的输输出为奇奇部分和和偶部分分分离FFT输出出为RP、RM、IP和IM四个序序列,即即偶实数数、奇实实数、偶偶虚数和和奇虚数数四部分分。第四步,,产生2N点的的复数FFT输输出序列列产生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-inputFFTProgram**fft.asm**************************************.mmregs.globalreset,start,sav_sin,sav_idx,sav_grp.defstart,_c_int00.data29DATA.space1024.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;信信号功率率谱BOS.usect"stack",0Fh;定义堆堆栈TOS.usect"stack",1.copy““twiddle1.inc”;正弦表表系数由由twiddle1.inc;文件给给出,起起始地址址标号TWI130.copy““twiddle2.inc“;余余弦表系系数由twiddle2.inc文文件给;出,起起始地址址标号TWI2.text_c_int00bstartnopnopstart:STM#TOS,SPLD#0,DPSSBXFRCT……………31输入信信号时时域波波形、、频谱谱图及及其功功率谱谱4.观观察信信号时时域波波形及及其频频谱32二、数数字滤滤波器器的DSP实现现1、模模拟滤滤波器器回顾顾数字信信号处处理主主要是是面向向实时时的密密集型型数据据运算算。而而滤波波在数数字信信号处处理中中占有有极其其重要要的地地位,,是语语音处处理、、图像像处理理、模模式识识别、、频谱谱分析析等应应用的的基本本处理理算法法。33理想低低通滤滤波器器34低通、、高通通、带带通与与带阻阻滤波波器35高通滤滤波器器36带通滤滤波器器37带阻滤滤波器器38截止频频率与与带宽宽39通带、、阻带带与过过渡带带40滚降降((过渡渡带))41阻带衰衰减42带内平平坦度度43巴特沃沃尔斯斯滤波波器((Butterworth)4445契比协协夫滤滤波器器(Chebyshev)契比协协夫多多项式式46契比协协夫滤滤波器器(Chebyshev)I型47契比协协夫滤滤波器器(Chebyshev)II型型48椭圆滤滤波器器49在同样样的通通带平平滑度度、过过渡带带宽和和阻带带衰减减指标标下,,三种种滤波波器所所需要要的阶阶数为为:巴特沃沃尔什什6阶契比雪雪夫4阶阶椭圆3阶50二阶低通滤滤波器51幅频特性和和相频特性性52532、数字滤波波器数字滤波又称称程序滤波,,是将输入信信号通过一定定的运算关系系(程序)变变为所需的输输出信号,即即:实现数字字滤波就必须须把输入输出出信号关系转转变成可实现现的数学模型型或算法。用DSP芯片片实现数字滤滤波具有稳定定性好、精确确度高、不受受环境影响,,以及灵活性性好等突出优优点。54数字滤波器的的差分方程分为无限冲激激响应系统(IIR)和和有限冲激响响应系统(FIR)。IIR系统因因为与过去某某些输出有关关,所以网络络结构有反馈馈支路称为递递归结构,FIR系统只只与激励有关关没有反馈支支路,称为非非递归结构。。55IIR滤波器器的主要特点点单位冲击响应应有无限多项项高效率(因为为结构简单、、系数小、乘乘法操作较少少)与模拟滤波器器有对应关系系可以解析控制制,强制系统统在指定位置置为零点有极点,在设设计时要考虑虑稳定性具有反馈,可可能产生噪声声、误差累积积56y[k]=a0x[k]+a1x[k-1]+a2x[k-2]–b1y[k-1]–b2y[k-2]Y(z)=a0X(z)+a1X(z)z-1+a2X(z)z-2–b1Y(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,AR4;AR4:coeffofIIRfilterB2,B1,A2,A1,A0……….*FeedbackpathMAC*AR4+,*AR3-,A ;input+d(n-2)*B2MAC*AR4+,*AR3-,A ;input+d(n-2)*B2+d(n-1)*B1STHA,*AR3;d(n)=input+d(n-2)*B2+d(n-1)*B1*ForwardpathMPY*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+,*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)=ha[k]65Z平面的单位位圆映射为S平面的±fs/2的区区间66双线性变换67有限冲击响应应(FIR))滤波器=a0+a1z-1+…+aNz-(N-1)68FIR滤波器器的结构69频率率响响应应70FIR滤滤波波器器的的主主要要特特点点单位位冲冲击击响响应应只只有有有有限限多多项项可以以设设计计成成线线性性相相位位系系统统只在在零零点点处处有有极极点点,,因因此此系系统统总总是是稳稳定定的的便于于DSP实实现现并并可可用用立立即即数数乘乘加加指指令令编编程程,,((节节约约存存储储器器))71系统统非非线线性性相相移移造造成成输输出出信信号号失失真真系统统相相位位特特性性决决定定了了信信号号不不同同频频率率的的时时延延72输入波形DFT变换忽略相位信息IDFT变换输出波形忽略相相位信信息的的后果果73相位特特性74要求线线性相相位的的例子子通信系系统::数据据通信信、调调制解解调器器希尔伯伯特变变换器器:要要求输输入输输出信信号正正交。。高保真真音响响系统统:音音乐的的相位位失真真必须须减到到最小小,尽尽可能能逼真真地重重现原原来的的声音音。理想微分器器:……75线性相位的的FIR滤滤波器系统的群延延时76线性相位设设计当h[p]=h[N-p]即h[p]关于中点点对称,且且:则满足线性性相位要求求,群延时时为:77假设在时H()=0,有:当H()为偶函数数有:用付氏级数数实现FIR滤波器器78截取有限项项得近似H(z)::其中:h(p)=79用DSP实实现FIR滤波器的的存储器安安排80FIR滤波器编程程实现RPTBDfir_filter_loop-1STM#K_FIR_BFFR,BK;FIRcircularbffrsizeLD*INBUF_P+,A;loadtheinputvaluefir_filter:STLA,*FIR_DATA_P+%;replaceoldestsamplewith;;newestsampleRPTZA,(K_FIR_BFFR-1)MAC*FIR_DATA_P+0%,*FIR_COFF_P+0%,A;;filteringSTHA,*OUTBUF_P+;replacetheoldestbffrvaluefir_filter_loop81计算16阶的FIR滤滤波器输输出256个点点.sect““fir-prog”STM#255,BRC;Repeat256timesRPTBDfir_filter_loopSTM#16,BK;FIRcircularbuffersizeLD*AR7+,A;loadtheinputvalueSTLA,*AR4+%;replaceoldestsamplewith;newestsampleRPTZA,#15MAC*AR4+0%,*AR3+0%,A;filteringSTHA,*AR5+;replacetheoldestbuffervaluefir_filter_loop82C54的FIRS指令令该指令实实现一个个对称的的FIR滤波器器。累加加器A的的高段((bit32-16))和由pmad(程序序存储器器地址))寻址的的pmem相乘乘,结果果加到累累加器B中。同同时,存存储器操操作数Xmem和Ymem相相加,结结果左移移16bits,然后后装入累累加器A。在下下一个循循环中,,pmad加1。语法::FIRSXmem,Ymem,,pmad例:FIRS*AR3+,*AR4+,COEFFS83矩形窗窗84Hamming窗85Blackman窗窗86矩形窗窗与blackman窗窗的比比较87窗函数旁瓣峰值过渡带宽阻带W[n]幅度(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))可生生成TMS320DSP的的汇编编代码码可生成成采样样信号号(如如矩形形波、、单脉脉冲波波、三三角波波、正正余弦弦、高高斯噪噪声波波等))891.FIR滤波波器的的基本本结构构FIR滤波波器的的系统统函数数没有反反馈回回路,,因此此它是是稳定定系统统,其其单位位冲激激响应应h(n)是一个个有限限长序序列。。FIR系统统的差差分方方程实际上上是一一种乘乘法累累加运运算。。3、FIR滤波波器的的DSP实实现90FIR滤波波器的的结构构图::由图看看出,,实际际算法法由一一组基基本运运算单单元::乘法法器、、加法法器、、延迟迟器组组成。。显然然,最最主要要的问问题是是延迟迟环节节如何何实现现。912.FIR滤滤波波器器中中z-1的实实现现对于于N级级的的FIR滤滤波波器器,,在在数数据据存存储储器器中中开开辟辟一一个个称称为为滑滑窗窗的的N个个单单元元的的线性性数数据据缓缓冲冲区区,存存放放最最新新的的N个个输输入入数数据据样样本本;;从从最最老老的的样样本本开开始始,,每每读读一一个个样样本本后后,,将将此此样样本本向向下下移移位位,,读读完完最最后后一一个个样样本本后后,,输输入入最最新新样样本本至至缓缓冲冲区区的的顶顶部部。。用线性缓冲区区实现z-1的优点是,新新老数据在存存储器中存放放的位置直接接明了。(1)用线性性缓冲区法实实现z-192N=6的线性性缓冲区存储储器图93C54x片内内没有I/O资源,CPU通过外部部译码可以寻寻址64K的的I/O空间间。有两条实现输输入和输出的的指令:PORTRPA,Smem;;将PA端口口的内容送;数据存储器器SmemPORTWSmem,PA;;将地址为Smem的数数据;存储器内容容送端口PA数据的输入/输出94使用存储器延延时指令DELAY,可可以将数据存存储单元中的的内容向较高高地址的下一一单元传送。。实现z-1的运算指令为为:DELAYSmem;(Smem)→Seme+1,数据据存储器;单元的内容容复制下一高高地址单元DELAY*AR2;AR2指向源源地址,即将将AR2所指指单;元内容复制制到下一高地地址单元中;延时指令与与其它指令结结合LD+DELAY→LTD指令;;单数据存存储器的值装装入;T寄存器并并送下一单元元延时MAC+DELAY→MACD指令;;乘加延延迟存储器的延时时操作95在数据存储器器中开辟一个个称为滑窗的的N个单元的的循环缓冲区,循环缓冲区地地址首尾相邻邻:滑窗中存放放最新的N个个输入样本,,每次输入新新样本时,以以新样本改写写滑窗中最老老的数据,而而滑窗中的其其它数据不动动;利用片内内循环缓冲区区长度寄存器对滑窗进行间间接寻址。利用循环缓冲冲区实现Z-1的优点是不需需要移动数据据,不存在一一个机器周期期中要求能一一次读和一次次写的数据存存储器,因而而可以将循环环缓冲区定位位在数据存储储器的任何位位置(而线性性缓冲区要求求定位在DARAM)。。(2)用循环环缓冲区法实实现z-196N=6的循环环缓冲区存储储器图973.FIR滤波器的DSP实现方法法FIR滤波器器的输出表达达式写为y(n)=b0x(n)+b1x(n-1)+……+bn-1x(n-N+1)其结构图FIR滤波算算法实际上是是一种乘累加加运算。它不不断地从输入入端读入样本本值x[n],经延时(z-1)后做乘法累累加,输出滤滤波结果y[n]。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),先将系数a0~a4存放在数据存存储器中,然然后设置线性性缓冲区,用用以存放输入入和输出数据据。(1)用线性性缓冲区和直直接寻址方法法实现FIR线性缓冲区安安排:99.title“FIR1.ASM”;定定义源程序名名.mmregs;;定定义存储器映映象寄存器.defstart;;定定义语句标号号start.bssy,1;;为为结果y预留留1个单元的的空间XN.usect“XN””,1;;在在自定义的未未初始化段““XN”XNM1.usect“XN””,1;;中中保留5个单单元的空间XNM2.usect“XN””,1XNM3.usect“XN””,1XNM4.usect“XN””,1A0.usect“A0””,1;;在在自定义的未未初始化段““A0”A1.usect“A0””,1;;中中保留5个单单元的空间A2.usect“A0””,1A3.usect“A0””,1A4.usect“A0””,1PA0.set0;;定定义PA0为为输出端口PA1.set1;;定定义PA1为为输入端口100.datatable:.word1*32768/10;;假假定程序空间间有五个参数数.word-3*32768/10.word5*32768/10.word-3*32768/10.word1*32768/10.textstart:SSBXFRCT;;设置进行行小数相乘STM#A0,AR1;;将数据据空间用于放放参数的首地地址送AR1RPT#4;;重重复下条指令令5次传送MVPDtable,*AR1+;传送送程序空间的的系数到数据据空间LD#XN,DP;;设置数据存存储器页指针针的起始位置置PORTRPA1,@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,A;;A+a1*x(n-1)→ALTD@XN;;x(n)→T,x(n)→x(n-1)MAC@A0,A;;A+a0*x(n)→→ASTHA,@y;;保存y(n)的高字节节PORTW@y,PA0;;输出y(n)BDFIR1;;执行完完下条指令后后循环(带延延迟转移)PORTRPA1,@XN;;输入新的的x(n).end102vectors.objfir1.obj-ofir1.out-mfir1.map-estartMEMORY{PAGE0:EPROM:org=01OOOHlen=01000HVECS:org=03F80Hlen=00080HPAGE1:SPRAM:org=00060Hlen=00020HDARAM:org=00080Hlen=01380H}SECTIONS{.vectors:>VECSPAGE0.text:>EPROMPAGE0.data:>EPROMPAGE0.bss:>SPRAMPAGE1.XN:>DARAMalign(8){}PAGE1.A0:>DARAMalign(8){}PAGE1}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。将系数a0~a4存放在数据存存储器中,并并设置线性缓缓冲区存放输输入数据。利利用AR1和和AR2分别别作为间接寻寻址线性缓冲冲区和系数区区的辅助寄存存器。104.title“FIR2.ASM”;;定义源程序序名.mmregs;;定义存储器器映象寄存器器.defstart;;定义语句标标号start.bssy,1;;为结果y预预留1个单元元的空间x.usect““x”,5;在自自定义的未初初始化段“x”中保留5个单元的空空间a.usect““a”,5;在自自定义的未初初始化段“a”中保留5个单元的空空间PA0.set0;;定定义PA0为为输出端口PA1.set1;;定定义PA1为为输入端口.datatable:.word2*32768/10;假假定程序空间间有五个参数数.word-3*32768/10.word4*32768/10.word-3*32768/10.word2*32768/10105.textstart:SSBXFRCT;;小数相乘STM#a,AR2;;将数数据空间用于于放系数的首首地址送AR2RPT#4;;重重复下条指令令5次传送MVPDtable,*AR2+;;传送程程序空间的系系数到数据空空间STM#x4,AR1;;AR1指向向x(n-4)STM#a4,AR2;;AR2指向向a4STM#4,AR0;;指针针复位值4→→AR0LD#x,DP;;设置数据据存储器页指指针的起始位位置PORTRPA1,@x;;从端端口PA1输输入最新值x(n)106FIR2:LD*AR1-,T;;x(n-4)→→TMPY*AR2-,A;;a4*x(n-4)→ALTD*AR1-;;x(n-3)→T,x(n-3)→x(n-4)MAC*AR2-,A;;A+a3*x(n-3)→ALTD*AR1-;;x(n-2)→T,x(n-2)→x(n-3)MAC*AR2-,A;;A+a2*x(n-2)→ALTD*AR1-;;x(n-1)→→T,x(n-1)→→x(n-2)MAC*AR2-,A;;A+a1*x(n-1)→ALTD*AR1;;x(n)→T,x(n)→x(n-1)MAC*AR2+0,A;;A+a0*x(n)→→A,AR2复原,指指向a4STHA,@y;;保保存运算结果果的高位字到到y(n)PORTW@y(n),PA0;;将结果y(n)输出到到端口PA0BDFIR2;;执行完下下条指令后,,从FIR2开始循环PORTRPA1,*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。系数a0~a4存放在程序存存储器中,输输入数据存放放在数据存储储器的线性缓缓冲区中。乘乘法累加利用用MACD指指令,该指令令完成数据存存储器单元与与程序存储器器单元相乘,,并累加、移移位的功能。。108.title“FIR3.ASM”;;定定义源程序名名.mmregs;;定义存储储器映象寄存存器.defstart;;定义义语句标号start.bssy,1;;为为结果y预留留1个单元的的空间x.usect“x”,6;;在自定义义的未初始化化;段“x”中中保留6个单单元PA0.set0;;定义PA0为输出出端口PA1.set1;;定义PA1为输入入端口.data;;假定程序序空间有五个个参数COEF:.word1*32768/10;;a4.word-4*32768/10;;a3.word3*32768/10;;a2.word-4*32768/10;;a1.word1*32768/10;;a0109.textstart:SSBXFRCT;;设设置小小数乘乘法STM#x+5,AR1;;AR1指向向x(n-4)STM#4,AR0;;设设置AR1复位位值LD#x+1,DP;;设置置数据据存储储器页页指针针的起起始位位置PORTRPA1,@x+1;;输入入最新新值x(n)FIR3::RPTZA,#4;;累累加器器A清清0,设设置重重复下下条指指令5次MACD*AR1-,COEF,A;;x(n-4)→T,A=x(n-4)*a4+A;(PAR)+1→→PAR,x(n-4)→→x(n-3)STHA,*AR1;;暂存存结果果到y(n)PORTW*AR1+,PA0;;输输出y(n)到到PA0,,AR1指指向x(n)BDFIR3;;执行行下条条指令令后循循环PORTRPA1,*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*2^15)-浮点点数转转换为为定点点数Q15格式式(4)用循循环缓缓冲区区和双双操作作数寻寻址方方法实实现FIR1112)产产生滤滤波器器输入入信号号的文文件按照通通常的的程序序调试试方法法,先先用Simulator逐步步调试试各子子程序序模块块,再再用硬硬件仿仿真器器在实实际系系统中中与硬硬件仪仪器联联调。。使用用CCS的的Simulator进进行滤滤波器器特性性测试试时,,需要要输入入时间间信号号x(n)。本例设计一一个采样频频率Fs为为8000Hz,输输入信号频频率为1000Hz和2500Hz的的合成信号号,通过设设计的低通通滤波器将将2500Hz信号号滤掉,余余下1000Hz信信号。1123)编写写FIR数字滤滤波器的的汇编源源程序FIR数数字滤波波器汇编编程序fir.asm如下::******一一个FIR滤波波器源程程序fir.asm******.mmregs.globalstart.defstart,_c_int00INDEX.set1KS.set256;输入入样本数数据个数数N.set17;FIR滤滤波器阶阶数COEF_FIR.sect"COEF_FIR";FIR滤波波器系数数113.word0,158,264,-290,-1406,-951,3187,9287,12272.word9287,3187,-951,-1406,-290,264,158,0.dataINPUT.copy“firin.inc”;输入数数据在数数据区0x2400OUTPUT.space1024;输出数数据在数数据区0x2500COEFTAB.usect“FIR_COEF”,N;;自定义段,,为未初始化化变量DATABUF.usect“FIR_BFR”,N;;保留存储空空间BOS.usect“STACK”,0FhTOS.usect“STACK”,1114.text;;文本段段.asgAR0,INDEX_P;;将一个个字符串赋给给一个符号.asgAR4,DATA_P;;输入数数据x(n)循环缓冲区区指针.asgAR5,COEF_P;;FIR系数表指针针.asgAR6,INBUF_P;;模拟输输入数据指针针.asgAR7,OUTBUF_P;;FIR滤波器输出出数据指针_c_int00bstartnopnopstart:SSBXFRCT;;设置置小数乘法STM#COEFTAB,COEF_P;将将FIR系数数从程序存储储区RPT#N-1;;移移到数据存储储区MVPD#COEF_FIR,*COEF_P+STM#INDEX,INDEX_P115STM#DATABUF,DATA_P;;数据循循环缓冲区清清零RPTZA,#N-1STLA,*DATA_P+STM#(DATABUF+N-1),DATA_P;数据循循环缓冲区指指针;指向x[n-(N-1)]STM#COEFTAB,COEF_PFIR_TASK:STM#INPUT,INBUF_PSTM#OUTPUT,OUTBUF_PSTM#KS-1,BRC;;块重复复计数器116RPTBDLOOP-1STM #N,BK;;FIR循环缓缓冲区大小LD*INBUF_P+,A;;装装载输入数据据FIR_FILTER:;FIR滤波波运算STLA,*DATA_P+%;;用用最新的样本本值;替代最旧的的样本值RPTZA,N-1MAC*DATA_P+0%,*COEF_P+0%,A;计计算STHA,*OUTBUF_P+…LOOP:EENDBEEND.end1174)编写FIR滤波器链链接命令文件件对应以上汇编编程序的链接接命令文件fir.cmd如下:fir.obj-mfir.map-o fir.outMEMORY{PAGE0:ROM1(RIX) :ORIGIN=0080H,LENGTH=100HPAGE1:INTRAM1(RW):ORIGIN=2400H,LENGTH=0200HINTRAM2(RW):ORIGIN=2600H,LENGTH=0100HINTRAM3(RW):ORIGIN=2700H,LENGTH=0100HB2B(RW) :ORIGIN=0070H,LENGTH=10H}118SECTIONS{.text:{}>ROM1 PAGE0.data:{}>INTRAM1PAGE1FIR_COEF:{}>INTRAM2PAGE1FIR_BFR:{}>INTRAM3PAGE1.stack:{}>B2BPAGE1}1195)CCS集集成开发环境境下上机操作作过程(1)在CCS上建立fir工程并并运行fir.out程程序。(2)观察输输入信号的波波形及频谱。。(3)观察输输出信号的波波形及频谱。。120Graph属属性设置窗窗口121输入信号的时时域波形输入信号的频频谱图122滤波器输出出信号时域域波形滤波器输出出信号频谱谱图1234.系数对对称FIR滤波器设设计系数对称的的FIR滤滤波器具有有线性相位位特性,这这种滤波器器是用得最最多的FIR滤波器器,特别是是对相位失失真要求很很高的场合合。如果FIR滤波器的的h(n)是实数,,且满足偶偶对称h(n)=h(N-1-n)或或奇对称h(n)=-h(N-1-n)的条件件,则滤波波器具有线线性相位特特性。一个对称FIR滤波波器满足h(n)=h(N-1-n)。124例如,N=8的FIR滤波器器,其输出出方程为::Y(n)=h0x(n)+h1x(n-1)+h2x(n-2)+h3x(n-3)+h3x(n-4)+h2x(n-5)+h1x(n-6)+h0x(n-7)总共有8次次乘法和7次加法。。如果利用用对称性,,可将其改改写成:Y(n)=h0[x(n)+x(n-7)]+h1[x(n-1)+x(n-6)]+h2[x(n-2)+x(n-5)]+h3[x(n-3)+x(n-4)]变成4次乘乘法和7次次加法,乘乘法运算的的次数少了了一半。这这是对称FIR的一一个优点。。125对称FIR滤波器的的实现可按按如下步骤骤进行:(1)将数数据存储器器分为新旧旧两个循环环缓冲区,,每个循环缓缓冲区的长长度为N/2,New循环环缓冲区中中存放N/2=4个个新数据;;Old循循环缓冲区区中存放N/2=4个老数据据。126(2)设置置循环缓冲冲区指针,,以AR2指向New循环缓缓冲区中最最新数据;;以AR3指向Old循环缓缓冲区中最最老数据。。(3)在程程序存储器器中设置系系数表。(4)(AR2)+(AR3)→AH(累加器器A的高位位),AR2-1→→AR2,,AR3-1→AR3。(5)将累累加器B清清0,重复复执行4次次(i=0,1,2,3)下下面的运算算:(AH)*系数hi+(B)→→B,系数数指针(PAR)加加1,(AR2)+(AR3)→AH,AR2和AR3减1。。127(6)保存存和输出结结果(结果果在BH中中)。(7)修正正数据指针针,让AR2和AR3分别指指向New循环缓冲冲区最新的的数据和Old循环环缓冲区中中最老的数数据。(8)用New循环环缓冲区中中最老的数数据替代Old循环环缓冲区中中最老的数数据。Old循环缓缓冲区指针针减1。(9)输输入入一一个个新新数数据据替替代代New循循环环缓缓冲冲区区中中最最老老的的数数据据。。重复复执执行行(4)~~(9)步步。。128C54x的的有有限限冲冲激激响响应应滤滤波波器器指指令令FIRS为为::FIRSXmem,Ymem,Pmad该指指令令执执行行Pmad→→PAR(程程序序存存储储器器地地址址寄寄存存器器)当(RC)!=0(B)+(A(32~~16))××(由由PAR寻寻址址Pmem)→→B((Xmem)+(Ymem))<<16→→A(PAR)+1→→PAR(RC)-1→→RCFIRS指指令令在在同同一一个个机机器器周周期期内内,,通通过过C和和D总总线线读读2次次数数据据存存储储器器,,同同时时通通过过P总总线线读读一一个个系系数数。。129例设计计对对称称FIR滤滤波波器器(N=8)。。.title“FIR5.ASM”;给给汇编程序取取名.mmregs;;定定义存储器映映象寄存器.defstart;;定定义标号start的起起始位置.bssy,1;;为为未初始化变变量y保留空空间x_new.usect“DATA1””,4;;自定义4个个单元的未初初始化段DTAT1x_old.usect“DATA2””,4;;自定义4个个单元的未初初始化段DATA2Size.set4;;定义符号size=4PA0.set0;;设置数据输输出端口I/O,PA0=0PA1.set1;;设置数据输输入端口I/O,PA1=1.dataCOEF.word1*32768/10,2*32768/10;;系数对对称,只需.word3*32768/10,4*32768/10;;给出N/2=4个系系数130.textstart:LD#y,DP;;设设置数据存储储器页指针的的起始位置SSBXFRCT;;小小数乘法STM#x_new,AR2;;AR2指向向新缓冲区第第1个单元STM#x_old+(size-1),AR3;;AR3指指向老缓冲区区最后1个单单元STM#size,BK;;设置循环缓缓冲区长度BK=sizeSTM#-1,AR0;;循环控制增增量AR0=-1PORTRPA1,#x_new;;从I/O输入端端口PA1;输入数据到到x(n)131FIR5:ADD*AR2+0%,*AR3+0%,A;;AH=x(n)+x(n-7);(第一次)RPTZB,#(size-1);;RC=#size-1+1,B=0FIRS*AR2+0%,*AR3+0%,COEF;;B+=AH*h0,;AH=x(n-1)+x(n-6)…STHB,@y;;保存结结果到yPORTW@y,PA0;;输输出结果到PA0MAR*+AR2(2)%;;修正正AR2,指指向新缓;冲区最老老的数据MAR*AR3+%;;修正AR3,指向老老缓;冲区最老的的数据MVDD*AR2,*AR3+0%;新新缓冲冲区向老缓冲冲区传送一个个数;用新新缓冲区最老老的数据覆盖盖旧缓冲区;最老的数数据BDFIR5;;执行完下条条指令后转移移FIR5并并循环PORTRPA1,*AR2;;输入新数数据至新缓冲冲区.end1325、IIR滤波器器的DSP实现1.IIR滤滤波器的基本本概念N阶无限冲激激响应(IIR)滤波器器的脉冲传递递函数表达式式为:其差分方程表表达式可写为为:133Y(n)由两两部分构成::第一部分是是一个对对x(n)的的M节延时链链结构,每节节延时抽头后后加权相加,,是一个横向向结构网络;;第二部分也也是一个个N节延时链链的横向结构构网络,不过过它是对y(n)的延时时,因此是个个反馈网络。。IIR滤波器器的脉冲传递递在Z平面上上有极点存在在,其单位冲冲激响应是无无限长序列。。134IIR滤波器器与FIR滤滤波器的一个个重要区别是是,IIR可可以用较少阶阶数获得很高高的选择特性性,所用存储储单元少,运运算次数少,,具有经济、、高效的特点点。但是,在在有限精度的的运算中,可可能出现不稳稳定现象。而而且,选择性性越好,相位位的非线性越越严重,而FIR滤波器器可以得到严严格的线性相相位。因此,在相位位要求不很敏敏感的场合,,如语言通信信等,选用IIR滤波器器较为合适;;而对于图像像信号处理、、数据传输等等以波形携带带信息的系统统,对线性相相位要求较高高,在条件许许可的情况下下,采用系数数对称FIR滤波器较好好。135直接形式的二二阶IIR数数字滤波器对于直接形式式的二阶IIR数字滤波波器,其结构构如图所示::2.二阶IIR滤波器的的实现方法136存放输入、输输出变量和滤滤波器系系数的缓冲冲区编程时,将变变量和系数都都存放在DARAM中,,并采用循环环缓冲区方式式寻址,共需需开辟4个循循环缓冲区,,用来存放变变量和系数。。这4个循环环缓冲区的结结构如图所示示:137【例】设计一个三阶阶的切比雪夫夫Ⅰ型带通数数字滤波器,,其采样频率率Fs=16kHz,其其通频带3.2kHz<f<4.8kHz,内内损耗耗不大大于1dB;f<2.4kHz和和f>5.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(n,rp,wn)138设计结结果为为:N=3wn=0.40000.6000b0=0.0114747a0=1.000000b1=0a1=0b2=-0.034424a2=2.13779b3=0a3=0b4=0.034424a4=1.76935b5=0a5=0b6=-0.0114747a6=0.539758139(2))产生生滤波波器输输入信信号的的文件件使用CCS的Simulator进行滤滤波器器特性性的测测试时时,需需要输输入时时间信信号x(n)。。#include<stdio.h>#include<math.h>voidmain(){inti;doublef[256];FILE*fp;if((fp=fopen("iirin.inc","wt"))==NULL){printf("can'topenfile!\n");return;}140fprintf(fp,"INPUT:.sect%cINPUT%c\n",'"','"');for(i=0;i<=255;i++){f[i]=sin(2*3.14159*i*4000/16000)+sin(2*3.14159*i*6500/16000);fprintf(fp,".word%1d\n",(long)(f[i]*32768/2));}fclose(fp);}141该程序将产产生名为iirin.inc的输入信信号程序,,内容如下下:INPUT:.sect"INPUT".word0.word25486.word-15136.word-314.word-11585.word19580.word6270.word-30006.word16383……然后,在DSP汇编编语言程序序中通过.copy汇编命令令将生成的的数据文件件iirin.inc复制到到汇编程序序中,作为为IIR滤滤波器的输输入数据。。142(3)直接接型IIR数字滤波波器汇编源源程序的编编写直接型IIR数字滤滤波器汇编编程序diir.asm如下下:********直直接型IIR数字滤滤波器通用用程序**********.title"diir.asm".mmregs.globalstart.defstart,_c_int00N.set16;;N=16.copy "iirin.inc";输入信信号x(n)数据table;IIR滤滤波器系数数.word63,0,-188,,0,188,0,,-63;;b系系数.word0,,11675,0,,9663,0,2948;;a系数.data143BN.usect"BN",N+1AN.usect"AN",N+1INBUF.usect"INBUF",256;输入缓缓冲区在在数据区区0x2400OUTPUT.usect"OUTPUT",256;输出缓缓冲区在在数据区区0x2600.text.asg AR0,INDEX_P.asg AR2,XN_P.asg AR3,ACOFF_P.asg AR4,YN_P.asg AR5,BCOFF_P_c_int00bstartnopnopstart:SSBXFRCT144SSBXOVMSSBXSXMSTM#BN+N,AR1RPT#NMVPD #table,*AR1-;;;将将bi由由程序区区存放到到数据区区STM#AN+N-1,AR1RPT#N-1MVPD #table+N+1,*AR1-;;将ai由程序区区存放到到数据区区STM#OUTPUT,AR1RPTZ A,#255STLA,*AR1+;;输出出数据缓缓冲区清清零STM#INBUF,AR1RPT#255MVPD #INPUT,*AR1+;;将将输入数数据由程程序区145STM#OUTPUT,YN_PSTM#INBUF,XN_PSTM#N-1,INDEX_PSTM#255,BRCRPTBLOOP-1IIR:SUBA,ASTM#BN,BCOFF_PSTM#AN,ACOFF_PRPT#N-1;;计算算前向通通道MAC*XN_P+,*BCOFF_P+,AMAC*XN_P,*BCOFF_P,A146MAR*XN_P-0;;将AR2指针针指向x(n-N)RPT#N-1;;计算算反馈通通道MAC*YN_P+,*ACOFF_P+,ASTHA,*YN_P-0;;保保存y(n)LOOP:EENDBEEND.end147(4)IIR滤滤波器链链接命令令文件的的编写对应以上上汇编程程序的链链接命令令文件diir.cmd如下下:diir.obj-odiir.out-mdiir.mapMEMORY{PAGE0:ROM:ORIGIN=0080H,LENGTH=1000HPAGE1:SPRAM:ORIGIN=0060H,LENGTH=0020HDARAM:ORIGIN=0080H,LENGTH=1380HRAM1:ORIGIN=2400H,LENGTH=0200HRAM2:ORIGIN=2600H,LENGTH=0200H}148SECTIONS{.text:>ROMPAGE0.data:>DARAMPAGE1BN:>DARAMPAGE1AN:>DARAMPAGE1INBUF:>RAM1PAGE1OUTPUT:>RAM2PAGE1}1493.高阶阶IIR滤波器器的实现现一个高阶阶IIR滤波器器可以分分解成若若干个二二阶基本本节相级级联。由由于调整整每个二二阶基本本节的系系数,只只涉及到到这个二二阶节的的一对极极点和零零点,不不影响其其他零、、极点,,因此便便于调整整系统的的性能。。此外,由由于字长长有限,,每个二二阶基本本节运算算后都会会带来一一定的误误差,合合理安排排各二阶阶基本节节的前后后次序,,将使系系统的精精度得到到优化。。150对高阶IIR滤波器器的几点特殊殊处理当出现一一个或一一个以上上系数≥≥1。此此时,既既可以用用最大的的系数来来定标,,即用最最大的系系数去除除所有的的系数,,也可以以将此≥≥1的系系数分解解成两个个<1的的系数进进行运算算和相加加,例如如B0=1.2,则::X(n)*B0=x(n)*(B0/2)+x(n)*(B0/2)=0.6*x(n)+0.6*x(n)这样,将将使所有有的系数数保持精精度,而而仅仅多多开销一一个机器器周期。。(1)系系数≥11时的定定标方法法151(2)对对输入数数据定标标一般地,,从外设设口输入入一个数数据加载载到累加加器A,,可用以以下指令令:PORTR0001h,@XinLD@Xin,16,A如果运算算过程中中可能出出现≥11的输出出值,可可在输入入数据时时将其缩缩小若干干倍,如如:PORTR0001h,@XinLD@Xin,16-3,A将输入数数据除以以8,将将使输出出值小于于1。上上面用多多种不同同的方法法进行了了滤波器器的设计计,在实实现滤波波器功能能的前提提下,程程序的繁繁简和对对存储器器的使用用情况是是不同的的,应用用中应根根据具体体情况进进行选择择。152三、工程程问题的的DSP实现例:DTMF的的编解码码用DSP实现双双音多频频(DTMF))的拨号号产生和和解码。。DTMF(Dual-ToneMultipleFrequency)153实现步骤对象分析算法设计DSP选择系统设计系统实现系统调试154对象分析对所要开发的的系统的功能能、性能要有有深入的了解解和分析,尤尤其对技术指指标,要作透透彻的理解和和把握。155DTMF用一一对频率(行行频/列频))来表示一个个符号(电话话键盘上的0—9,A——D,*,#,共16个个符号)一次按键的时时间是100ms,其中中,频率对存存在的时间是是45ms,,不允许超过过55ms,,其余的时间间是静音。156157CCITT关关于DTMF的指标Lowband:697、770、852、941(Hz)RBW<3.5%Highband:1209、1336、1477、1633(Hz)RBW<3.5%TWIST:: STD>4dBREV>8dBDYNRANGE::>25dBGUARDTIME::MINTONETIME45msSNR:NOISE-24dBV158算法设计算法设计是非非常关键的步步骤,因为算算法决定运算算量和存储器器的大小,从从而决定DSP的选择,,进而决定系系统的设计,,包括硬件和和软件的设计计。159DTMF拨号号的产生基于DSP的的DTMF的的音频信号发发生器,使用用两个二阶的的数字正弦波波振荡器,一一个产生行频频,一个产生生列频。160161DTMF发生生器的系数和和初始条件162DTMF发生生器的信号流流程163音频检测Goertzel算法是是DTMF解解码器的基础础,实际上是是一个两极点点的IIR滤滤波器。DFT或FFT需要在处处理之前准备备好一个数据据块,而Goertzel算法是一一个递归的结结构,就每个个输入的样本本进行计算。。164Goertzel算法的的特点Goertzel算法的的IIR滤波波器结构涉及及两个复共轭轭极点,但对对于实际的DTMF音频频检测,只要要有幅度信息息就够了(实实际上使用幅幅度平方),,从而简化为为只需要一个个实系数参与与计算。Goertzel算法要要比FFT快快得多,因为为只需要提供供8个行/列列频和它们的的二次谐波的的信息(二次次谐波的信息息用于将DTMF与话音音或音乐区别别开来)。165Goertzel算法166行频频/列列频频及及相相应应的的系系数数167有效效性性检检查查信号号强强度度DTMF行行频频、、列列频频信信号号之之和和的的强强度度是是否否达达到到一一定定的的门门限限值值168扭曲曲度度标准准扭扭曲曲::行频频峰峰值值>列列频频峰峰值值4dB反向扭扭曲::列频峰峰值>行行频频峰值值8dB169二次谐谐波强强度以便将将DTMF信号号与其其他语语音信信号、、音乐乐信号号等区区别开开来。170数字信信息的的稳定定性如果一一个数数字成成功地地检测测到两两次,,认为为该数数字是是稳定定的171数字信信息的的有效效性检测到到的数数字前前面必必须是是静音音符时时,该该数字字才是是有效效的,,以便便将各各次击击键区区别开开来172173编码器器对速速度和和存储储器的的要求求174175DSP芯片片选择择算法对对DSP芯芯片计计算速速度的的要求求系统的管管理(如如任务管管理、进进程管理理、存储储器管理理、I/O管理理等)对对DSP的要求求片内存储储器和片片外存储储器的要要求(包包括容量量的要求求和速度度的要求求)176对外设((如串口口、并口口、定时时器、总总线宽度度、等待待状态等等)的要要求DSP封封装对印印制板的的设计影影响甚大大开发环境境技术支持持性能价格格比177DSP芯芯片的速速度178DSP的的片内存存储器179DSP的外设180BGA((BALLGRIDARRAY)181PLCC(PLASTICJ-LEADEDCHIPCARRIER)182PQFP(PLASTICQUADFLATPACK))183PDLP(PLASTICDUAL-IN-LINEPACKAGE))184LCCC(LEADLESSCERAMICCHIPCARRIER)185系统设计计硬件系统统设计软件系统统设计工作软件件测试软件件功能框图图(指标标分配))电原理图图印制板((数字与与模拟电电路,接接地,电电源,多多层板))1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 数据统计员考核制度
- 工程部月度考核制度
- 环保目标责任考核制度
- fdt 绩效考核制度
- 美容师绩效考核制度
- 机关双百分考核制度
- 景区票务中心考核制度
- 工程施工队考核制度
- 社团团支部考核制度
- 托管员工培训考核制度
- 2026及未来5年中国抽纱刺绣工艺品行业竞争现状及投资前景趋势报告
- 2025动物防疫专员试题及答案
- 单元复习:解码中国-我国区域差异的深度整合与素养提升
- 心肺复苏术护理配合要点
- 中医特色护理在精神科的应用
- 风力发电运输合同范本
- 重难点22 立体几何中的外接球、内切球问题(举一反三专项训练)(全国通.用)(原卷版)-2026年高考数学一轮复习举一反三系列
- 高二生物DNA的复制一节教案(2025-2026学年)
- 法律合规风险评估检查表
- 福建省莆田市擢英中学2026届九年级英语第一学期期末联考试题含解析
- 小儿急性呼吸衰竭课件
评论
0/150
提交评论