dsp芯片的运算基础

上传人:san****019 文档编号:71400248 上传时间:2019-01-20 格式:PPT 页数:54 大小:367.81KB
返回 下载 相关 举报
dsp芯片的运算基础_第1页
第1页 / 共54页
dsp芯片的运算基础_第2页
第2页 / 共54页
dsp芯片的运算基础_第3页
第3页 / 共54页
dsp芯片的运算基础_第4页
第4页 / 共54页
dsp芯片的运算基础_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《dsp芯片的运算基础》由会员分享,可在线阅读,更多相关《dsp芯片的运算基础(54页珍藏版)》请在金锄头文库上搜索。

1、定标的基本概念 定点运算实现的基本原理 DSP定点算术运算实现的基本原理,第二章 DSP芯片的运算基础,根据参与运算的数据格式来分,DSP芯片有定点和浮点两大类。 TMS320C2000系列DSP芯片属于定点芯片,因此参与运算的数据格式必须采用定点格式,为了使大家能够理解DSP芯片的运算方法,在这一章里我们一起来学习DSP芯片运算的基础知识。,2.1 定标的基本概念,2.1.1 数的定标 在定点DSP芯片中,采用定点数进行数值运算,其操作数一般采用整型数来表示。一个整型数的最大表示范围取决于DSP芯片所给定的字长,一般为16位或24位。显然,字长越长,所能表示的数的范围越大,精度也越高。 DS

2、P芯片的数以2的补码形式表示。每个16位数用一个符号位来表示数的正负,0表示数值为正,1则表示数值为负。其余15位表示数值的大小。,如: 二进制数0010000000000011b8195 二进制数1111111111111100b-4,对DSP芯片而言,参与数值运算的数就是16位的整型数。但在许多情况下,数学运算过程中的数不一定都是整数。那么,DSP芯片是如何处理小数的呢?应该说,DSP芯片本身无能为力。那么是不是说DSP芯片就不能处理各种小数呢?当然不是。这其中的关键就是由我们设计者来确定一个数的小数点处于16位中的哪一位。这就是数的定标。,通过设定小数点在16位数中的不同位置,就可以表示

3、不同大小和不同精度的小数了。数的定标有Q表示法和S表示法两种。下表列出了一个16位数的16种Q表示、S表示及它们所能表示的十进制数值范围。,同样一个16位数,若小数点设定的位置不同,它所表示的数也就不同。例如: 16进制数2000H8192,用Q0表示 16进制数2000H0.25,用Q15表示,从表3.1还可以看出,不同的Q所表示的数不仅范围不同,而且精度也不相同。Q越大,数值范围越小,但精度越高;相反,Q越小,数值范围越大,但精度就越低。例如,Q0的数值范围是-32768到+32767,其精度为1,而Q15的数值范围为-1到0.9999695,精度为 1/32768 = 0.0000305

4、1。因此,对定点数而言,数值范围与精度是一对矛盾,一个变量要想能够表示比较大的数值范围,必须以牺牲精度为代价;而想提高精度,则数的表示范围就相应地减小。在实际的定点算法中,为了达到最佳的性能,必须充分考虑到这一点。,浮点数与定点数的转换关系可表示为: 浮点数(x)转换为定点数(xq): xq=(int)x*2Q 定点数(xq)转换为浮点数(x): x=(float)xq*2-Q 如,浮点数 x=0.5,定标 Q15,则定点数xq 0.5*2Q=16384;反之,一个用 Q15 表示的定点数16384,其浮点数为163842-1516384/32768=0.5。,2.1.2 溢出及处理方法,溢出

5、:由于定点数的表示范围是一定的,因此在进行定点数的加法或减法运算时,其结果就有可能超出数值的表示范围的情况。 上溢:结果大于最大值。 下溢:结果小于最小值。,在定点运算时,必须考虑溢出的处理方法。否则就有可能导致灾难性的后果。 如:两个16位的有符号位数x、y相加,结果也用16位有符号数表示,假设 x=32766d=0111111111111110b; y=3d=0000000000000011b; x+y=32766+3=1000000000000001=-32767,为了避免这种情况发生,一般在DSP芯片中可以设置溢出的保护功能。设置了溢出功能后,当发生溢出时,DSP芯片自动将结果设置为最

