DSP中浮点数和定点数 dsp

2020-04-08  21:54:53

1 DSP中的数据表述
DSP中数据通常是有定点数与浮点数表示,其中可以对字长进行相关定义,可以选取字长为16位、24位、32位不同字长使用。而格式与字长决定了数据的精度与动态范围,同时也一定程度上决定了DSP处理器的功耗、成本与编程难度。

定点数:小数点位置为确定的。

浮点数:小数点位置可以改变。

定点运算的硬件实现较为简单,功耗较小,主要注意的是数据的定标、溢出以及误差。

浮点器减结构较为复杂,但是精度较高,高级语言容易支持。

2 定点数的格式与相关运算
2.1 定点数格式
定点数格式:Qn 格式,n为小数位数。即Q15 ,小数点右边有15个小数位,如果我们定义了一个长度为32位的数字,那么小数位为15,1位符号位,16位为整数位。

整数小数点固定在最后,定点数小数位固定使用上文的Qn 格式表示,两者都使用二进制补码形式表示。

例: Q4格式:01010011b=1•22+1•20+1•2-3+1•2-4=83/24=5.1875

对于负数(最高位MSB为1),要先把它转化为无符号二进制数,再进行计算,最后加上负号。

图2-1 二进制Q格式表示

定点数与浮点数转化时需要使用2n 的关系进行转化。

转化关系如下图:

图2-2 定点数与浮点数转化关系

浮点数转换为定点数时,由于小数点后的位数有限,会产生截断误差。

2.2 数值范围与精度
Qn 格式,字长为N数值范围: -2N-12n~2N-1-12n  

精度:12n  

由于符号位占1位,所以数据位为N-1,n越大范围越小,但精度越高。

图2-3 数值范围与精度

2.3 动态范围
数据格式中最大值与最小值之比即为动态范围。

N位定点数动态范围:

分贝表示:dsp大多采用16位定点数,动态范围为90.3db。

Dsp大多采用16为定点数,运算硬件实现较为简单,更大动态范围应用可以使用拓展字长方式。

3 定点数算术运算
3.1 定点数加减法运算
首先需要保证小数点对齐,但是运算结果可能会溢出。如果进位位与最高位(MSB)相同无溢出,不同则有溢出。

处理溢出通常有饱和模式与非饱和模式,饱和模式溢出时会对溢出进行限幅,如图。非饱和模式不会处理。

图3-1 饱和模式与非饱和模式

3.2 定点数乘法
DSP处理器都有硬件乘法器和乘法指令,可实现单周期乘法运算。二进制乘法运算包含了移位与加法运算。

定点数乘法不要求小数点位统一,两个相乘数分别为Qn和Qm格式,字长为N,结果为Q(n+m)格式,字长为2N。

在进行运算时,需要字长保持不变,则两个定点小数作乘法运算,结果左移一位,保存高位得到运算结果,结果为Qm(m≤ n)格式。

若整数乘小数,则输出结果为整数,丢弃后8位为截尾误差。误差小于等于Qn格式精度的一半,即小于等于12n+1 。单次计算误差不大,但连续计算,尤其是递归算法中,误差影响较大。

整数相乘,结果为Q0格式,需查询标志位确定保存的位数,结果不需要左移一位。若结果没有超出8位数的表示范围时,结果在低8位,保存低8位。若结果超出8位数的表示范围时,则高8位也包含乘积结果,应保存整个16位结果。

参考:https://blog.csdn.net/wasser000/article/details/90575201

原文地址:https://www.cnblogs.com/CCWangsj/p/12663164.html

时间: 2024-08-29 12:46:41

DSP中浮点数和定点数 dsp的相关文章

DSP中cmd文件(修改1)

DSP中cmd文件(修改1) 看TMS320C6000 Optimizing Compiler v7.6 User's Guide和TMS320C6000 Assembly Language Tools User's Guide ? CMD 的专业名称叫链接器配置文件,是存放链接器的配置信息的,其中比较关键的就是MEMORY和SECTIONS两个伪指令的使用. ? DSP工程文件夹中有两个cmd文件,其中一个为linker.cmd;另一个为c6455.cmd.c6455.cmd文件在工程中.工程

DSP中cmd文件(待修改)

