DSP芯片的定点运算

合集下载

DSP芯片编程中数的定点运算(精)

DSP芯片编程中数的定点运算(精)

通信与广播电视拜年第期〔〔一一一一一」二一一主程序印 , , , 印二, ” ’ , ’ , 勺一输入语音文件滤波后语音文件 , 斤户 , 取一帧语音数据 , , , 调用低通滤波子程序【〕 , 解将滤波后的样值写人文件关闭文件三定点、定点算术运算的补码表示形式侧刃。

芯片的数值表示是基于一每个位数用个符号位一、个整一数位和巧 , , 个小数位来表示格式。

因此数表示的值为, ’ , 二这个数可用一个个小数位来表示。

它表示的数值范围为 , 一一定点数的小数精度为如动态范围和精度要求 , 虽然特殊情况必须使用混合表示法。

, 但是。

, 更通常的是全 , 部以巧格式表示的小数或以格式表示的整数来工作 , 这一点对于主要是乘法和累加的信号处理算法特别现实能会出现溢出现象 , 小数乘以小数得小数整数乘以整数得整数当然乘积累加时可在这种情况下程序员应当了解数学里面的物理过程以注意可能的溢出情况。

定点乘法个定点数相乘时可以分为下列种情况洲抖年第期通信与广播电视小数乘小数例刃刃刃刃冷以刃犯拟叉刃侧又幻】刃犯 , 个巧的小数相乘后得到 , , 个 , 的小数即有。

个符号位。

一般情况下相乘后得到的满精度数不必全部保留而只需保留位单精度数由于相乘后得到的高位不满巧位的小数精度二为了达到巧位精度可将乘积左移位整数乘整数例叉一一心〕一二一混合表示法许多情况下与例 , 运算过程中为了既满足数值的动态范围又保证一定的精度。

, 就必须采用表示 , 巧之间的表示法 , 比如。

, 数值 , , 显然巧无法表示 , 而若用。

则最接近的数是精度无法保证又因此数最佳的表示法是创《刃刃刃洲二拟洲洲洲犯叹心阅口心刃侧刃 , 心的最大值不大于一般的 , 因此 , 个 , 数相乘得到的乘积不大于小数位为位 , 。

若一个数的整数位为位十另一个数的整数位为位 , 小数位为位 , 则这两个数的乘积为整数位和 , 位整数位和巧一一位小数位。

这个乘积的最高位可能的精度为小数位但是不会大于 , 若事先了解数的动态范围 , 就可以增加数的精度 , 。

DSP的定点运算

DSP的定点运算

DSP的定点运算DSP的定点运算技术2007-06-29 09:45:14阅读82评论0字号:大中小许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了。

DSP芯片的定点运算

DSP芯片的定点运算
x float xq 2Q
浮点数 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芯片的定点运算

DSP芯片的定点运算

第3章 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编程技巧之22详解浮点运算的定点编程

DSP编程技巧之22详解浮点运算的定点编程

DSP编程技巧之22详解浮点运算的定点编程我们使用的处理器一般情况下,要么直接支持硬件的浮点运算,比如某些带有FPU的器件,要么就只支持定点运算,此时对浮点数的处理需要通过编译器来完成。

在支持硬件浮点处理的器件上,对浮点运算的编程最快捷的方法就是直接使用浮点类型,比如单精度的float来完成。

但是在很多情况下,限于成本、物料等因素,可供我们使用的只有一个定点处理器时,直接使用float类型进行浮点类型的运算会使得编译器产生大量的代码来完成一段看起来十分简单的浮点数学运算,造成的后果是程序的执行时间显著加长,且其占用的资源量也会成倍地增加,这就涉及到了如何在定点处理器上对浮点运算进行高效处理的问题。

本文引用地址:/article/263475.htm 既然是定点处理器,那么其对定点数,或者说字面意义上的“整数”进行处理的效率就会比它处理浮点类型的运算要高的多。

所以在定点处理器上,我们使用定点的整数来代表一个浮点数,并规定整数位数和小数位数,从而方便地对定点数和浮点数进行转换。

以一个32位的定点数为例,假设转换因子为Q,即32位中小数的位数为Q,整数位数则为31-Q(有符号数的情况),则定点数与浮点数的换算关系为:定点数=浮点数×2^Q例如,浮点数-2.0转换到Q为30的定点数时,结果为:定点数=-2×2^30=-2147483648 32位有符号数的表示范围是:-2147483648到2147483647。