6、大值或最小值。,2.1.3 舍入(rounding)及截尾(truncation),一般对一个数进行取整处理,有以下两种方法: 1、舍入:将该数加0.5后,再将小数部分去处。 2、截尾:直接将小数部分去处;,例2-1,已知x=123.3,y=123.7,试分别对x、y进行舍入和截尾处理。 对x进行舍入:round(x)=round(123.3) trunc(123.3+0.5)=123 对x进行截尾:trunc(123.3)=123 对y进行舍入:round(y)=round(123.7) trunc(123.7+0.5)=124 对y进行截尾:trunc(123.7)=123,对于DSP芯片

7、的乘法运算,常需要用到舍入处理方法。 设两个Q值均为15的16位有符号数进行乘法运算,结果也采用Q15表示的16位数。 1、两数相乘,结果放在32位累加器中,Q=30; 2、将累加器中的数左移一位,Q=31; 3、为了将结果表示为16位,一种方法是直接将低16位截尾,保留高16位,作为乘法结果。另一种方法就是在截尾之前进行舍入处理。方法就是在低16位数的最高位加1,然后将低16位去除,将高16位作为结果。,2.2 定点运算实现的基本原理,在编写DSP模拟算法时,为了方便,一般都是采用高级语言来编写模拟程序。程序中所用的变量一般既有整型数,又有浮点数。 例2-2 256点汉明窗计算 int i;

8、 float pi=3.14159; float hamwindow256; for(i=0;i256;i+) hamwindowi=0.54-0.46*cos(2.0*pi*i/255);,如果要将上述程序用某种定点DSP芯片来实现,则需将上述程序改写为DSP芯片的汇编语言程序。为了DSP程序调试的方便及模拟定点DSP实现时的算法性能,在编写DSP汇编程序之前一般需将高级语言浮点算法改写为高级语言定点算法。,下面我们来学习基本算术运算的定点实现方法。,2.2.1 加法/减法运算的C语言定点模拟 设浮点加法运算的表达式为: f loat x,y,z; z=x+y; 将浮点加法/减法转化为定点加

9、法/减法时最重要的一点就是必须保证两个操作数的定标值一样。若两者不一样,则在做加法/减法运算前先进行小数点的调整。为保证运算精度,需使Q值小的数调整为与另一个数的Q值一样大。此外,在做加法/减法运算时,必须注意结果可能会超过16位表示。如果加法/减法的结果超出16位的表示范围,则必须保留32位结果,以保证运算的精度。,1结果不超过16位表示范围 设x的Q值为Qx,y的Q值为Qy,且QxQy,加法/减法结果z的定标值为Qz,则: zx+y zq*2-Q=xq*2-Qx+yq*2-Qy =xq*2-Qx+yq*2(Qx-Qy)*2-Qx = xq+yq*2(Qx-Qy)*2-Qx zq= xq+y

10、q*2(Qx-Qy)*2(Qz-Qx),所以定点加法可以描述为: int x,y,z; long temp; /*临时变量*/ tempy(QxQz), 若QxQz z(int)(temp(QzQx), 若QxQz,例2-3 定点加法 设x0.5,y3.1,则浮点运算结果为zx+y0.5+3.13.6; Qx15,Qy13,Qz13,则定点加法为: x16384;y25395; temp253952)29491; 因为z的Q值为13,所以定点值z29491即为浮点值z29491/81923.6。,例2-4 定点减法 设x3.0,y3.1,则浮点运算结果为 zx-y3.0-3.1-0.1; Qx