DSP中cmd文件(待修改) CMD 的专业名称叫链接器配置文件,是存放链接器的配置信息的,其中比较关键的就是MEMORY和SECTIONS两个伪指令的使用. DSP工程文件夹中有两个cmd文件,其中一个为linker.cmd;另一个为c6455.cmd.c6455.cmd文件在工程中.工程目录下的文件夹中.map文件里有section allocation map可以查看产生的"段".查看 .map 文件中"output section"那一列,那些长度(leng

DSP 中关键字extern,cregister,Near ,Far,restrict,volatile

extern:extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.另外,extern也可用来进行链接指定. const: 可以用const定义一些变量或数组,以确保它的值不被改变. 例:int *const p = &x;  定义一个常量指针p给变量int.       const int *q = &x;  定义一个变量指针q给常量int. cregister:定义用来直接访问CPU控制寄存器的变量. 你可以先定义

DSP中的段

虽然,C语言是一种相对高效的高级语言,并且TI提供的C编译器还结合硬件特点支持三级优化功能,但生成的汇编代码效率仍可能会不尽人意.如作者预使用环型缓冲区管理功能,这就要求该缓冲区应被定位到相对特定的位置.因此,用户对C编译器究竟是如何进行存储分配的,应有一定的了解.目标码是以段为单位组织的.至于TMS320C54x 汇编器是如何具体分配段,而连接器又是如何进行连接的,这些并非本文的要旨,详细内容请参见关于TMS320C54x 汇编/连接器的使用一书.这里,仅结合C语言的特点,简单介绍一下几种常用

DSP中cmd文件

DSP中cmd文件 CMD 的专业名称叫链接器配置文件,是存放链接器的配置信息的,我们简称为命令文件,其中比较关键的就是MEMORY和SECTIONS两个伪指令的使用. 1.命令文件的组成 命令文件的开头部分是要链接的各个子目标文件的名字,这样链接器就可以根据子目标文件名,将相应的目标文件链接成一个文件:接下来就是链接器的操作指令,这些指令用来配置链接器,接下来就是MEMORY和SECTIONS两个伪指令的相关语句,必须大写. CMD分配ROM和RAM空间,告诉链接程序怎样计算地址和分配空间.所

mysql 浮点数与定点数

浮点数一般用于表示含有小数部分的数值.当一个字段被定义为浮点类型后,如果插入数据的精度超过该列定义的实际精度,则插入值会被四舍五入到实际定义的精度值,然后插入,四舍五入的过程不会报错.在MySQL 中float.double(或real)用来表示浮点数. 定点数不同于浮点数,定点数实际上是以字符串形式存放的,所以定点数可以更加精确的保存数据. mysql> CREATE TABLE test (c1 float(10,2),c2 decimal(10,2));Query OK, 0 rows a

MySQL浮点数和定点数

MySQL 分为两种方式:浮点数和定点数.浮点数包括 float(单精度)和 double(双精度),而定点数则只有 decimal 一种表示.定点数在 MySQL 内部以字符串形式存放,比浮点数更精确,适合用来表示货币等精度高的数据. 浮点数和定点数都可以用类型名称后加"(M,D)"的方式来进行表示,"(M,D)"表示该值一共显示 M 位数字(整数位+小数位),其中 D 位位于小数点后面,M 和 D 又称为精度和标度.例如,定义为 float(7,4)的一个列可以

js中浮点数的精度问题

JS中浮点数的精度问题 value = parseFloat((value.toFixed(2))).toLocaleString(); //大于1的数值没有问题,小于1的,个位数的0会丢失,如:0.1,转换之后:.1 function accAdd(arg1,arg2){ var r1,r2,m; try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0} try{r2=arg2.toString().split("

DSP中的cmd文件

DSP6455中cmd文件 CMD 的专业名称叫链接器配置文件,存放链接器的配置信息,DSP编译器的编译结果是未定位的,DSP也没有操作系统来定位执行代码,DSP系统的配置需求也不尽相同,因此需要定义代码存储位置.CMD分配ROM和RAM空间,告诉链接程序怎样计算地址和分配空间.所以不同的芯片就有不同大小的ROM和RAM,存放用户程序的地方也不尽相同.所以要根据芯片进行修改. DSP 芯片的片内存储器, 只要没有被 TI 占用, 用户都可以全权支配. TI 设计了 "CMD文件"这种与