• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

在定点DSP系统中可否实现浮点运算?

shuxian 2015-07-07 浏览量:938
在定点DSP系统中可否实现浮点运算?
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案

  • 在定点DSP上实现浮点运算 可以考虑用Q格式

    举个例子说明定点算法本质:

    首先明确:CPU计算整数比浮点方便迅速。
    例如:两个小数相乘0.123*0.456,可以先将二者各乘以1000倍,变成123*456,方便CPU计算。算完之后,再将结果除以1000000,就是真实的结果了。
    假设Q16定点算法,就是0.123*2^16*0.456*2^16,将两个数同时扩大2^16倍,算完之后,再除回去。为什么要2^16而不是乘以1000呢?因为以2为基数的乘除法在CPU里通过移位完成,相当迅速。
    基本原理就是这样,不过实际应用的时候还要考虑溢出,余数效应等影响。

    这个Q格式我在AD的采样数据这一次块用过了,主要是你要先确定你现在程序处理中所需要的数据范围,然后选择一种Q格式,而不是你现在想到用什么Q格式就是什么格式,虽然Q格式中提供了格式转换函数,但是这些函数不能随意乱用,否着会编译出错,一般都是整体确定了数据范围,然后在这个范围内确定相同的Q格式,然后就可以开始利用Q格式提供的函数进行体会平常的函数,这个工程需要注意的是Q格式函数中的形参需要的类型一定要和你所给的实参类型一致,如果不一样的话,一样要利用Q格式的格式转换函数转换成一样的。然后在进行计算。其中Q格式库德添加以及函数的利用方法可以本论坛很多好心人的杰作。
     
     
    我这里用加法进行样例说明:

    浮点到定点Xq=X*2^q
    定点到浮点X=Xq/2^q

    设x=0.5 y=3.1 则浮点运算的结果为z=x+y=0.5+3.1=3.6
    Qx=15//为什么x=0.5要定标为Q15呢?因为Q15能表示的范围为-1<=X<=1-1/32768,精度为1/32768,目的是为了提高精度
    Qy=13//原因同上
    Qz=13//原因同上
    x=0.5*2^15=16384//Q15定标
    y=3.1*2^13≈25395//Q13定标

    temp=25395<<2=101580//为什么要左移两位呢?把y扩大到相同的标尺上进行运行,说白了就是统一单位进行运算。呵呵
    temp=x+temp=16384+101580=117964
    z=(int)(117964L>>2)=29491//结果用Q13表示

    因为z的Q为13,所以定点值z=29491即为z=29491/2^13≈3.59998≈3.6//精度高

    同样是上面的运算,我用Q4定标计算
    Qx=4 //Q4表示的范围-2048<=X<=2048-1/16,精度为1/16
    Qy=4
    Qz=4

    x=0.5*2^4=8
    y=3.1*16≈50
    temp=8+50=58

    z=58/16=3.625≈3.6//精度度低

    转自:http://blog.sina.com.cn/s/blog_6d0b133f0100quhx.html

    • 发布于 2015-07-07
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:4
  • DSP分为定点和浮点。都可以进行浮点运算,不过浮点DSP比定点DSP做浮点运算速度快。

    定点DSP做浮点运算可以用Q格式,也可以不用。不过用Q格式更好一些。

    • 发布于2015-07-07
    • 举报
    • 评论 0
    • 0
    • 0

  • 把浮点数据Q化处理,运算完成后再还原为浮点数。
    比如FFT和滤波算法。但实际测试时发现Q化处理的数据精度不高,误差有点大。
    • 发布于2015-07-19
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

在定点DSP系统中可否实现浮点运算?