如果我们把有符号定点数的最大值2147483647转换为Q为30对应的浮点数,则结果为:浮点数2147483647/2^30=1.999999999 从上面的两个计算例子中也可以看出,在Q30格式的情况下,最大的浮点数只能表示到1.999999999,如果我们想把浮点数2.0转换为Q30的定点数,则产生了溢出,即造成了1e-9的截断误差。

在此我们列出Q0到Q30对应的范围和分辨率如下表所示:如果你嫌自己计算麻烦的话,可以借助Matlab的命令来求取它们的转换,例如,在Matlab的命令窗口中输入:q = quantizer('fixed', 'ceil', 'saturate', [32 30]);FixedNum=bin2dec(num2bin(q,1.999999999)); 回车之后就可以看到1.999999999转成Q30之后的定点数了。

DSP(知识点+思考题)

DSP(知识点+思考题)

DSP复习要点第一章绪论1、数的定标:Qn表示。

例如:16进制数2000H=8192,用Q0表示16进制数2000H=0.25,用Q15表示2、‟C54x小数的表示方法:采用2的补码小数;.word 32768 *707/10003、定点算术运算:乘法:解决冗余符号位的办法是在程序中设定状态寄存器STl中的FRCT位为1,让相乘的结果自动左移1位。

第二章CPU结构和存储器设置一、思考题:1、C54x DSP的总线结构有哪些特点?答:TMS320C54x的结构是围绕8组16bit总线建立的。

(1)、一组程序总线(PB):传送从程序存储器的指令代码和立即数。

(2)、三组数据总线(CB,DB和EB):连接各种元器件,(3)、四组地址总线(PAB,CAB,DAB和EAB)传送执行指令所需要的地址。

2、C54x DSP的CPU包括哪些单元?答:'C54X 芯片的CPU包括:(1)、40bit的算术逻辑单元(2)、累加器A和B(3)、桶形移位寄存器(4)、乘法器/加法器单元(5)、比较选择和存储单元(6)、指数编码器(7)、CPU状态和控制寄存器(8)、寻址单元。

1)、累加器A和B分为三部分:保护位、高位字、地位字。

保护位保存多余高位,防止溢出。

2)、桶形移位寄存器:将输入数据进行0~31bits的左移(正值)和0~15bits的右移(负值)3)、乘法器/加法器单元:能够在一个周期内完成一次17*17bit的乘法和一次40位的加法4)、比较选择和存储单元:用维比特算法设计的进行加法/比较/选择运算。

5)、CPU状态和控制寄存器:状态寄存器ST0和ST1,由置位指令SSBX和复位指令RSBX控制、处理器模式状态寄存器PMST2-3、简述’C54x DSP的ST1,ST0,PMST的主要功能。

答:’C54x DSP的ST1,ST0,PMST的主要功能是用于设置和查看CPU的工作状态。

•ST0主要反映处理器的寻址要求和计算机的运行状态。

3.DSP的数值运算基础介绍

3.DSP的数值运算基础介绍
9 同样的一个16位数,若Q值不同,则所表示的数也不同。 【例】不同Q值时的16进制数2000H的值。 若用Q0表示,则16进制数2000H = 8192 若用Q15表示,则16进制数2000H = 0.25 9 不同Q值所能表示的数的精度和范围都不同:①Q越大,表示的 数值范围越小,但精度越高;②相反,Q越小,表示的数值范围越 大,但精度越低。 9 不同Q值所对应的正最大值、负最大值和量化步长(即精度): • 正最大值: 2(15−Q) − 2−Q = (215 −1)× 2−Q • 负最大值: −2(15−Q) = −215 × 2−Q • 精度:
课程名称:DSP芯片及应用
Agenda: 3.1 引言 3.2 定点的基本概念 3.3 定点运算实现的基本原理 3.4 DSP定点算术运算实现的基本原理 3.5 非线性运算定点实现方法 3.6 浮点数的表示格式 3.7 基本的浮点运算 3.8 非线性浮点运算的快速实现 3.9 小结 3.10 习题与思考题
31引言32定点的基本概念33定点运算实现的基本原理34dsp定点算术运算实现的基本原理35非线性运算定点实现方法36浮点数的表示格式37基本的浮点运算38非线性浮点运算的快速实现39小结310习题与思考题muchunyang126com3934dsp定点算术运算实现的基本原理341定点乘法两个定点数相乘二进制乘法可分解为一系列的移位和加法
【例】浮点数x=0.6,定标Q=15,求对应的定点数xq?
【例】定点数19660,定标Q=15,求对应的浮点数x?
xq = (int ) x × 2Q = ⎢⎢⎣0.6× 215 ⎥⎥⎦ = ⎢⎣ 0.6×32768⎥⎦ = 19660 注: ⎢ ⎣ ⎥⎦ 表示下取整。
x = ( float ) xq × 2−Q = 19660× 2−15 = 19660 / 32768 = 0.599975585

