迄今为止浮点数字信号处理器(DSP)的成本比定点DSP急剧下降。随着价格差距开始消失,什么时候应该重新考虑浮点DSP是否会更适合你的应用呢?如果用定点DSP已经能够提供最好的结果了,那么就不必再重新考虑使用浮点DSP了。如果不是这样,可以考虑使用浮点DSP,因为它不但能扩大动态范围,对提高应用性能和简化编程具有重要意义,而且还能缩短面市时间并节约成本。
动态范围:宽广的优势
工程师选择浮点处理器的主要原因就是它们能够扩大的动态范围,这样能满足多种算法的需要。常见的例子包括由方程系统构成的解决方案,例如矩阵求逆、快速傅立叶变换(FFT)、滤波、自适应滤波、运动估计、最优控制、模式检测、算法编码数据压缩,以及计算机图形学等。这些算法支持各种各样的产品:从高性能的音频到雷达、工业控制,再到医学和军事应用必需的高端图像处理。
过去,因为性能要求与价格方面的因素,使得浮点DSP大多专门用于宽动态范围的高端应用。对于希望有大动态范围但不是非常必须的大多数应用,开发商可以在提高应用性能和\或简化编程方面从浮点DSP中得到好处。
那么,定点处理器和浮点处理器的可用动态范围之间有多大差别呢?用数字对比可提供清晰的描述。例如,一个16 bit的定点处理器具有96
dB的动态范围,支持65,536个量化步长。(在信号处理中,量化是用一个有限精度的数字表示的一个值。可提供的量化等级越多,表示结果的精度就越高。)一个32
bit的定点处理器具有192 dB的动态范围,支持4,294,967,296个量化步长。
与此不同的是,一个32 bit的IEEE格式的浮点处理器具有1536 dB的动态范围,它可能导致推出支持115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,936个量化步长。虽然这么大的量化步长数是不可能的,因为需要256
bit才能将它们全部编码,但是像这种程度的分辨率对于非常小的数字是有可能的。而且小数字的用处就在于它能精确地表示信号,因为随着数字增大,分辨率就会变得越来越粗。
在某些情况下这样程度的分辨率可能会认为过分。但是,几乎可以肯定如果换成减小动态范围的16 bit和32 bit定点处理器,则完全不能充分地让工程师高效而轻松地完成工作。
图(略)
让我们举一个在定点处理器上进行矩阵求逆算法的简单例子。如果假设输入数字具有16 bit的精度,输出数字可能需要扩展16 bit的动态范围,取决于输入的小数形式。最坏情况下按照16.0形式(16
bit整数,0 bit小数)输入,那么输出必定为0.16形式(0 bit整数,16 bit小数)。因此它必需将处理器的总动态范围扩展到32
bit以便处理这两种数字,或者采用块浮点算法--该方法将指数相同而尾数不同的一组数据作为数据块进行处理,来补偿有限动态范围的定点处理技术。
采用块浮点将数据分成组,组内的数据相对彼此按比例缩放,但是不能与其他组的成员按相同的比例缩放,即使诸如加法这样简单的数学运算。在比较复杂的矩阵求逆情况中,分组之间需要比较复杂的数学运算,即使是中等的矩阵求逆运算,如果采用定点处理器而不是浮点处理器也很难实现。
为了更好地理解浮点处理器能够提供宽动态范围的意义,让我们来分析几种其他的广泛使用的DSP算法,看它们是如何采用定点和浮点运算的。
FFT,FIR滤波和相关
快速傅立叶变换(FFT)是另一类不适用于定点处理器的算法。其原因是:FFT分级实现,每一级都要经历所谓的“位增长”率。每一级的最大值可能会逐级加倍(实际上这些值几乎增加到三倍,但是这样的增长率并不是每一级都会持续发生的)。如果不精心地规划设计,这些值就会溢出,结果产生的FFT不是噪声就是因为精度不够而无法使用。
浮点处理器克服了这些问题,因为它具有极大的动态范围,并能自动地缩放,所以不会有溢出发生。工程师只需要写代码,而无需担心数值会溢出或者当算法需要缩放时会丢失尾数位的问题。
当然,可提供许多算法可抵消定点运算中的位增长。但是它们对于某些应用需求还不是令人满意的。这些算法中最简单的一种就是在进行FFT的每一级运算之前将所有数值减半,但这样做,每一级都会损失许多宝贵的动态范围的位。一种比较复杂的方法是实现块浮点,它会检查位增长而且仅当位增长需要时才将数值减半。其缺点就是块浮点耗费性能周期,而且更重要的是,有时候仍然需要在每一级减半,当然这取决于输入信号。
无论哪一种方法,用定点处理器完成一次8192点FFT都会损失13 bit的动态范围,因为要计算其13级中的每一级。当输入为16
bit时,这样只剩下3 bit的有效分辨率,其中1 bit为符号位。如果FFT只是用来测量信号的频谱,那么就只能提供8个量化等级,这对于测量主谐波往往都不够用。如果对于大于8192点的FFT采用16
bit的定点运算,结果就更加不够用了。
下面考虑一种更加严重的情况,其中FFT用于实现一个有限冲击响应(FIR)滤波器或相关器。FFT的结果需要乘以一个向量,而且必须完成8192点的反FFT(IFFT)变换以便回到时域。好情况是信号只有3
bit,所以位增长不会给IFFT变换造成问题。坏情况是IFFT变换的结果只有3 bit的动态范围,即使在有无限精度可能的情况下。记住采用更多的bit数来表示一个样值可以更接近信号并减小量化误差(噪声),这样可以合乎要求地提高噪比(SNR)。如果这个FIR滤波器是一种16
bit的CD质量音频产品的器件,该器件应该具有18 dB的SNR。
采用FFT和定点数学运算来实现高保真音频产品的FIR滤波器可能会导致更差的结果。音频混响的实现通常需要延时为1 s或者更长的FIR滤波器。当今高端的音频产品采用192
kHz采样速率,必须要120 dB的SNR值。以192 kHz采样速率采集1 s长的数据需要一个容纳192,000个音频采样值的缓冲器。
传统的FFT方法需要用2的幂指数表示的缓冲器,它需要256K 点的FFT。损失的动态范围将达到18 bit,从而去掉16 bit的定点处理器,就没有可用的数据位。一个32
bit的处理器只能留下14 bit的数据,产生84 dB的SNR值--远远达不到需要的性能。另外一种方法就是采用64 bit的处理,但是性能会受到严重的冲击,因为一个64
bit的乘法运算需要16次16 bit乘法和少量的移位运算。
在雷达、声纳和医学图像处理等相关计算和滤波器长度可能达上百万样点的应用中,浮点处理和定点处理方法之间的区别仍然比较明显。因为这些应用需要如此之大的FFT,所以它们一直都采用浮点处理器。
最优控制
最优控制问题包括一些自适应的滤波技术,可以看成是方程组系统的一种解决方案(通常令最小化函数的偏导数等于零)。最优控制算法用于根据动态变化的输入特性自动完成系统控制某种行为的任何场合;典型实例包括诸如防抱死制动系统的工业设备和汽车系统。
即使是在最简单的最小均方值(LMS)滤波器算法中(方程是线性的,因为它们是二次方程式的导数),解决系统问题也需要对矩阵求逆。如果矩阵非常“规则”,即特征值都一样大小,则可以采用定点运算完成求逆,但是实现起来还是有很大的困难。
如果矩阵不是很规则(通常情况都是这样),矩阵求逆所需的数学运算开始同时处理小的和大的数字。将大的数字缩小以便防止它们溢出,同时损失了小的数字,这样会严重降低结果的精度。相比之下,浮点算法能同时处理小的和大的数字,因为可用动态范围很大,而且浮点缩放不会损失较小的数字。
兼容C和汇编语言
面市时间和系统成本是任何系统设计工程的决定性因素。显然,加快开发周期可以缩短面市时间。许多开发商都因为这个原因很喜爱C语言的生产力和易编程性,而且他们都已经很精通这种高级语言。目前的浮点DSP支持C语言和汇编语言。
对于项目中的这些部分,可能从手工优化的汇编代码中获得额外的性能优势,最好的DSP还能通过一种为喜爱采用C语言编码的工程师所熟悉的代数汇编语法,简化了汇编程序设计。互锁流水线保护是一种相关的功能,它允许正如C语言那样顺序地写汇编代码。执行的顺序不会改变,所有的代码都是可中断的。
再回到动态范围,因为浮点数学运算减轻了影响精度的某些计算问题(溢出、缩放、同时处理小数字和大数字),它有助于缩短面市时间,因为程序设计变得简单了。
成本“方程式”
与定点DSP相比,浮点DSP的单位成本正变得越来越低,这都多亏了技术和封装的进步。但是,无论原始单位成本看起来多么吸引人,如果系统总成本可以满足设计的价格目标,外围设备和存储器等方面是不能忽视的。
例如,选择一种具有单位美元最高性能密度、但是没有适合于应用的外围设备的处理器,就需要在电路板上增加外部逻辑电路。选择一种具有单位美元最高性能密度以及适当的外围设备但是板内存储器不够的处理器,该设计就需要外部存储器。在两种情况下,起初看起来很有吸引力的系统性能和成本都很可能大打折扣。
根据需要扩展到增加计算能力的功能也会影响系统总成本以及面市时间。但是这个属性对于浮点处理器来说不受限制,当今市场上的领先浮点处理器,例如ADI的SHARC
和TigerSHARC 系列处理器,都无需外接电路。也就是说,它们使得开发商仅仅在系统中增加处理器的数量就可以提高性能。
为你自己算一算
随着浮点处理器相对于定点处理器的成本差距的下降,浮点DSP的宽动态范围和高计算精度的特性正在被越来越多的应用所采用并从中获益。在实际应用中应该根据对应用性能和容易编程的需求程度做出合理的选择。
|