11、13,Qy13,Qz15,则定点减法为: x24576;y25395; temp25395; tempx-temp24576-25395-819; 因为QxQz,故 z(int)(-8192)-3276。由于z的Q值为15,所以定点值z-3276即为浮点值z-3276/32768-0.1。,2结果超过16位表示范围 设x的Q值为Qx,y的Q值为Qy,且QxQy,加法结果z的定标值为Qz,则定点加法为: int x,y; long temp,z; tempy(Qx-Qz),若QxQz ztemp(Qz-Qx),若QxQz,例2-5 结果超过16位的定点加法 设x15000,y20000,则浮点运

12、算值为zxy35000,显然z32767,因此 Qx1,Qy0,Qz0,则定点加法为: x30000;y20000; temp20000135000; 因为z的Q值为0,所以定点值z=35000就是浮点值,这里z是一个长整型数。,当加法或加法的结果超过16位表示范围时,如果我们事先能够了解到这种情况,并且需要保证运算精度时,则必须保持32位结果。如果程序中是按照16位数进行运算的,则超过16位实际上就是出现了溢出。如果不采取适当的措施,则数据溢出会导致运算精度的严重恶化。一般的定点DSP芯片都设有溢出保护功能,当溢出保护功能有效时,一旦出现溢出,则累加器ACC的结果为最大的饱和值(上溢为7FF

13、Fh,下溢为8000h),从而达到防止溢出引起精度严重恶化的目的。,2.2.2 乘法运算的C语言定点模拟 设浮点乘法运算的表达式为: float x,y,z; z = xy; 假设经过统计后x的定标值为Qx,y的定标值为Qy,乘积z的定标值为Qz,则 z = xy zq*2-Q=xq*yq2 -(Qx+Qy) zq= (xq*yq)*2 (Qz-(Qx+Qy),所以定点表示的乘法为: int x,y,z; long temp; temp = (long)x; z = (temp*y) (Qx+Qy-Qz);,例2-6 定点乘法 设x = 18.4,y = 36.8,则浮点运算值为z =18.4

14、36.8 = 677.12; 根据上节,得Qx = 10,Qy = 9,Qz = 5,所以 x = 18841;y = 18841; temp = 18841L; z = (18841L*18841)(10+9-5) = 354983281L14 = 21666; 因为z的定标值为5,故定点 z = 21666即为浮点的 z = 21666/32 = 677.08。,2.2.3 除法运算的C语言定点模拟 设浮点除法运算的表达式为: float x,y,z; z = x/y; 假设经过统计后被除数x的定标值为Qx,除数y的定标值为Qy,商z的定标值为Qz,则 z = x/y zq*2-Q=xq*

15、2-Qx/yq*2 -Qy zq= xq*2 (Qz-Qx+Qy) /yq,所以定点表示的除法为: int x,y,z; long temp; temp = (long)x; z = (temp(Qz-Qx+Qy)/y;,例2-7 定点除法 设x = 18.4,y = 36.8,浮点运算值为z = x/y = 18.4/36.8 = 0.5; 根据上节,得Qx = 10,Qy = 9,Qz = 15;所以有 x = 18841, y = 18841; temp = (long)18841; z = (18841L(15-10+9)/18841 = 308690944L/18841 = 1638

16、4; 因为商z的定标值为15,所以定点z = 16384即为浮点 z = 16384/215= 0.5。,2.2.4 程序变量的Q值确定 在前面几节学习的例子中,由于x、y、z的值都是已知的,因此从浮点变为定点时Q值很好确定。在实际的DSP应用中,程序中参与运算的都是变量,那么如何确定浮点程序中变量的Q值呢? 从前面的分析可以知道,确定变量的Q值实际上就是确定变量的动态范围,动态范围确定了,则Q值也就确定了。,设变量的绝对值的最大值为|max|,注意必须小于或等于32767。取一个整数n,使它满足 则有:Q = 15-n,某变量的值在-1至1之间,即 1,因此n = 0,Q15-n = 15。 程序变量Q值的确定: 一种是理论分析法, 另一种是统计分析法。,1理论分析法 有些变量的动态范围通过理论分析是可以确定的。,(1) 三角函数,y = sin(x)或y = cos(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号