第3章 DSP芯片的定点运算

第3章  DSP芯片的定点运算

面向TI公司C6000系列DSP的电源系统设计电子科技大学电子工程学院顾良解梅近年来,随着芯片制造技术的不断提高,数字信号处理器(DSP)的性能得到了极大的改善,DSP在航空、航天、雷达、通信,家用电器等领域获得了越来越广泛的应用。

在诸多制造DSP器件的公司中,TI 公司享有很高的声誉并占有较大的市场份额。

本文将根据在从事科研工作中的实际经验给出一种适合于TI公司C6000系列DSP的电源供给系统的设计方案。

在整个DSP系统设计当中,?电源系统的设计应该放在最后完成。

因为只有当整个系统的其他部分已经确定,?且器件型号均已选好之后,才能获得所需的功率、电流、电压大小等具体信息,从而决定电源系统所应选取的器件,并采用合适的方案来实现。

德州仪器公司TMS320C6000系列DSP器件所需电源的特点,?C6000DSP需要外部提供两种电源:?CPU核电源以及周边I/O接口电源。

?周边I/O的电压一般是3.3V,由于许多外部器件均采用3.3V电压,故而DSP可与这样的外部器件直接接口,不需再附加其他电平转换器件。

?CPU核心电压随器件的不同而不同(比如C62X的电压有2.5V,1.8V,1.5V等;?C64X有1.4V,1.2V;?C67X有1.9V,1.8V等),?但都小于I/O电压,这样可以大大降低芯片的功耗。

根据C6000DSP器件所需电源的特点,就可以进行相应的电源系统的设计了。

供电电路的设计如果系统外部能够提供上述两种电压,?供电电路就不再需要设计。

由于大部分数字系统工作于5V或3.3V,外部一次提供一个5V、3.3V或其他数值的电压是比较常见的情况。

此时,就需要将外部输入电压转化为所需的电压,可采用电压调节器来完成此任务。

电压调节器可以采用TI公司提供的TPS56XX、TPS56100、TPS5602等芯片,?本文的系统就采用了TPS5602。

这款芯片有以下主要特点:(1)宽广的输入电压范围:4.5V~25V。

DSP芯片的定点运算之四非线性运算的定点快速实现

DSP芯片的定点运算之四非线性运算的定点快速实现

DSP芯片的定点运算之四非线性运算的定点快速实现在数值运算中,除基本的加减乘除运算外,还有其他许多非线性运算,如对数运算、开方运算、指数运算、三角函数运算等,实现这些非线性运算的方法一般有:(1)调用DSP编译系统的库函数;(2)查表法;(3)混合法。

下面分别介绍这三种方法。

1.调用DSP编译系统的库函数TMS320C2X/C5X的C编译器提供了比较丰富的运行支持库函数。

在这些库函数中,包含了诸如对数、开方、三角函数、指数等常用的非线性函数。

在C 程序中(也可在汇编程序中)只要采用与库函数相同的变量定义,就可以直接调用。

例如,在库函数中,定义了以10为底的常用对数log10():#include math.h double log10(double x);在C程序中按如下方式调用:float x,y;x=10.0;y=log10(x);从上例可以看出,库函数中的常用对数log10()要求的输入值为浮点数,返回值也为浮点数,运算的精度完全可以保证。

直接调用库函数非常方便,但由于运算量大,很难在实时DSP中得到应用。

2.查表法在实时DSP应用中实现非线性运算,一般都采取适当降低运算精度来提高程序的运算速度。

查表法是快速实现非线性运算最常用的方法。

采用这种方法必须根据自变量的范围和精度要求制作一张表格。

显然输入的范围越大,精度要求越高,则所需的表格就越大,即存储量也越大。

查表法求值所需的计算就是根据输入值确定表的地址,根据地址就可得到相应的值,因而运算量较小。

