本帖最后由 Plantt 于 2017-12-13 17:30 编辑
DSP与其它处理器的差别
数字信号处理器(DSP)、通用微处理器(MPU)、微控制器(MCU)三者的区别在于:DSP面向高性能、重复性、数值运算密集型的实时处理;MPU大量应用于计算机;MCU则适用于以控制为主的处理过程。
DSP芯片的优点
DSP的运算速度比其它处理器要高得多,以FFT为例,高性能DSP不仅处理速度是MPU的4~10倍,而且可以连续不断地完成数据的实时输入/输出。DSP结构相对单一,普遍采用汇编语言编程,其任务完成时间的可预测性相对于结构和指令复杂(超标量指令)、严重依赖于编译系统的MPU强得多。以一个FIR滤波器实现为例,每输入一个数据,对应每阶滤波器系数需要一次乘、一次加、一次取指、二次取数,还需要专门的数据移动操作,DSP可以单周期完成乘加并行操作以及3~4次数据存取操作,而普通MPU完成同样的操作至少需要4个指令周期。因此,在相同的指令周期和片内指令缓存条件下,DSP的运算速度可以超过MPU运算速度的4倍以上。
DSP芯片的浮点与定点之分
在选择DSP器件的时候,是采用浮点还是采用定点,如果用定点是16位还是32位?其实这个问题和你的算法所要求的信号的动态范围有关。
浮点运算DSP比定点运算DSP的动态范围(动态范围:如音响系统重放时最大不失真输出功率与静态时系统噪声输出功率之比的对数值,又如一个多媒体硬盘播放器输出图像的最亮和最暗部分之间的相对比值)要大很多。定点DSP的字长每增加1bit,动态范围扩大6dB,16bit字长的动态范围为96dB。程序员必须时刻关注溢出的发生。例如:在做图像处理时,图像做旋转、移动等,就很容易产生溢出。这时,要么不断地移位定标,要么作截尾。前者要耗费大量的程序空间和执行时间,后者则很快带来图像质量的劣化。总之,是使整个系统的性能下降。在处理低信噪比信号的场合,例如进行语音识别、雷达和声纳信号处理时,也会发生类似的问题。而32bit浮点运算DSP的动态范围可以作到1536dB,这不仅大大扩大了动态范围,提高了运算精度,还大大节省了运算时间和存储空间,因为大大减少了定标,移位和溢出检查。
由于浮点DSP的浮点运算用硬件来实现,可以在单周期内完成,因而其处理速度大大高于定点DSP,这一优点在实现高精度复杂算法时尤为突出。
定点的计算不过是把一个数据当作整数来处理,通常AD采样来的都是整数,这个数相对于真实的模拟信号有一个刻度因子,大家都知道用一个16位的AD去采样一个0到5V的信号,那么AD输出的整数除以2^16再乘以5V就是对应的电压。在定点DSP中是直接对这个16位的采样进行处理,并不将它转换成以小数表示的电压,因为定点DSP无法以足够的精度表示一个小数,它只能对整数进行计算。而浮点DSP的优势在于它可以把这个采样得到的整数转换成小数表示的电压,并不损失精度(这个小数用科学记数法来表示),原因在于科学记数法可以表示很大的动态范围的一个信号,以IEEE754浮点数为例,单精度浮点格式:[31]1位符号[30-23]8位指数[22-00]23位小数。这样的能表示的最小的数是+-2^-149,最大的数是+-(2-2^23)*2^127,动态范围为20*log(最大的数/最小的数)=1667.6dB这样大的动态范围使得在编程的时候几乎不必考虑乘法和累加的溢出,而如果使用定点处理器编程,对计算结果进行舍入和移位则是家常便饭,这在一定程度上会损失精度。
原因在于定点处理的信号的动态范围有限,比如16位定点DSP,可以表示整数范围为1-65536,其动态范围为20*log(65536/1)=96dB.对于32定点DSP,动态范围为20*log(2^32/1)=192dB,远小于32位ieee浮点数的1667.6dB,但是实际上192dB对绝大多数应用所处理的信号已经足够了。由于AD转换器的位数限制,一般输入信号的动态范围都比较小,但在DSP的信号处理中,由于点积运算会使中间节点信号的动态范围增加,所以主要考虑信号处理流程中中间结果的动态范围,以及算法对中间结果的精度要求,来选择相应的DSP。另外就是浮点的DSP更易于编程,定点DSP编程中程序员要不断调整中间结果的PQ值,实际就是不断对中间结果进行移位调整和舍入。
实数运算可直接透过代码加入硬件运算中,而定点元件必须透过软件才能间接执行实数运算,这就增加了运算法指令并延长了开发时间。
整体上说,定点DSP在成本上具有优势而浮点DSP在易用上较优。
|