DSP原理与应用-应用程序设计学习培训模板课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《DSP原理与应用-应用程序设计学习培训模板课件.ppt》由用户(林田)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 原理 应用 程序设计 学习 培训 模板 课件
- 资源描述:
-
1、DSPDSP原理与应用原理与应用第第7章章 应用程序设计应用程序设计1第第7章章 应用程序设计应用程序设计内容提要:内容提要:n7.1 定标与溢出处理定标与溢出处理n7.2 基础算术运算基础算术运算n7.3 FIR滤波器滤波器n7.4 IIR滤波器滤波器n7.5 快速傅里叶变换快速傅里叶变换(FFT)n7.6 DSPLIB的使用的使用27.1定标与溢出处理定标与溢出处理n7.1.1 数的定标数的定标n7.1.2 溢出的处理方法溢出的处理方法n7.1.3 常用信号处理算法中的定标方法常用信号处理算法中的定标方法37.1.1 数的定标数的定标l小数定标的概念小数定标的概念u设定一个设定一个16位数
2、的小数点处于该数中的哪一位位数的小数点处于该数中的哪一位;u可以表示不同大小和不同精度的小数可以表示不同大小和不同精度的小数;lQ表示法表示法u表表7-1列出了一个列出了一个16位数的位数的16种种Q表示及它们表示及它们所能表示的十进制数值范围。所能表示的十进制数值范围。4计算机有两种数据表示方法:计算机有两种数据表示方法:定点数定点数表示法表示法 浮点数浮点数表示法表示法定点数定点数就是小数点位置固定的数。数据的表示形式是:就是小数点位置固定的数。数据的表示形式是:57.1.1 数的定标数的定标 符号位符号位 整数部分整数部分.小数部分小数部分C55x DSPC55x DSP是定点芯片是定点
3、芯片,采用补码形式来表示无符号,采用补码形式来表示无符号数和有符号数。数和有符号数。CPU在执行指令时,并不知道处理的数据是整数在执行指令时,并不知道处理的数据是整数还是小数,也不能指出小数点的位置。在编程时必还是小数,也不能指出小数点的位置。在编程时必须由程序员须由程序员指出一个数的小数点处于哪一位指出一个数的小数点处于哪一位,这就,这就是是定标定标(scale)的概念。的概念。常用的定标方法是常用的定标方法是Q表示法表示法,Q表示法用表示法用Q0,Q1,Qi,Q15 分别表示小数点在分别表示小数点在D0位之后位之后、D1位之位之后、后、Di位之后、位之后、D15位之后位之后。64.5 汇编
4、语言程序设计汇编语言程序设计严格地严格地,是是Qm.n 格式格式:n位小数位小数,m位整数位整数,1位位符符号位号位,共共m+n+1位二进制数。位二进制数。表7-1 Q表示及数值范围Q表示表示 小数点位置小数点位置整数位整数位 小数位小数位十进制表示范围十进制表示范围精度精度-幂幂Q15在在D15之后之后015-10.99996952-157Q13在在D13之后之后213-43.99987792-13Q12在在D12之后之后312-87.99975592-12Q11在在D11之后之后411-1615.99951172-11Q10在在D10之后之后510-3231.99902342-10Q9在在
5、D9之后之后69-6463.998043752-9Q8在在D8之后之后78-128127.99609382-8Q7在在D7之后之后87-256255.99218752-7Q6在在D6之后之后96-512511.98043752-6Q5在在D5之后之后105-10241023.968752-5Q4在在D4之后之后114-20482047.93752-4Q3在在D3之后之后123-40964095.8752-3Q2在在D2之后之后132-81928191.752-2Q1在在D1之后之后141-1638416383.52-1Q0在在D0之后之后150-32768367672 0Q14在在D14之后之
6、后114-21.99993902-14表表7-1 Q表示及数值范围表示及数值范围Q表示十进制数X表示范围Q15-1X0.9999695Q14-2X1.9999390Q13-4X3.9998779Q12-8X7.9997559Q11-16X15.9995117Q10-32X31.9990234Q9-64X63.9980469Q8-128X127.9960938Q7-256X255.9921875Q6-512X511.9804375Q5-1024X1023.96875Q4-2048X2047.9375Q3-4096X4095.875Q2-8192X8191.75Q1-16384X16383.5Q0
7、-32768X327678l不同的不同的Q所表示的数不仅范围不同所表示的数不仅范围不同,而且精度也不相同而且精度也不相同:uQ越大越大,数值范围越小数值范围越小,但精度越高但精度越高;uQ越小越小,数值范围越大数值范围越大,但精度就越低但精度就越低;例如例如:Q0数值范围是数值范围是-32768到到+32767,其精度为其精度为1;Q15的数值范围为的数值范围为-1到到0.9999695,精度为精度为 1/32768=0.00003051对定点数而言对定点数而言,数值范围与精度是一对矛盾。一个变量数值范围与精度是一对矛盾。一个变量要想能够表示比较大的数值范围要想能够表示比较大的数值范围,必须以
8、牺牲精度为代必须以牺牲精度为代价价;而想提高精度而想提高精度,则数的表示范围就相应地减小。则数的表示范围就相应地减小。在实际的定点算法中,应该根据具体问题进行折衷处在实际的定点算法中,应该根据具体问题进行折衷处理理,以达到最佳效果。以达到最佳效果。9l在在C55x中中,16位整数采用补码形式表示。每个采用位整数采用补码形式表示。每个采用Qi定标定标的的16位数用位数用1个符号位、个符号位、i个小数位和个小数位和15-i个整数位来表示个整数位来表示。10.表表7-2 同样的数在不同定标方式下所表示的具体数值同样的数在不同定标方式下所表示的具体数值l同样一个同样一个16位数,位数,若小数点设定的位
9、置不同若小数点设定的位置不同,它,它所表示的数也就不同。所表示的数也就不同。Q格式 十六进制数二进制数十进制数Q02000H0010 0000 0000 0000b8192Q142000H0010 0000 0000 0000b0.5Q152000H0010 0000 0000 0000b0.25Q0E000H1110 0000 0000 0000b-8192Q14E000H1110 0000 0000 0000b-0.5Q15E000H1110 0000 0000 0000b-0.2511定标不同定标不同.7.1.2 溢出的处理方法溢出的处理方法l如果算术运算结果超出寄存器所能表示的最大如果
10、算术运算结果超出寄存器所能表示的最大数就会出现溢出数就会出现溢出;u因为因为16位定点位定点DSP的动态范围有限,所以在使的动态范围有限,所以在使用时必须注意动态范围以防溢出用时必须注意动态范围以防溢出;l溢出还与输入信号的特性和运算法则有关溢出还与输入信号的特性和运算法则有关。1.溢出溢出12 C55x有以下几种硬件特性可以处理溢出:有以下几种硬件特性可以处理溢出:l保护位保护位 C55x的每个的每个累加器都有累加器都有8个保护位个保护位(3932位位),允许连续允许连续256次乘加操作而累加器不溢出次乘加操作而累加器不溢出;l溢出标志位溢出标志位 C55x的每个的每个累加器都有相关的溢出标
11、志位累加器都有相关的溢出标志位,当累当累加器操作结果出现溢出时加器操作结果出现溢出时,这个标志位就会置位。这个标志位就会置位。2.C55x的溢出处理机制的溢出处理机制13l饱和方式位饱和方式位SATD和和SATAuSATD控制控制D单元的操作单元的操作,SATA控制控制A单元的操作。单元的操作。u若若SATD=1,当当D单元发生溢出时单元发生溢出时,对对D单元结果进单元结果进行饱和处理。不管饱和方式位值是什么行饱和处理。不管饱和方式位值是什么,当累加器发当累加器发生溢出时生溢出时,相应溢出标志位相应溢出标志位(ACOVx)都会被置位都会被置位;uA单元没有溢出标志位单元没有溢出标志位,但如果但
12、如果SATA=1,发生溢出发生溢出时时,结果也会结果也会进行饱和处理进行饱和处理。饱和处理是用最近的边界值代替溢出结果。饱和处理是用最近的边界值代替溢出结果。例例,16,16位寄存器范围是位寄存器范围是8000h(8000h(最小负数最小负数)7FFFh(7FFFh(最大正数最大正数),),饱和处理就是饱和处理就是:用用7FFFh7FFFh代替比代替比7FFFh7FFFh大的结果大的结果;用用8000h8000h代替比代替比8000h8000h小的结果。小的结果。14l饱和饱和。饱和是一种处理溢出的方法,但是饱和会剪掉。饱和是一种处理溢出的方法,但是饱和会剪掉部分输出信号,可能会引起信号失真和
13、引起系统非线部分输出信号,可能会引起信号失真和引起系统非线性。性。l输入定标输入定标scaling。分析所要使用的系统,假定最坏。分析所要使用的系统,假定最坏的情况,然后对输入信号定标,以防止溢出。但是这的情况,然后对输入信号定标,以防止溢出。但是这种方法会极大地降低输出信号的精确度。种方法会极大地降低输出信号的精确度。l固定定标固定定标scaling。假定最坏情况。假定最坏情况,对中间结果定标。对中间结果定标。这种方法可防止溢出这种方法可防止溢出,同时增加了系统的信噪比。同时增加了系统的信噪比。l动态定标动态定标scaling。可以监测中间结果的范围,只在。可以监测中间结果的范围,只在需要的
14、时候对中间结果定标。这种方法可以防止溢出需要的时候对中间结果定标。这种方法可以防止溢出但会增加计算量。但会增加计算量。3.溢出的处理方法溢出的处理方法157.1.3 常用信号处理算法中的定标方法常用信号处理算法中的定标方法lFIR滤波器的定标滤波器的定标scaling方法方法u在在FIR滤波器中处理溢出的最好方法是设计时使滤滤波器中处理溢出的最好方法是设计时使滤波器的增益小于波器的增益小于1,这样就不需要对输入信号定标。,这样就不需要对输入信号定标。这种方法和累加器的保护位结合起来,可以有效这种方法和累加器的保护位结合起来,可以有效地防止溢出。地防止溢出。u由于对信号处理的负面影响,在由于对信
15、号处理的负面影响,在FIR滤波器中不使滤波器中不使用固定定标和输入定标。如果不考虑计算量,在用固定定标和输入定标。如果不考虑计算量,在FIR滤波器中可以使用动态定标。对一些类型的音滤波器中可以使用动态定标。对一些类型的音频信号,饱和处理也是一种常用的方法。频信号,饱和处理也是一种常用的方法。16lIIR滤波器的定标滤波器的定标scaling方法方法uIIR滤波器的定点实现推荐使用多个二阶基本节滤波器的定点实现推荐使用多个二阶基本节级联组成,这样可以减小高阶滤波器频率响应灵级联组成,这样可以减小高阶滤波器频率响应灵敏度。由于滤波器系数的量化引入误差,因此避敏度。由于滤波器系数的量化引入误差,因此
16、避免溢出对免溢出对IIR滤波器非常重要。滤波器非常重要。u可以通过把中间结果保存在处理器累加器来避免可以通过把中间结果保存在处理器累加器来避免节间数据溢出。为防止在第节间数据溢出。为防止在第k阶内部发生数据溢出,阶内部发生数据溢出,需要用增益系数对滤波器的单位脉冲响应需要用增益系数对滤波器的单位脉冲响应(前馈通前馈通道道)定标。定标。u动态定标动态定标scaling方法方法。在每个阶段若检测到溢出。在每个阶段若检测到溢出,滤波器内部状态滤波器内部状态,定标定标都被减半都被减半,以提高指令周期以提高指令周期换取为代价提高了结果的精度。换取为代价提高了结果的精度。knGabs(f(n),2 1/2
17、knG(abs(f(n)17l FFT的定标方法的定标方法u在在FFT操作里,每次蝶形运算后数据平均增加一位。操作里,每次蝶形运算后数据平均增加一位。输入定标输入定标需要移位需要移位 (FFT长度为长度为N),这会导致),这会导致在计算在计算FFT之前就衰减之前就衰减 6 dB。u在在固定定标固定定标中中,每级蝶形运算输出除以每级蝶形运算输出除以2,这是最常用这是最常用的的FFT定标方法定标方法,因为它简单而且有比较好的信噪比。因为它简单而且有比较好的信噪比。但是但是,对于大的对于大的FFT,这种定标可能会使信息丢失。这种定标可能会使信息丢失。u另一种方法是另一种方法是动态定标动态定标,即在输
18、出溢出时再除以即在输出溢出时再除以2。在。在这种情况下这种情况下,会在这个过程中指定一个变量会在这个过程中指定一个变量,每定标一每定标一次变量的值加次变量的值加1,计算结束后根据变量的值把结果乘以计算结束后根据变量的值把结果乘以一个系数。动态定标的信噪比最好一个系数。动态定标的信噪比最好,但会增加但会增加FFT循环循环次数。次数。N2logN2log187.2 基础算术运算基础算术运算n7.2.1 加减运算加减运算n7.2.2 乘法运算乘法运算n7.2.3 除法运算除法运算n7.2.4 小数乘法小数乘法197.2.1 加减运算加减运算l在数字信号处理中,加减运算是常见的算术运算。在数字信号处理
19、中,加减运算是常见的算术运算。一般使用一般使用16位或位或32位加减运算位加减运算,数值分析、浮,数值分析、浮点运算和其它操作点运算和其它操作可能需要可能需要32位以上的运算位以上的运算。lC55x有直接完成有直接完成16位或位或32位加减运算的指令,位加减运算的指令,但没有能直接完成多字加减运算的指令但没有能直接完成多字加减运算的指令。要进行。要进行多字加减运算,需要通过编程方法实现。多字加减运算,需要通过编程方法实现。20l 以下指令可在单周期内完成以下指令可在单周期内完成32位加法运算:位加法运算:MOV40 dbl(Lmem),ACx ADD dbl(Lmem),ACxl 64位的高位
20、的高32位加法要考虑低位加法要考虑低32位加法产生的进位,位加法产生的进位,高高32位位使用以下指令:使用以下指令:ADD uns(Smem),CARRY,ACxl 以下指令可在单周期内完成以下指令可在单周期内完成32位减法运算:位减法运算:MOV40 dbl(Lmem),ACxSUB dbl(Lmem),ACxl 64位的位的高高32位减位减法要考虑低法要考虑低32位减法产生的借位,位减法产生的借位,使用以下指令:使用以下指令:SUB uns(Smem),BORROW,ACx 可进行单独可进行单独32位或位或64位的低位的低32位加位加可进行单独可进行单独32位或位或64位的低位的低32位加
21、位加21例例7-1,64位加法运算。文件名为:位加法运算。文件名为:add64.asm。.mmregs.model call=c55_std.model mem=large;*;64位加法;X3 X2 X1 X0 ;+Y3 Y2 Y1 Y0 ;-;W3 W2 W1 W0 22The.mmregs directives are supported by the C1x/C2x/C2xx/C5x assembler.指针分配AR1-X3(偶地址)X2 X1 X0AR2-Y3(偶地址)Y2 Y1 Y0 AR3-W3(偶地址)W2 W1 W0 1000h地址值依次增加1004h1008h.sect.t
22、ext.align 4.globalstart;.sym start,start,36,2,0 start:MOV#0100h,AR1 MOV#0104h,AR2 MOV#0108h,AR3 L1:MOV40 dbl(*AR1(#2),AC0 ;AC0=X1 X0 ADD dbl(*AR2(#2),AC0 ;AC0=X1 X0+Y1 Y0 MOV AC0,dbl(*AR3(#2);保存W1 W0.MOV40 dbl(*AR1),AC0 ;AC0=X3 X2 ADD uns(*AR2(#1),CARRY,AC0;AC0=X3 X2+00 Y2+CARRY ADD*AR2#16,AC0 ;AC0=
23、X3 X2+Y3 Y2+CARRY MOV AC0,dbl(*AR3);保存 W3 W2.B L123.sym-COFF Symbolic Debugging Directives已废弃已废弃The.sym directive defines a global variable,a local variable,or a function.Several parameters allow you to associate various debugging information with the variable or function.格式:.sym name,value,type,sto
24、rage class,size,tag,dims参考文献参考文献:TMS320C28X系列DSP指令和编程指南-附录B 符号调试伪指令.sym(需看附录A:难懂)茶苑老吴的博客:”关于TMS320C55x的汇编语言中的.sym伪指令“(此文献非常详细明了)标号,地址,表示函数,外部外部,不占存储用数表示对应C变量变量类型,占存储单元位数.sect.text.align 4.globalstart;.sym start,start,36,2,0 start:MOV#0100h,AR1 MOV#0104h,AR2 MOV#0108h,AR3 L1:MOV40 dbl(*AR1(#2),AC0 ;A
25、C0=X1 X0 ADD dbl(*AR2(#2),AC0 ;AC0=X1 X0+Y1 Y0 MOV AC0,dbl(*AR3(#2);保存W1 W0.MOV40 dbl(*AR1),AC0 ;AC0=X3 X2 ADD uns(*AR2(#1),CARRY,AC0 ;AC0=X3X2+00Y2+CARRY ADD*AR2 X3(偶地址)X2 X1 X0AR2-Y3(偶地址)Y2 Y1 Y0 AR3-W3(偶地址)W2 W1 W0 1000h地址值依次增加1004h1008h指针分配无带进位的32位加指令此指令不是带进位加,也不需要,X2加Y2的进位就在AC0(16)中.1002h1006h1
展开阅读全文