DSP定点数处理saturation 和rounding
定点DSP——精选推荐
定点DSP譬≈≯.j§蠹等鼍一≯|鼍毒ll|0誊.定点DSPC55X实现浮点相关逗算■大连海事大学孙兴邦刘亮夏志忠引言DSP结构可以分为定点和浮点型两种.其中,定点型DSP可以实现整数,小数和特定的指数运算,它具有运算速度快,占用资源少,成本低等特点;灵活地使用定点型DSP进行浮点运算能够提高运算的效率.目前对定点DSP结构支持下的浮点需求也在不断增长,主要原因是: 实现算法的代码往往是采用C/C++编写,如果其中有标准型的浮点数据处理,又必须采用定点DSP器件,那么就需要将浮点算法转换成定点格式进行运算.同时,定点DSP结构下的浮点运算有很强的可行性,因为C语言和汇编语言分别具有可移植性强和运算效率高的特点,因此在定点DSP中结合C语言和汇编语言的混合编程技术将大大提高编程的灵活度,以及运算速度.大多数DSP的开发工具只是在C语言的基础上支持标准的浮点运算,而定点DSP硬件一般都是面向定点的运算,不支持标准的浮点运算,缺乏硬件的支持极大地限制了浮点的应用,因而标准的浮点运算在实际定点DSP 应用中并不多见.C55O9是一款16位定点DSP.在本文中,对C55O9输入FTSK信号,用C语言和汇编语言混合编程的方式对输入浮点型的FTSK信号进行相关运算,并输出浮点运算结果.这种方法的特点是:在C语言中方便地进行数据格式转化,在汇编语言中进行乘法和加法运算,既达到很高的运算精度,又极大地提高了运算效率.1定点DSPC语言开发环境中的浮点数据格式在定点DSP中,整型数是用16位二进制格式来存储的,但是DSP的C语言和汇编语言中定义的单精度浮点型数据都是标准C语言浮点表示格式.这种格式在C55X中,符合IEEE754标准.它定义了单精度32位和双精度64位的格式.32位IEEE754单精度标准中,第一位是符号位,其后8位用来存放指数,最后23位用来存放小数尾数,如下:l符号位I指数lMSB尾数LSBll32位I31位一24位l23位一1位l在IEEE754单精度浮点标准中,明确包含了符号位,第32位用作符号位.尾数进行了归一化,以产生一个1.f 格式的数,,是小数部分,占用分配的23位.因为规格化的数最左一位总是1,所以不需要存储该位,在该格式中它是隐式的.这样一个位的尾数实际上存放了一个+1位数.为使尾数规格化,指数被适当增减,来跟踪规格化所需的左右移位数以及小数点.最常用的是用8位指数表示0~255,即0%e%255:z一(一1)×2(1.,)其中:S是符号位,0为正数,1为负数;e是指数位,无符号8位;f是尾数的小数部分,23位.例如:IEEE754格式下浮点正数00110001001111100 000000100000000的十进制表示为:符号位一0(因为它是一个正数)尾数一1+2+2+2+2+2+2一1.48440551758指数一2+2+2一98十进制等值数一1.48440551758×2.'一2.76492073681×l0IEEE754格式下浮点负数11100001010101100000000000000000的十进制表示为:符号位一1(因为它是一个负数)尾数一1+2+2+2+2一1.6875指数一2+2+2一194十进制等值数一一1.6875×2""一一2.49031044995×10.2相关运算的实现2.1数据提取方式在本软件设计中,FTSK输人数据的频率包含800Hz,I200Hz,I600Hz,2020Hz,通过相关运算提取80074《平方机乌嵌入式系惋应冈》l圈匝l田_盈唧***************.cn(F告专用)Hz信号.具体参数是:FTSK输入数据的采样率为8000Hz.相关运算输入数据:每次运算对输入数据先提取1600个点,并分离出这些数据的最后40个点;然后对下一个输入数据提取1600个点,并把刚才取的40个点加在这1600个点后面组成1640长度的数组,作为相关运算的输入.这样做的原因是,最大限度地消除每次提取的1600个点相邻部分的影响,提高相关输出的精准度.相关运算的输入数据都为浮点型,而通过MATLAB仿真计算出来的系数也都为小于1的浮点数.通过在C语言中调用汇编语言,在定点C5509中实现此浮点运算,并输出用800Hz相关运算提取出的波形.2.205509中实现浮点运算方法此相关运算的输入是浮点型数据,相关系数是小于1的单精度浮点型数.对于定点DSP,由于不能直接进行浮点数的乘法运算,因此必须对输入数据进行类型转换.首先,相关运算的输入数据是FTSK浮点数据.在C语言中,单精度浮点数据是以IEEE754标准存储的32位数据,而C5509中C语言调用汇编语言,是通过寄存器AR0 从C语言传递给汇编语言的是数据指针,这个指针是指向16位数据的,所以相关的输入32位浮点数要先转化为l6位整型数据.本文这样实现:C程序中先把浮点数据乘以10后(提高运算精度),强制类型转化为整型数据,然后把此16位数据的指针赋给调用汇编的入口参数,即通过寄存器AR0传递到汇编程序中.然后,在汇编程序中, 相关的系数是小于1的小数;在DSP中,汇编语言直接定义的格式是将其转换为16位二进制2的补码表示形式(例如0.8用8×32768/10来表示).从汇编程序入口进入的,经过强制类型转换的整型数据也是以16位二进制形式存储的,通过与16位的小数相乘得到的是32位数, 存储在累加器A中.其中,前16位是运算结果的整数部分,后16位是小数部分.由于从汇编语言程序返回C程序的参数是16位的,故取运算结果的高16位(此前已经把输入数据乘以10,最大限度地提高了运算精度,这里直接取高16位).把这16位数据返回C程序,得到整型数据,再强制类型转化为单精度浮点型数据,再除以1O,即得到了最后相关运算的结果.经实际运算检验,通过这种方法在C55O9里进行浮点运算,最终结果实现了很高的精度,而且通过调用汇编语言,极大地提高了运算的效率.2.3仿真实际在用户板上用TI公司提供的CCSEmulator调试程序,实现了硬件仿真;而对此DSP算法来说,也可用TI公司提供的软件仿真器(Simulator)实现软件仿真.TI公司提供的软件CCS中有一项强大的探测点功能.它是一个开发算法的工具,将计算机数据文件传送到目标板或计算机的缓冲区中提供DSP软件应用,而且可以通过CCS提供的图形窗口观察输入/输出数据波形. 本次算法设计中利用CCS的断点和探测点进行数据的输入,利用图形窗口观察输入/输出的波形.2.4实际运算的结果分析从输入波形可以看到,有4种不同的频率,可以算出最低频率是800Hz,经过800Hz相关运算得出的输入波形与输出波形对比如图1所示.在图1中,可以看到输入波形中频率最低的波形.2个波峰时间差(即周期)是0.0054—0.00416—0.00124S, 取倒数是806.45,所以此波形是800Hz部分;再看输出波形,4个尖峰正好分别对应输入4个800Hz频率分量. 如果在后面再加上低通滤波器,就可以滤出更平滑的曲线,如图2所示.2.5测试程序运行时间CCS中提供了一种评价器(profiler).它通过收集在图1800Hz相关运算的输入/输出波形图对比...,...一...,蚺擅士田,.........R_—u一十 (75)图2相关运算结果经过低通滤波后的波形图指定代码区间程序执行的统计性能,确定程序中各段所花费的处理器时间,从而识别并消除性能发挥的瓶颈,缩短程序的执行时间,使程序更有效;利用评价器分析可以确定执行某个特殊的函数花费了多少个时钟周期,以及对它调用的频繁度等.本设计中相关浮点运算通过C语言编程和C,汇编语言混合编程两种方式的对比,用CCS提供的评价器可以测出,调用汇编语言的方式比纯C语言编程方式,速度提高了51.2.结语在定点DSP中进行浮点运算,要经过复杂的数据格式转化,因此用定点DSP取代浮点DSP,在降低设备成本的情况下,必定会提高研发的成本.如果直接把IEEE754标准的32位单精度浮点数据转化为16位整型数,要经过相当复杂的过程,在满足一定精度的前提下,可以使用本文的转化方式.使用C语言和汇编语言混合编程的方法,达到了大大提高运算效率的目的,不失为很灵活的编程方法.簟参考文献[1][英]AndrewBateman,lainPaterson—Stephens.TheDSP HandbookAlgorithms,ApplicationsandDesignTechniques,2003.[2]胡庆钟,李小刚,等.TMS320C55XDSP原理,应用和设计I-M].北京:机械工业出版社,2006.r3]程佩青.数字信号处理教程I-M].第2版.北京:清华大学出版社,2002.[4]IEEEStandardforBinaryFloating—PointArithmetic.孙共舞甏硕壬篷妥研宽蠢氟惫逸拣馆恕骞跷.壤1琵x譬薯鼍赣!罄l季|-毫誊曩:秀誊誊叠.一j.孽|叠蘩孽誊鼙{瓤篱2Q鹬篱警警誊鏊罄高线性度620~1100MHz正交调制--器--一凌力尔特公司(LinearTechnologyCorporation)推出的新型高性能正交调制器LT557i,针对850"-965MHzGSM,CDMA200o,舞ISM和RFID调制器应用进行了优化.该器件接受I(同相)和Q(正交相位)基带信号并将其直接调制至射频信号..0或低中频(IF)发射器架构使基站设计师能够实现高性能,同时降低功耗并减少器件数,因此可以缩小系统尺寸并降低系统成本.该器件具有卓越的线性度,在900MHz时OIP3(输出3阶截取点)为21.7dBm,OIP2(输出2阶截取点)为63.8dBm,I~I时在采用5V电源时仅消耗97mA静态电流.LT5571的输出噪声层为一159dBm/Hz,并具有一42dBm的低LO泄漏.它在900MHz时的镜频抑制为一53dBc.LT5571满足或超过了GSM蜂窝基站以及其他高性能无线基础设施发射器所要求的动态范围LT5571是一种高度集成的芯片,内含2个匹配的高线性度混频器,1个5OQL0输入缓冲器,1个精确的O./90.LO移相器和1个工作频带为62O~1100MHz的片上射频输出变压器.这个射频变压器汇总来自I通道扣Q通道混频器的已调制信号,产生一个单端5OQ匹配输出.同样,L0输入也是单端的,从而减少了所需的外部组件数并减轻了设计工作的负担.LT5571的2个片上混频器是内部平衡的,因此其L0泄漏性能非常好.凭借0dBm的L0输入功率,在未经校准的情况下,至RF输出的泄漏达到一42dBm(在900MHz).同样,片内精准移相器的准确度优于0.5.,从而实现了一53dBc 的未校准镜频抑制性能.如果需要,还可以通过校准将镜频抑制并把L0泄漏性能改善到优于一70dBc.LT5571的高阻抗I和Q输入具有0.5VDC共模偏置,允许灵活的AC或DC耦合以及简单连接至多个D/A转换器或基带驱动电路.LT5571用单5V电源电压工作,典型工作电流为97mA.该器件可以用ENABLE引脚关断.在禁止工作时,该芯片消耗的最高静态电流为100A,以降低功耗.就半双工或时分复用工作模式而言,该芯片可以利用ENABLE引脚迅速接通和关断.7《聋卉缸j入:泰刍埔…A~n.+…nfr'-垂击田,。
DSP芯片编程中数的定点运算(精)
通信与广播电视拜年第期〔〔一一一一一」二一一主程序印 , , , 印二, ” ’ , ’ , 勺一输入语音文件滤波后语音文件 , 斤户 , 取一帧语音数据 , , , 调用低通滤波子程序【〕 , 解将滤波后的样值写人文件关闭文件三定点、定点算术运算的补码表示形式侧刃。
芯片的数值表示是基于一每个位数用个符号位一、个整一数位和巧 , , 个小数位来表示格式。
因此数表示的值为, ’ , 二这个数可用一个个小数位来表示。
它表示的数值范围为 , 一一定点数的小数精度为如动态范围和精度要求 , 虽然特殊情况必须使用混合表示法。
, 但是。
, 更通常的是全 , 部以巧格式表示的小数或以格式表示的整数来工作 , 这一点对于主要是乘法和累加的信号处理算法特别现实能会出现溢出现象 , 小数乘以小数得小数整数乘以整数得整数当然乘积累加时可在这种情况下程序员应当了解数学里面的物理过程以注意可能的溢出情况。
定点乘法个定点数相乘时可以分为下列种情况洲抖年第期通信与广播电视小数乘小数例刃刃刃刃冷以刃犯拟叉刃侧又幻】刃犯 , 个巧的小数相乘后得到 , , 个 , 的小数即有。
个符号位。
一般情况下相乘后得到的满精度数不必全部保留而只需保留位单精度数由于相乘后得到的高位不满巧位的小数精度二为了达到巧位精度可将乘积左移位整数乘整数例叉一一心〕一二一混合表示法许多情况下与例 , 运算过程中为了既满足数值的动态范围又保证一定的精度。
, 就必须采用表示 , 巧之间的表示法 , 比如。
, 数值 , , 显然巧无法表示 , 而若用。
则最接近的数是精度无法保证又因此数最佳的表示法是创《刃刃刃洲二拟洲洲洲犯叹心阅口心刃侧刃 , 心的最大值不大于一般的 , 因此 , 个 , 数相乘得到的乘积不大于小数位为位 , 。
若一个数的整数位为位十另一个数的整数位为位 , 小数位为位 , 则这两个数的乘积为整数位和 , 位整数位和巧一一位小数位。
这个乘积的最高位可能的精度为小数位但是不会大于 , 若事先了解数的动态范围 , 就可以增加数的精度 , 。
DSP芯片的定点运算
浮点数 x=0.5,定标 Q=15, 则定点数=0.5*32768=16384
SuQian College
Q表示、S表示及数值范围
QHale Waihona Puke 示 Q15 Q14. . . . . .
Q1 Q0
S表示 S0.15 S1.14
. . . . . .
S14.1 S15.0
十进制数表示范围 -1≤X≤0.9999695 -2≤X≤1.9999390
. . . . . .
-16384≤X≤16383.5 -32768≤X≤32767
1 定点的基本概念
SuQian College
1、数的定标
在定点DSP芯片中,采用定点数进行数值运算, 其操作数一般采用整型数来表示
DSP芯片的数以2的补码形式表示 数的定标:Q表示法和S表示法 对定点数而言,数值范围与精度是一对矛盾, 一个变量要想能够表示比较大的数值范围,必须 以牺牲精度为代价。
SuQian College
Q表示法16进制数2000H
Q0表示为8192
SuQian College
0010000000000000
符
号 位 Q15表示为0.25
小数点的位置
0010000000000000
小数点的位置
浮点数与定点数的转换关系
浮点数转换为定点数
xq int x 2Q
定点数转换为浮点数
DSP定点和浮点数格式ppt课件【2024版】
练习
〔1〕试写出下述X,Y定点乘法C言语模拟程 序 设x=18.4,y=36.8,Qx=10;Qy=9;Qz=5
〔2〕试写出下述X,Y定点除法C言语模拟程 序 设x=18.4,y=36.8,Qx=10;Qy=9;Qz=15
共占用至少79 位
表示的数值
1s 1. f 2e-127
1s 0. f 2126
x 0
1s
NaN
1 e 254 e 0, f 0 e 0, f 0 e 255, f 0 e 255, f 0
最高位〔第31位〕为符号位s
通常情况,即 1 ≤ e ≤ 254 时
x1s1.f2e-127
四种特殊情况 ① 当 e=0、f≠0 时,尾数是个非归一化的数
② 当 e=0、f=x 0 时,x1=s 00.f2-126
③ 当 e=255、f=0 时,x为正〔s=0〕或负〔s=1〕的无穷 大
④ 当 e=255、f≠0 时,x为一个无效数〔NaN—Not a Number〕
例 ① 32位单精度浮点数
2〕数值范围与精度
给定字长N,采用Qn格式表示小数
数值范围: 精 度:
2N1 2n
~
2N1 1 2n
1 2n
16位字长Qn格式的数值范围与精度
3〕动态范围
动态范围:数据表示格式中可以表示的最大值与最小值之比
N位定点数的动态范围:
D Rfix= (2N 1 1/ 2 1 n )/2n 2N11
00001010b〔10〕除以00000011b〔3〕 与上面例子一样,结果为Q5格式011.01010b 最后对结果的小数点位置左移n-m 位 对于本例3-2=1>0,那么结果的小数点左移一位,最后
DSP定标方法
DSP芯片的定点运算3.1 数的定标在定点DSP芯片中,采用定点数进行数值运算,其操作数一般采用整型数来表示。
一个整型数的最大表示范围取决于DSP芯片所给定的字长,一般为16位或24位。
显然,字长越长,所能表示的数的范围越大,精度也越高。
如无特别说明,本书均以16位字长为例。
DSP芯片的数以2的补码形式表示。
每个16位数用一个符号位来表示数的正负,0表示数值为正,1则表示数值为负。
其余15位表示数值的大小。
因此二进制数0010000000000011b=8195二进制数1111111111111100b=-4对DSP芯片而言,参与数值运算的数就是16位的整型数。
但在许多情况下,数学运算过程中的数不一定都是整数。
那么,DSP芯片是如何处理小数的呢?应该说,DSP芯片本身无能为力。
那么是不是说DSP芯片就不能处理各种小数呢?当然不是。
这其中的关键就是由程序员来确定一个数的小数点处于16位中的哪一位。
这就是数的定标。
通过设定小数点在16位数中的不同位置,就可以表示不同大小和不同精度的小数了。
数的定标有Q表示法和S表示法两种。
表3.1列出了一个16位数的16种Q表示、S表示及它们所能表示的十进制数值范围。
从表3.1可以看出,同样一个16位数,若小数点设定的位置不同,它所表示的数也就不同。
例如:16进制数2000H=8192,用Q0表示16进制数2000H=0.25,用Q15表示但对于DSP芯片来说,处理方法是完全相同的。
从表3.1还可以看出,不同的Q所表示的数不仅范围不同,而且精度也不相同。
Q越大,数值范围越小,但精度越高;相反,Q越小,数值范围越大,但精度就越低。
例如,Q0的数值范围是-32768到+32767,其精度为1,而Q15的数值范围为-1到0.9999695,精度为1/32768 = 0.00003051。
因此,对定点数而言,数值范围与精度是一对矛盾,一个变量要想能够表示比较大的数值范围,必须以牺牲精度为代价;而想提高精度,则数的表示范围就相应地减小。
dsp定点运算与定标
DSP芯片的定点运算3.1 数的定标在定点DSP芯片中,采用定点数进行数值运算,其操作数一般采用整型数来表示。
一个整型数的最大表示范围取决于DSP芯片所给定的字长,一般为16位或24位。
显然,字长越长,所能表示的数的范围越大,精度也越高。
如无特别说明,本书均以16位字长为例。
DSP芯片的数以2的补码形式表示。
每个16位数用一个符号位来表示数的正负,0表示数值为正,1则表示数值为负。
其余15位表示数值的大小。
因此二进制数0010000000000011b=8195二进制数1111111111111100b=-4对DSP芯片而言,参与数值运算的数就是16位的整型数。
但在许多情况下,数学运算过程中的数不一定都是整数。
那么,DSP芯片是如何处理小数的呢?应该说,DSP芯片本身无能为力。
那么是不是说DSP芯片就不能处理各种小数呢?当然不是。
这其中的关键就是由程序员来确定一个数的小数点处于16位中的哪一位。
这就是数的定标。
通过设定小数点在16位数中的不同位置,就可以表示不同大小和不同精度的小数了。
数的定标有Q表示法和S表示法两种。
表3.1列出了一个16位数的16种Q表示、S表示及它们所能表示的十进制数值范围。
从表3.1可以看出,同样一个16位数,若小数点设定的位置不同,它所表示的数也就不同。
例如:16进制数2000H=8192,用Q0表示16进制数2000H=0.25,用Q15表示但对于DSP芯片来说,处理方法是完全相同的。
从表3.1还可以看出,不同的Q所表示的数不仅范围不同,而且精度也不相同。
Q越大,数值范围越小,但精度越高;相反,Q越小,数值范围越大,但精度就越低。
例如,Q0的数值范围是-32768到+32767,其精度为1,而Q15的数值范围为-1到0.9999695,精度为1/32768 = 0.00003051。
因此,对定点数而言,数值范围与精度是一对矛盾,一个变量要想能够表示比较大的数值范围,必须以牺牲精度为代价;而想提高精度,则数的表示范围就相应地减小。
DSP工作原理
DSP工作原理一、概述数字信号处理(Digital Signal Processing,简称DSP)是一种对数字信号进行处理和分析的技术。
DSP技术广泛应用于通信、音频、图像、雷达、医学等领域。
本文将详细介绍DSP的工作原理。
二、数字信号处理的基本原理数字信号处理的基本原理是将连续时间的模拟信号转换为离散时间的数字信号,然后通过数字信号的处理和分析得到所需的结果。
DSP的工作原理可以分为以下几个步骤:1. 采样(Sampling):将连续时间的模拟信号在一定时间间隔内进行采样,得到离散时间的数字信号。
采样定理要求采样频率至少是信号最高频率的两倍,以避免采样失真。
2. 量化(Quantization):将采样得到的连续幅度的模拟信号转换为离散幅度的数字信号。
量化过程中,将连续的幅度范围划分为有限个离散的幅度级别,每个级别用一个数字表示。
3. 编码(Encoding):将量化后的数字信号转换为二进制码。
常用的编码方式有脉冲编码调制(PCM)和脉冲编码调制(PCM)。
4. 数字信号处理(Digital Signal Processing):对编码后的数字信号进行处理和分析。
常见的数字信号处理算法包括滤波、变换、编解码等。
5. 数字信号重构(Digital Signal Reconstruction):将数字信号转换为模拟信号。
重构过程中,通过数字到模拟的转换器(DAC)将数字信号转换为模拟信号。
三、DSP的应用领域DSP技术在各个领域都有广泛的应用。
1. 通信领域:DSP技术在通信领域中用于信号的调制解调、信道编码解码、信号的滤波等处理,提高了通信系统的抗干扰能力和传输质量。
2. 音频领域:DSP技术在音频领域中用于音频信号的压缩、降噪、混响等处理,提高了音频设备的音质和效果。
3. 图像领域:DSP技术在图像领域中用于图像的去噪、增强、压缩等处理,提高了图像的质量和处理速度。
4. 雷达领域:DSP技术在雷达领域中用于雷达信号的处理和目标检测、跟踪等算法,提高了雷达系统的性能和探测能力。
【转】dsp定点运算基本方法
【转】dsp定点运算基本⽅法⽬录参考:⼀DSP定点算数运算1 数的定标在定点DSP芯⽚中,采⽤定点数进⾏数值运算,其操作数⼀般采⽤整型数来表⽰。
⼀个整型数的最⼤表⽰范围取决于DSP芯⽚所给定的字长,⼀般为16位或24位。
显然,字长越长,所能表⽰的数的范围越⼤,精度也越⾼。
如⽆特别说明,本书均以16位字长为例。
DSP芯⽚的数以2的补码形式表⽰。
每个16位数⽤⼀个符号位来表⽰数的正负,0表⽰数值为正,l则表⽰数值为负。
其余15位表⽰数值的⼤⼩。
因此,⼆进制数0010000000000011b=8195⼆进制数1111111111111100b= -4对DSP芯⽚⽽⾔,参与数值运算的数就是16位的整型数。
但在许多情况下,数学运算过程中的数不⼀定都是整数。
那么,DSP芯⽚是如何处理⼩数的呢?应该说,DSP芯⽚本⾝⽆能为⼒。
那么是不是说DSP芯⽚就不能处理各种⼩数呢?当然不是。
这其中的关键就是由程序员来确定⼀个数的⼩数点处于16位中的哪⼀位。
这就是数的定标。
通过设定⼩数点在16位数中的不同位置,就可以表⽰不同⼤⼩和不同精度的⼩数了。
数的定标有Q表⽰法和S表⽰法两种。
表1.1列出了⼀个16位数的16种Q表⽰、S表⽰及它们所能表⽰的⼗进制数值范围。
从表1.1可以看出,同样⼀个16位数,若⼩数点设定的位置不同,它所表⽰的数也就不同。
例如,16进制数2000H=8192,⽤Q0表⽰16进制数2000H=0.25,⽤Q15表⽰但对于DSP芯⽚来说,处理⽅法是完全相同的。
从表1.1还可以看出,不同的Q所表⽰的数不仅范围不同,⽽且精度也不相同。
Q越⼤,数值范围越⼩,但精度越⾼;相反,Q越⼩,数值范围越⼤,但精度就越低。
例如,Q0 的数值范围是⼀32768到+32767,其精度为1,⽽Q15的数值范围为-1到0.9999695,精度为1/32768=0.00003051。
因此,对定点数⽽⾔,数值范围与精度是⼀对⽭盾,⼀个变量要想能够表⽰⽐较⼤的数值范围,必须以牺牲精度为代价;⽽想精度提⾼,则数的表⽰范围就相应地减⼩。
定点dsp与浮点dsp的比较
定点DSP与浮点DSP的比较定点运算DSP在应用中已取得了极大的成功,而且仍然是DSP应用的主体。
然而,随着对DSP处理速度与精度、存储器容量、编程的灵活性和方便性要求的不断提高、自80年代中后期以来,各DSP生产厂家陆续推出了各自的32bit浮点运算DSP。
和定点运算DSP相比,浮点运算DSP具有许多优越性:浮点运算DSP比定点运算DSP的动态范围要大很多。
定点DSP的字长每增加1bit,动态范围扩大6dB。
16bit字长的动态范围为96dB。
程序员必须时刻关注溢出的发生。
例如,在作图像处理时,图像作旋转、移动等,就很容易产生溢出。
这时,要么不断地移位定标,要么作截尾。
前者要耗费大量的程序空间和执行时间,后者则很快带来图像质量的劣化。
总之,是使整个系统的性能下降。
在处理低信噪比信号的场合,例如进行语音识别、雷达和声纳信号处理时,也会发生类似的问题。
而32bit浮点运算DSP的动态范围可以作到1536dB,这不仅大大扩大了动态范围,提高了运算精度,还大大节省了运算时间和存储空间,因为大大减少了定标,移位和溢出检查。
由于浮点DSP的浮点运算用硬件来实现,可以在单周期内完成,因而其处理速度大大高于定点DSP。
这一优点在实现高精度复杂算法时尤为突出,为复杂算法的实时处理提供了保证。
32bit浮点DSP的总线宽度较定点DSP宽得多,因而寻址空间也要大得多。
这一方面为大型复杂算法提供了可能、因为省的DSP目标子程序已使用到几十MB存储器或更多;另一方面也为高级语言编译器、DSP操作系统等高级工具软件的应用提供了条件。
DSP的进一步发展,必然是多处理器的应用。
新型的浮点DSP已开始在通信口的设置和强化、资源共享等方面有所响应。
DSP学习进阶学习TI的各种DSP,本着循序渐进的原则,可以分为多个层次。
根据我多年开发DSP的经验,在这里总结一下各个层次的进阶:1、DSP2000(除了2812):进阶:标准C -> C和汇编混合编程说明:把DSP2000当作单片机来玩就可以了,非常简单。
DSP定点数处理saturation和rounding
DSP硬件实现的优化(八)—saturation, rounding的原理和实现在数字信号处理系统中,大部分情况下数据都是用定点表示。
但是由于DSP经常使用到乘法器,那么两个定点数相乘后的数的位宽将是两个操作数位宽之和。
比如说A*B,A的位宽是(1,7,4),B的位宽是(1,9,5),相乘后的结果将会变成(1,16,9),相乘结果的数据位宽此时竟然达到了16比特。
如果此结果以后还要再做乘法运算,那么位宽将会越扩越大。
乘法器所占的资源基本上在数字信号处理系统中的比重很大,乘法器的位宽越大,部分积也越多,加法树的层级也越来越多,直接影响了系统的Fmax (时序)和资源。
因此在实际的定点化仿真阶段时,算法设计会综合考虑系统性能(因为对数据进行截位会影响系统性能和精度)和实现资源,对某些时候的乘法结果作rounding(四舍五入)或者saturation(饱和)处理。
那么rounding是如何操作的呢?比如说有一个数,经过乘法后得到的结果表示方式为(1,16,12),也就是说前面的第0到第11比特是小数位,第12到14比特是整数位,第15比特是符号位。
如果想把该数rounding到(1,10,7),也就是只用10个比特表示,第0到第6个比特是小数位,第7到第8比特是整数位,第9比特是最高位。
此时的rounding规则是怎样的呢?以上面为例,假设A =10'1011'11'11,那么此时截位时,把第0到第4比特截取掉,第4比特为1,那么截取的时候要进行进位,即B = 101'01'11 + 1'b1。
此时有个问题需要注意,由于截位后是要做4舍五入,需要进位,那么实际上B的位宽是需要扩一位的。
由于A是有符号数,所以在截位四舍五入时需要按符号位扩展,即原来的符号位是什么该比特就扩展成什么。
以上面的例子B = 1101'0110'00。
这时候B的位宽是12比特,但是我们的目标是把数rounding到10比特。
一DSP定点算数运算 1 数的定标 在定点DSP芯片中,采用...
一DSP定点算数运算1 数的定标在定点DSP芯片中,采用定点数进行数值运算,其操作数一般采用整型数来表示。
一个整型数的最大表示范围取决于DSP芯片所给定的字长,一般为16位或24位。
显然,字长越长,所能表示的数的范围越大,精度也越高。
如无特别说明,本书均以16位字长为例。
DSP芯片的数以2的补码形式表示。
每个16位数用一个符号位来表示数的正负,0表示数值为正,l则表示数值为负。
其余15位表示数值的大小。
因此,二进制数0010000000000011b=8195 二进制数1111111111111100b= -4 对DSP芯片而言,参与数值运算的数就是16位的整型数。
但在许多情况下,数学运算过程中的数不一定都是整数。
那么,DSP芯片是如何处理小数的呢?应该说,DSP芯片本身无能为力。
那么是不是说DSP芯片就不能处理各种小数呢?当然不是。
这其中的关键就是由程序员来确定一个数的小数点处于16位中的哪一位。
这就是数的定标。
通过设定小数点在16位数中的不同位置,就可以表示不同大小和不同精度的小数了。
数的定标有Q表示法和S表示法两种。
表1.1列出了一个16位数的16种Q表示、S表示及它们所能表示的十进制数值范围。
从表1.1可以看出,同样一个16位数,若小数点设定的位置不同,它所表示的数也就不同。
例如,16进制数2000H=8192,用Q0表示16进制数2000H=0.25,用Q15表示但对于DSP芯片来说,处理方法是完全相同的。
从表1.1还可以看出,不同的Q所表示的数不仅范围不同,而且精度也不相同。
Q越大,数值范围越小,但精度越高;相反,Q越小,数值范围越大,但精度就越低。
例如,Q0 的数值范围是一32768到+32767,其精度为1,而Q15的数值范围为-1到0.9999695,精度为1/32768=0.00003051。
因此,对定点数而言,数值范围与精度是一对矛盾,一个变量要想能够表示比较大的数值范围,必须以牺牲精度为代价;而想精度提高,则数的表示范围就相应地减小。
定点DSP如何做浮点运算
定点DSP如何做浮点运算2008-10-16 08:46许多DSP芯片只支持整数运算,如果现在这些芯片上进行小数运算的话,定点小数运算应该是最佳选择了,此外即使芯片支持浮点数,定点小数运算也是最佳的速度选择。
在DSP 世界中,由于DSP芯片的限制,经常使用定点小数运算。
所谓定点小数,实际上就是用整数来进行小数运算。
下面先介绍定点小数的一些理论知识,然后以C 语言为例,介绍一下定点小数运算的方法。
在TI C5000 DSP系列中使用16比特为最小的储存单位,所以我们就用16比特的整数来进行定点小数运算。
先从整数开始,16比特的储存单位最多可以表示0x0000到0xffff,65536种状态,如果它表示C语言中的无符号整数的话,就是从0到 65535。
如果需要表示负数的话,那么最高位就是符号位,而剩下的15位可以表示32768种状态。
这里可以看出,对于计算机或者DSP芯片来说,符号并没有什么特殊的储存方式,其实是和数字一起储存的。
为了使得无论是无符号数还是符号数,都可以使用同样的加法减法规则,符号数中的负数用正数的补码表示。
我们都知道-1 + 1 =0,而0x0001表示1,那么-1用什么来表示才能使得-1 + 1 =0呢?答案很简单:0xffff。
现在就可以打开Windows的计算器,用16进制计算一下0xffff+0x0001,结果是0x10000。
那么 0x10000和0x0000等价麽,我们刚才说过用16比特来表达整数,最高位的1是第17位,这一位是溢出位,在运算寄存器中没有储存这一位,所以结果是低16位,也就是0x0000。
现在我们知道负数的表达方式了。
举个例子:-100。
首先我们需要知道100的16进制,用计算器转换一下,可以知道是0x0064,那么-100就是0x10000 - 0x0064,用计算器算一下得0xff9c。
还有一种简单的转换符号的方法,就是取反加一:把数x写成二进制格式,每位0变1,1变0,最后把结果加1就是-x了。
Q格式_dsp定点和浮点数学运算规则
Q格式有符号数的表示法,机器数(出现在电脑的二进位数值)有3个特点,无符号或符号转换成数值来表示,没有+10101这样的资料,而是以010101来表示,只表示单纯的整数或小数,小数点的位置预设在一定的位置而较少变动,它的长度受到电脑硬体的限制,而不能无限增长。
Q格式,就是将一个小数放大若干倍后,用整数来表示小数。
Q格式前提无符号数:当参与运算的数值没有负数且运算的结果也没有负数时,则所有字元都可以表示数值,这种没有符号的数,称为无符号数(如记忆体储存位址),有符号数:数值中有某位数值代表符号,通常最高位作为符号位,0代表正,1代表负。
真值:有符号数所代表的数值,例如:110所代表的值是-2 而非6,有符号数只要去除符号位就可以获得该数的大小,在运算时,它的符号位可参与运算。
但在加减运算时,必须将它分离出来,才能进行运算。
有时,还要确定哪个有符号数的真值比较大,才能确定结果的符号。
为了达到这些功能,电路的设计就相当复杂。
所以很多电脑系统不直接使用有符号数,而使用有符号数的1’s补数或2’s补数表示法作为编码系统正弦脉波宽度调变(SPWM)之控制方法经Q 格式乘法器转换成振幅与频率可变V/F 控制,当成其单相感应马达的输入信号,藉由控制责任周期的大小,以达到变电压相对改变频率的效果。
DSP1.实现数位系统的第一步在自然世界中,所有的物理量包括时间、电压、质量、位移等等,都是类比的、连续的。
可是在数位系统中,讯号是在不连续的时间点取样,物理量或讯号的大小也不再是连续,而是被量化(Quantized)。
在数位系统中,只能用有限字元长度的数字去表示数量的大小,而不能以无限精确的数值(实数)去表示。
为了实现数位系统;使用了定数数与浮点数的表示法。
a)定点数(Fixed Point Number):指一个数字的表示,其小数点是在固定的位置(位元)。
b)浮点数(Floating Point Number):使用假数以及指数两部分来表示数值。
一DSP定点算数运算 1 数的定标 在定点DSP芯片中,采用...
一DSP定点算数运算1 数的定标在定点DSP芯片中,采用定点数进行数值运算,其操作数一般采用整型数来表示。
一个整型数的最大表示范围取决于DSP芯片所给定的字长,一般为16位或24位。
显然,字长越长,所能表示的数的范围越大,精度也越高。
如无特别说明,本书均以16位字长为例。
DSP芯片的数以2的补码形式表示。
每个16位数用一个符号位来表示数的正负,0表示数值为正,l则表示数值为负。
其余15位表示数值的大小。
因此,二进制数0010000000000011b=8195 二进制数1111111111111100b= -4 对DSP芯片而言,参与数值运算的数就是16位的整型数。
但在许多情况下,数学运算过程中的数不一定都是整数。
那么,DSP芯片是如何处理小数的呢?应该说,DSP芯片本身无能为力。
那么是不是说DSP芯片就不能处理各种小数呢?当然不是。
这其中的关键就是由程序员来确定一个数的小数点处于16位中的哪一位。
这就是数的定标。
通过设定小数点在16位数中的不同位置,就可以表示不同大小和不同精度的小数了。
数的定标有Q表示法和S表示法两种。
表1.1列出了一个16位数的16种Q表示、S表示及它们所能表示的十进制数值范围。
从表1.1可以看出,同样一个16位数,若小数点设定的位置不同,它所表示的数也就不同。
例如,16进制数2000H=8192,用Q0表示16进制数2000H=0.25,用Q15表示但对于DSP芯片来说,处理方法是完全相同的。
从表1.1还可以看出,不同的Q所表示的数不仅范围不同,而且精度也不相同。
Q越大,数值范围越小,但精度越高;相反,Q越小,数值范围越大,但精度就越低。
例如,Q0 的数值范围是一32768到+32767,其精度为1,而Q15的数值范围为-1到0.9999695,精度为1/32768=0.00003051。
因此,对定点数而言,数值范围与精度是一对矛盾,一个变量要想能够表示比较大的数值范围,必须以牺牲精度为代价;而想精度提高,则数的表示范围就相应地减小。
定点dsp与浮点dsp的比较
定点dsp与浮点dsp的比较DSP数字信号处理器是一种特别适合于进行数字信号处理的微处理器,主要用于实时快速地实现各种数字信号处理算法定点运算DSP数字信号处理器在应用中已取得了极大的成功,而且仍然是DSP应用的主体。
然而,随着对DSP处理速度与精度、存储器容量、编程的灵活性和方便性要求的不断提高、自80年代中后期以来,各DSP生产厂家陆续推出了各自的32bit 浮点运算DSP。
定点DSP指令集定点DSP指令集是按两个目标来设计的:•使处理器能够在每个指令周期内完成多个操作,从而提高每个指令周期的计算效率。
•将存贮DSP程序的存储器空间减到最小(由于存储器对整个系统的成本影响甚大,该问题在对成本敏感的DSP应用中尤为重要)。
和定点运算DSP相比,浮点运算DSP具有许多优越性:浮点运算DSP比定点运算DSP的动态范围要大很多。
定点DSP的字长每增加1bit,动态范围扩大6dB。
16bit字长的动态范围为96dB。
程序员必须时刻关注溢出的发生。
例如,在作图像处理时,图像作旋转、移动等,就很容易产生溢出。
这时,要么不断地移位定标,要么作截尾。
前者要耗费大量的程序空间和执行时间,后者则很快带来图像质量的劣化。
总之,是使整个系统的性能下降。
在处理低信噪比信号的场合,例如进行语音识别、雷达和声纳信号处理时,也会发生类似的问题。
而32bit浮点运算DSP的动态范围可以作到1536dB,这不仅大大扩大了动态范围,提高了运算精度,还大大节省了运算时间和存储空间,因为大大减少了定标,移位和溢出检查。
由于浮点DSP的浮点运算用硬件来实现,可以在单周期内完成,因而其处理速度大大高于定点DSP。
这一优点在实现高精度复杂算法时尤为突出,为复杂算法的实时处理提供了保证。
32bit浮点DSP的总线宽度较定点DSP宽得多,因而寻址空间也要大得多。
这一方面为大型复杂算法提供了可能、因为省的DSP目标子程序已使用到几十MB存储器或更多;另一方面也为高级语言编译器、DSP操作系统等高级工具软件的应用提供了条件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DSP硬件实现的优化(八)— saturation, rounding的原理和实现
在数字信号处理系统中,大部分情况下数据都是用定点表示。
但是由于DSP 经常使用到乘法器,那么两个定点数相乘后的数的位宽将是两个操作数位宽之和。
比如说A*B,A的位宽是(1,7,4),B的位宽是(1,9,5),相乘后的结果将会变成(1,16,9),相乘结果的数据位宽此时竟然达到了16比特。
如果此结果以后还要再做乘法运算,那么位宽将会越扩越大。
乘法器所占的资源基本上在数字信号处理系统中的比重很大,乘法器的位宽越大,部分积也越多,加法树的层级也越来越多,直接影响了系统的Fmax(时序)和资源。
因此在实际的定点化仿真阶段时,算法设计会综合考虑系统性能(因为对数据进行截位会影响系统性能和精度)和实现资源,对某些时候的乘法结果作rounding(四舍五入)或者saturation(饱和)处理。
那么rounding是如何操作的呢?比如说有一个数,经过乘法后得到的结果表示方式为(1,16,12),也就是说前面的第0到第11比特是小数位,第12到14比特是整数位,第15比特是符号位。
如果想把该数rounding到(1,10,7),也就是只用10个比特表示,第0到第6个比特是小数位,第7到第8比特是整数位,第9比特是最高位。
此时的rounding规则是怎样的呢?以上面为例,假设A = 1010'1011'1111'1111,那么此时截位时,把第0到第4比特截取掉,第4比特为1,那么截取的时候要进行进位,即B = 101'0101'1111 + 1'b1。
此时有个问题需要注意,由于截位后是要做4舍五入,需要进位,那么实际上B的位宽是需要扩一位的。
由于A是有符号数,所以在截位四舍五入时需要按符号位扩展,即原来的符号位是什么该比特就扩展成什么。
以上面的例子B = 1101'0110'0000。
这时候B的位宽是12比特,但是我们的目标是把数rounding到10比特。
那么下一步该如何操作呢?事实上我们的小数位已经是7比特,无法做截取,此时应该对整数位做saturation(饱和)操作:即大于所能表达的最大数就令其为最大数,小于所能表达的最小数就令其为最小数。
还是以B为例子,由于我们的目标是把B变成(1,10,7),而此时B是(1,12,7),整数位多出了两比特,所以要对整数位进行截取。
如果此时B(1,12,7)的超过了01'1111'1111或者是小于
100'000'0000,那么统统表示为01'1111'1111或者是100'000'0000。
此即为饱和操作。
做饱和操作时有个小技巧,即对B(1,12,7)扩展后的符号位跟第11位,第10位(即rounding目标数的符号位)做比对,如果都是同样的值,即都为0或都为1,那么就直接把第11和第12位截取即可,因为此时四舍五入没有发生进位,如果不相同,则表示发生了进位,那么此时就要按照最高位是0还是1选择把rounding后的目标数变为01'1111'1111或者是100'000'0000。
在上面那个例子中,第12位到10位的值不一样,因此可以知道10位数肯定不能表达该数,所以只能选择饱和,饱和后的数值为10'0000'0000。