
定点DSP和浮点DSP的定义或区别
1、从宏观上讲:浮点dsp比定点dsp的动态范围大得多。定点运算中,程序员必须时刻关注溢出的发生,为了防止溢出,要么不断进行移位定标,要么做截尾。
前者耗费大量时间和空间,后者则带来精度的损失。相反,浮点运算dsp扩大了动态范围,提高了精度,节省了运算时间和存储空间,因为大大减少了定标,移位和溢出检查。
定点的计算不过是把一个数据当作整数来处理,通常AD采样来的都是整数,这个数相对于真实的模拟信号有一个刻度因子,大家都知道用一个16位的AD去采样一个0到5V的信号,那么AD输出的整数除以2^16再乘以5V就是对应的电压。
在定点DSP中是直接对这个16位的采样进行处理,并不将它转换成以小数表示的电压,因为定点DSP无法以足够的精度表示一个小数,它只能对整数进行计算。
而浮点DSP的优势在于它可以把这个采样得到的整数转换成小数表示的电压,并不损失精度(这个小数用科学记数法来表示),原因在于科学记数法可以表示很大的动态范围的一个信号。
2、硬件上:暂时抛开这些宏观的特点对比,单纯从技术的角度来看,定点与浮点的区别主要在两个方面,即硬件和软件。
硬件上的区别来自于:浮点dsp处理器具有浮点/整数乘法器,整数/浮点算术逻辑运算单元ALU,适合存放扩展精度的浮点结果的寄存器等。
3、软件上:再看看在软件开发上的不同之处,主要有浮点dsp编程的特点以及注意事项;定点dsp进行浮点运算时的定标,移位,检测溢出操作。
比较两个浮点数时,永远不要使用操作符==来判断是否相等。即使比较两个相同的数,还是可能有微小的舍入差别。
甚至定义精确的0,也不是很安全,尽管C语言中有0的表示,永远不要写这样的代码(x==0),而应该写成(fabs(x) < TINY),其中TINY定义为一个很小的值,也就是处理器的浮点格式舍入误差。
扩展资料:
大部分的信号链处理是在标准解码器中进行的,如MPEG-2,MPEG-4,JPEG-2000和H.264。这些算法被设计由定点运算来执行。更高精度和更大动态范围的浮点运算不仅毫无帮助,而且根本无法使用,因为这些算法通常都只精确到比特。
例如,在视频编解码器中使用的频域的变换实际上是某种形式的DCT变换(离散余弦变换)。表面上,似乎浮点运算更适合于DCT计算,就像适合FFT计算一样。
浮点运算确实会产生更加精确的DCT。不幸的是,视频编解码器中的DCT是被设计在定点处理器上完成的,并且只精确到比特,因此在这里追求更高的精度是完全错误的。
更何况,视频编解码器的大部分工作量都用于控制代码,那里同样也不需要浮点编码。比如,视频编解码器中使用的熵编码器占了整个工作量的很大一部分(在H.264算法中使用的CABAC编码器更是如此)。
这里所考虑的两种处理器,能根据下列事实较清楚地做出正确的选择,即Blackfin处理器拥有特别设计的加速视频算法性能的指令。
相反,SHARC处理器没有特殊的视频指令。此外,功耗对于移动市场来说是至关重要的,这几乎就将浮点处理器排除在外了。这些使选择变得轻而易举。
而其余的应用实例将需要我们进行更加深入的分析,才能做出正确的处理器选择。
参考资料:百度百科-DSP技术
从运算角度来说,当然是浮点运算精度高,所以对于运算要求比较高的用浮点运算,价位相对高些,功能由于偏重于运算,因此其他控制类功能少些。
实际用的更多的还是定点DSP,处理一般的数据运算足够用了,编程时注意数据格式的选择能提高运算精度
而定点DSP无法直接完成浮点运算,需要用程序来辅助完成浮点运算。