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。

  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 值也就确定了。

相关文档
最新文档