查表法比较适合于非线性函数是周期函数或已知非线性函数输入值范围这两种情况,例3.12和例3.13分别说明这两种情况。

例3.12已知正弦函数y=cos(x),制作一个512点表格,并说明查表方法。

由于正弦函数是周期函数,函数值在-1至+1之间,用查表法比较合适。

由于Q15的表示范围为-1至32767/32768之间,原则上讲-1至+1的范围必须用Q14表示。

DSP 定点乘法运算

DSP 定点乘法运算

除法
加法 定点运算
乘法
减法
定点乘法的现实及原理
设浮点乘法运算的表达式为: float x,y,z; z = xy; 假设经过统计后x的定标值为Qx,y的定标值为Qy,乘积z的定标值为 Qz,则
故定点乘法表示为: int x , y , z ; long temp; temp=(long)x z=(temp×y)>>(Qx+Qy-Qz)
Q越大,数值范围越小,但精度 越高;相反,Q越小,数值范围 越大,但精度就越低。
浮点数X与定点数Xq的转换
xq (int)x 2Q
x (float)xq 2Q
例子:
浮点数X=0.5,定标 Q=15, 则定点数 Xq=[0.5×32768]=16384,[] 中表示下取整。反之,一个用 Q=15 表示的定点数16384, 其浮点数为16384×2^(-15) =16384/32768=0.5
数的标定及Q值确定
数的标定即由程序员来确定1个数的小数点处于16位数的哪一位。 S表示法
数标定的方法 Q表示法
Q值得确定(Q0-Q15)
从表3.1可以看出,同样一个16位数, 若小数点设定的位置不同,它所表示 的数也就不同。 例如: 16进制数2000H=8192,用Q0表 示 1示6进制注范意围数:不20不同0同,0H的而=且Q0所精.2表度5示,也的不用数相Q不同15仅.8,则浮点运算值 为 z =18.4×36.8 = 677.12; 根据上节,得Qx = 10,Qy = 9,Qz = 5,所以 x = 18841;y = 18841; temp = 18841L; z = (18841L*18841)>>(10+9-5) = 354983281L>>14 = 21666; 因为z的定标值为5,故定点 z = 21666 即为浮点的 z = 21666/32 = 677.08

第2章_DSP定点运算

第2章_DSP定点运算

9.数字信号处理方案
二、 TMS320系列部分芯片介绍
TI公司DSP命名规则
TMS 320 C 240 PQ (L)
前缀
TMX =实验设备(experimental device)
温度范围(缺省为0°C~70°C) L= 0°C~70°C A= -40°C~85°C
Q= 40°C~125°C
3、补码[X]补: 符号位
+
尾数部分
正数:尾数部分与真值同即[X]补 = [X]正 负数:尾数为真值数值部分按位取反加1
即[X]补 = [X]反 + 1
数值数据的表示
4、变形补码[X]变补: X而= [-00…0]补 = 1 000…0 [+00…0]补 = 000…0 符号位 + 尾数 ? 2 应用: 判断是否有溢出 0010 [X1 n-1 = 1 数值范围: +(2]补-1)≤[X]补≤-2n-1 -1110B +) [X2]补 = 0 0110 +1000B 双符号位:正数- “00” 如n = 两个符号位(S1S0 )都作为数值一起参 方法: 8,补码范围01111111~10000000, 数值范围为+127~-128负数- “11” 与运算,运算结果的符号如两个符号位 [X1+X2]补 = 1 1000 -1000B 符号位后的尾数并不表示真值大小 相同,结果正确;不同则溢出。 故得 [X1+X2]补 = 11000 即X1+ X2 = -1000 B 用补码进行运算时,两数补码之和等于两 例:已知X1 = 48,X2 = 31 求X1 + X2 = ? 数和之补码,即 X1 = +48 [X1]变补= 00 110000 ]补 = ]变补= 补 011111 +)X2 = [X1]补+[X2+)[X2{X1+X2}00(mod 2n) +31 X1 + X2 = +79 [X1+ X2]变补 = 01 001111

DSP芯片编程中数的定点运算_图文(精)

DSP芯片编程中数的定点运算_图文(精)

6通信与广播电视20年第104期fj0jnj0=;<;++)ur(sm+=j¥l[—+一]h[]xijn1;xui=(tuot[]i)snm;}fi0<(一)++xni2=i[nt一一]0=;in1;i)1[—一]x1g1i;r(neh}/主程序¥¥/vimi()oadn{FL¥f1,¥f2;IEppiaeia1g]ua1g]nfm,ntet,ottet;trda[nhda[nhf=oeipa,b)pfn(s.dtr;lpn”” f=oeot.dtw” ;pfn(upa"b)2ps,fme=0;ra/输入语音文件十¥//滤波后语音文件十¥/wifp(p)==)he(of1le0{fae++:rmpit”aerf(fm=%dn,fe;nr\” r)mafi0ilg;++iai=e(1;取一帧语音数据十o=;<eti)nt]gwf)/¥r(nhda[tp/ir(dtua9h;feia,ott,1,)ltnadafi0<eg;iol=;ilt++)r(nh/调用低通滤波子程序十¥//将滤波后的样值写入文件¥十/pt(uai,p)uott]fwda[2}foacsllel();rtn()er0;u}/¥关闭文件¥/DPS定点算术运算定点DPS芯片的数值表示是基于2的补码表示形式。

每个l位数用16个符号位、i个整数位和15一i个小数位来表示。

因此数0001.000表示的值为2++一=0000110 ̄‘ 22265.2,这个数可用Q8格式(8个小数位)来表示,它表示的数值范围为一182一+17962.9,一个Q定点数的小数精度为1260048/5=.。

0虽然特殊情况(如动态范围和精度要求)必须使用混合表示法,但是,更通常的是全部以Q51格式表示的小数或以Q格式表示的整数来工作。

这一点对于主要是乘法和累加的0信号处理算法特别现实,小数乘以小数得小数,整数乘以整数得整数。

当然,乘积累加时可能会出现溢出现象,在这种情况下,程序员应当了解数学里面的物理过程以注意可能的溢出情况。

定点DSP中高精度除法的实现方法

定点DSP中高精度除法的实现方法

定点DSP中高精度除法的实现方法
引言
 各种集成化单片数字信号处理器(DSP)以其功能强、集成度高、应用灵活、性价比高等优点,在信号处理和系统控制中的主导性地位日益明显。

许多信号处理和控制需要运用除法运算。

一般的数字信号处理器中没有现成的除法指令。

十多年前诞生的浮点DSP,由于其用硬件完成浮点数的运算,在数据处理和运算能力上大大超出定点DSP,处理除法运算也比定点DSP更为简单。

但是定点DSP每器件产品的价格更低,这对大规模的大众市场应用而言是相当重要的优势,也是定点器件至今仍是业界主流的主要原因。

所以,讨论定点DSP中除法的实现仍不失其意义。

在定点DSP中虽然已经有人给出除法的算法,但是由于其运算的复杂和精度难以如愿,致使一些带有除法的好的算法在信号处理中难以得到应用。

 为了提高运算结果的精度,本文在已有除法算法的基础上进行了一些改进,最大限度地保证了结果的精度。

最后在TI公司的TMS320C5416芯片里具体实现并验证了这一高精度除法。

 1 经典算法
 DSP中没有现成的除法指令,除法是靠被除数与除数之间的移位相减来实现的。

在C54X系列里利用减法指令SUBC和循环指令RPT实现2个16位数的相除。

下面以C54X为例来具体实现经典的除法:
 C54X提供的SuBC指令仅对无符号数进行操作,所以在移位相减开始之前必须先将被除数和除数取绝对值,仅考虑2个正数的除法。

此时除法运算有两种情况:
 当|被除数|当|被除数|≥|除数|时,将|被除数|存放在累加器的低16位,然后。

Q格式

Q格式

有符号数的表示法,机器数(出现在电脑的二进位数值)有3个特点,无符号或符号转换成数值来表示,没有 +10101这样的资料,而是以010101来表示,只表示单纯的整数或小数,小数点的位置预设在一定的位置而较少变动,它的长度受到电脑硬体的限制,而不能无限增长。

Q格式,就是将一个小数放大若干倍后,用整数来表示小数。

目录Q格式前提DSPDSP芯片的定点运算Q格式前提DSPDSP芯片的定点运算展开编辑本段Q格式前提无符号数:当参与运算的数值没有负数且运算的结果也没有负数时,则所有字元都可以表示数值,这种没有符号的数,称为无符号数(如记忆体储存位址),有符号数:数值中有某位数值代表符号,通常最高位作为符号位,0代表正,1代表负。

真值:有符号数所代表的数值,例如:110所代表的值是 -2 而非6,有符号数只要去除符号位就可以获得该数的大小,在运算时,它的符号位可参与运算。

但在加减运算时,必须将它分离出来,才能进行运算。

有时,还要确定哪个有符号数的真值比较大,才能确定结果的符号。

为了达到这些功能,电路的设计就相当复杂。

所以很多电脑系统不直接使用有符号数,而使用有符号数的1’s补数或2’s补数表示法作为编码系统正弦脉波宽度调变(SPWM)之控制方法经Q 格式乘法器转换成振幅与频率可变V/F 控制,当成其单相感应马达的输入信号,藉由控制责任周期的大小,以达到变电压相对改变频率的效果。

编辑本段DSP1.实现数位系统的第一步在自然世界中,所有的物理量包括时间、电压、质量、位移等等,都是类比的、连续的。

可是在数位系统中,讯号是在不连续的时间点取样,物理量或讯号的大小也不再是连续,而是被量化(Quantized)。

在数位系统中,只能用有限字元长度的数字去表示数量的大小,而不能以无限精确的数值(实数)去表示。

为了实现数位系统;使用了定数数与浮点数的表示法。

a)定点数(Fixed Point Number):指一个数字的表示,其小数点是在固定的位置(位元)。

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表示 0.111111*********但对于DSP芯片来说,处理方法是完全相同的。

从表1.1还可以看出,不同的Q所表示的数不仅范围不同,而且精度也不相同。

Q越大,数值范围越小,但精度越高;相反,Q越小,数值范围越大,但精度就越低。

例如,Q0 的数值范围是-32768到+32767,其精度为1,而Q15的数值范围为-1到0.9999695,精度为1/32768=0.00003051。

因此,对定点数而言,数值范围与精度是一对矛盾,一个变量要想能够表示比较大的数值范围,必须以牺牲精度为代价;而想精度提高,则数的表示范围就相应地减小。

dsp芯片的定点运算(精)

dsp芯片的定点运算(精)

LAR AR1,#0FH RPT 14 NORM *-上述程序执行后,AR1=#0eH,ACCH=2000(10进制。

对一个16位整数 x 进行上述程序处理实际上就是做这样一个等效变换: x ⋅ 2Q 15−Q x= ⋅2 32768 其中,寄存器 AR1 包含的值为 15-Q ,累加器 ACC 高 16 位包含的值为 x ⋅ 2 Q ,其数值在 16384~32768之间。

例3.15 实现以2为底的对数的C定点模拟程序 int logtab0[10]={-32768,-28262,-24149,-20365,-16862, -13600,-10549,-7683,-4981,-2425}; /*Q15*/ int logtab1[10]={22529,20567,18920,17517,16308, 15255,14330,13511,12780,12124}; /*Q13*/ int logtab2[10]={16384,18022,19660,21299,22938, 24576,26214,27853,29491,31130};/*Q15*/ int log2_fast(int Am { int point,point1; int index,x0,dx,dy,y; point=0;while(Am<16384 {point++;Am=Am<<1;} /*对Am进行规格化*/ /*输入为Q4,输出为Q9*/ point1=(15-point-4*512; /*求查表地址*/ index=((Am-16384*20L>>15; dx =Am-logtab2[index]; dy=((longdx*logtab1[index]>>13; /*Q9*/ y=(dy+logtab0[index]>>6; y=point1+y; return (y; } 上述程序中,输入值Am采用Q4表示,输出采用Q9表示,如果输入输出的Q值与上面程序中的不同,则应做相应的修改。

DSP定点运算-Q格式

DSP定点运算-Q格式

DSP芯片的定点运算---Q格式(转)2008-09-03 15:47DSP芯片的定点运算1.数据的溢出:1>溢出分类:上溢(overflow):下溢(underflow)2>溢出的结果:MaxMin上溢在圆圈上按数据逆时针移动;下溢在圆圈上顺时钟移动。

例:signed int :32767+1=-32768;-32768-1=32767unsigned char:255+1=0;0-1=2553>为了避免溢出的发生,一般在DSP中可以设置溢出保护功能。

当发生溢出时,自动将结果设置为最大值或最小值。

2.定点处理器对浮点数的处理:1>定义变量为浮点型(float,double),用C语言抹平定点处理器和浮点处理器的区别,但是程序的代码庞大,运算速度也慢。

2>放大若干倍表示小数。

比如要表示精度为0.01的变量,放大100倍去运算,运算完成后再转化。

但是这个做法比较僵硬,如要将上面的变量重新定义成0.001精度,又需要放大1000倍,且要重新编写整个程序,考虑溢出等问题。

3>定标法:Q格式:通过假定小数点位于哪一位的右侧,从而确定小数的精度。

Q0:小数点在第0位的后面,即我们一般采用的方法Q15 小数点在第15位的后面,0~14位都是小数位。

转化公式:Q=(int)(F×pow(2,q))F=(float)(Q×pow(2,-q))3.Q格式的运算1>定点加减法:须转换成相同的Q格式才能加减2>定点乘法:不同Q格式的数据相乘,相当于Q值相加3>定点除法:不同Q格式的数据相除,相当于Q值相减4>定点左移:左移相当于Q值增加5>定点右移:右移相当于Q减少4.Q格式的应用格式实际应用中,浮点运算大都时候都是既有整数部分,也有小数部分的。

所以要选择一个适当的定标格式才能更好的处理运算。

一般用如下两种方法:1>使用时使用适中的定标,既可以表示一定的整数复位也可以表示小数复位,如对于2812的32位系统,使用Q15格式,可表示-65536.0~65535.999969482区间内的数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第3章 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。

因此,对定点数而言,数值范围与精度是一对矛盾,一个变量要想能够表示比较大的数值范围,必须以牺牲精度为代价;而想提高精度,则数的表示范围就相应地减小。

在实际的定点算法中,为了达到最佳的性能,必须充分考虑到这一点。

浮点数与定点数的转换关系可表示为:浮点数(x)转换为定点数():Q q x 2x (int)*=定点数(q x )转换为浮点数(x):Q q x -*=2)float (x例如,浮点数 x=0.5,定标 Q =15,则定点数q x =⎣⎦16384327685.0=⨯,式中⎣⎦表示下取整。

反之,一个用 Q =15 表示的定点数16384,其浮点数为16384×2-15=16384/32768=0.5。

表3.1 Q表示、S表示及数值范围3.2 高级语言:从浮点到定点在编写DSP模拟算法时,为了方便,一般都是采用高级语言(如C语言)来编写模拟程序。

程序中所用的变量一般既有整型数,又有浮点数。

如例3.1程序中的变量i是整型数,而pi是浮点数,hamwindow则是浮点数组。

例3.1256点汉明窗计算int i;float pi=3.14159;float hamwindow[256];for(i=0;i<256;i++) hamwindow[i]=0.54-0.46*cos(2.0*pi*i/255);如果要将上述程序用某种定点DSP芯片来实现,则需将上述程序改写为DSP芯片的汇编语言程序。

为了DSP程序调试的方便及模拟定点DSP实现时的算法性能,在编写DSP汇编程序之前一般需将高级语言浮点算法改写为高级语言定点算法。

下面讨论基本算术运算的定点实现方法。

3.2.1 加法/减法运算的C语言定点模拟设浮点加法运算的表达式为:float x,y,z;z=x+y;将浮点加法/减法转化为定点加法/减法时最重要的一点就是必须保证两个操作数的定标值一样。

若两者不一样,则在做加法/减法运算前先进行小数点的调整。

为保证运算精度,需使Q 值小的数调整为与另一个数的Q 值一样大。

此外,在做加法/减法运算时,必须注意结果可能会超过16位表示。

如果加法/减法的结果超出16位的表示范围,则必须保留32位结果,以保证运算的精度。

1.结果不超过16位表示范围设x 的Q 值为Qx ,y 的Q 值为Qy ,且Qx>Qy ,加法/减法结果z 的定标值为Qz ,则z =x+y ⇒yx z Q q Q q Q q y x z ---⋅+⋅=⋅222=x y x x Q Q Q q Q q y x ---⋅⋅+⋅222)(=x y x Q Q Q q q y x --⋅⋅+2]2[)( ⇒)()(2]2[x z y x Q Q Q Q q q q y x z --⋅⋅+=所以定点加法可以描述为:int x,y,z; long temp; /*临时变量*/ temp =y<<(Qx -Qy); temp =x +temp;z =(int)(temp>>(Qx -Qz)), 若Qx ≥Qz z =(int)(temp<<(Qz -Qx)), 若QxQ ≤z 例3.2 定点加法设x =0.5,y =3.1,则浮点运算结果为z =x+y =0.5+3.1=3.6; Qx =15,Qy =13,Qz =13,则定点加法为: x =16384;y =25395;temp =25395<<2=101580;temp =x+temp =16384+101580=117964; z =(int)(117964L>>2)=29491;因为z 的Q 值为13,所以定点值z =29491即为浮点值z =29491/8192=3.6。

例3.3 定点减法设x =3.0,y =3.1,则浮点运算结果为z =x -y =3.0-3.1=-0.1; Qx =13,Qy =13,Qz =15,则定点减法为: x =24576;y =25295; temp =25395;temp =x -temp =24576-25395=-819;因为Qx<Qz ,故 z =(int)(-819<<2)=-3276。

由于z 的Q 值为15,所以定点值z =-3276即为浮点值z =-3276/32768≈-0.1。

2.结果超过16位表示范围设x 的Q 值为Qx ,y 的Q 值为Qy ,且Qx>Qy ,加法结果z 的定标值为Qz,则定点加法为:int x ,y ;long temp ,z ;temp =y<<(Qx -Qy); temp =x +temp;z =temp>>(Qx -Qz),若Qx ≥Qz z =temp<<(Qz -Qx),若Qx ≤Qz 例3.4 结果超过16位的定点加法设x =15000,y =20000,则浮点运算值为z =x +y =35000,显然z>32767,因此 Qx =1,Qy =0,Qz =0,则定点加法为: x =30000;y =20000; temp =20000<<1=40000;temp =temp+x =40000+30000=70000; z =70000L>>1=35000;因为z 的Q 值为0,所以定点值z=35000就是浮点值,这里z 是一个长整型数。

当加法或加法的结果超过16位表示范围时,如果程序员事先能够了解到这种情况,并且需要保证运算精度时,则必须保持32位结果。

如果程序中是按照16位数进行运算的,则超过16位实际上就是出现了溢出。

如果不采取适当的措施,则数据溢出会导致运算精度的严重恶化。

一般的定点DSP 芯片都设有溢出保护功能,当溢出保护功能有效时,一旦出现溢出,则累加器ACC 的结果为最大的饱和值(上溢为7FFFH ,下溢为8001H),从而达到防止溢出引起精度严重恶化的目的。

3.2.2 乘法运算的C 语言定点模拟设浮点乘法运算的表达式为:float x,y,z; z = xy;假设经过统计后x 的定标值为Qx ,y 的定标值为Qy ,乘积z 的定标值为Qz ,则z = xy ⇒z Q q z -⋅2=)(2y x Q Q q q y x +-⋅⋅ ⇒q z =)(2)(y x z Q Q Q q q y x +-所以定点表示的乘法为:int x,y,z; long temp; temp = (long)x;z = (temp ×y) >> (Qx+Qy -Qz); 例3.5 定点乘法设x = 18.4,y = 36.8,则浮点运算值为z =18.4×36.8 = 677.12; 根据上节,得Qx = 10,Qy = 9,Qz = 5,所以x = 18841;y = 18841;temp = 18841L;z = (18841L*18841)>>(10+9-5) = 354983281L>>14 = 21666;因为z 的定标值为5,故定点 z = 21666即为浮点的 z = 21666/32 = 677.08。

3.2.3 除法运算的C 语言定点模拟设浮点除法运算的表达式为:float x,y,z; z = x/y;假设经过统计后被除数x 的定标值为Qx ,除数y 的定标值为Qy ,商z 的定标值为Qz ,则z = x/y ⇒z Q q z -⋅2 =yx Q q Q q y x --⋅⋅22 ⇒qQ Q Q q q y x z y x z )(2+-⋅=所以定点表示的除法为:int x,y,z; long temp; temp = (long)x;z = (temp<<(Qz -Qx+Qy))/y; 例3.6 定点除法设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 = 16384;因为商z 的定标值为15,所以定点z = 16384即为浮点 z = 16384/215= 0.5。

3.2.4 程序变量的Q 值确定在前面几节介绍的例子中,由于x 、y 、z 的值都是已知的,因此从浮点变为定点时Q 值很好确定。

在实际的DSP 应用中,程序中参与运算的都是变量,那么如何确定浮点程序中变量的Q 值呢?从前面的分析可以知道,确定变量的Q 值实际上就是确定变量的动态范围,动态范围确定了,则Q 值也就确定了。

相关文档
最新文档