浮點計算的動態(tài)范圍適合更多應用
迄今為止浮點數(shù)字信號處理器(DSP)的成本比定點DSP急劇下降。隨著價格差距開始消失,你什么時候應該重新考慮浮點DSP是否更適合你的應用?如果定點DSP為已經(jīng)成功的設計提供了最好的結果,那么就沒有什么要重新考慮了。如果不是這樣,這種“權衡”可能會向浮點DSP傾斜,因為它擴大動態(tài)范圍(而且它對提高應用性能和簡化編程具有重要意義),縮短面市時間并且節(jié)約成本。
動態(tài)范圍:寬廣的優(yōu)勢
工程師選擇浮點處理器的主要原因就是它們能夠擴大的動態(tài)范圍,這樣或者滿足多種算法的需要,或者有利于多種算法。常見的例子包括由方程系統(tǒng)構成的解決方案,例如矩陣求逆、快速傅立葉變換(FFT)、濾波、自適應濾波、運動估計、最優(yōu)控制、模式檢測、算法編碼數(shù)據(jù)壓縮,以及計算機圖形學等。這些算法支持各種各樣的產(chǎn)品:從高性能的音頻到雷達、工業(yè)控制,再到醫(yī)學和軍事應用必需的高端圖像處理。
過去,性能與價格的折衷意味著具有浮點運算能力的DSP只能專門用于非寬動態(tài)范圍不可的高端的應用。對于希望有大動態(tài)范圍但不是非常必須的大多數(shù)應用,開發(fā)商可以在提高應用性能和(或)簡化編程方面從浮點DSP中得到好處。
定點處理器和浮點處理器的可用動態(tài)范圍之間有多大差別呢?用數(shù)字對比可提供清晰的描述。例如,一個16 bit的定點處理器具有96 dB的動態(tài)范圍,支持65,536個量化步長。(在信號處理中,量化是用一個有限精度的數(shù)字表示的一個值??商峁┑牧炕燃壴蕉?,表示結果的精度就越高。)一個32 bit的定點處理器具有192 dB的動態(tài)范圍,支持4,294,967,296個量化步長。
與此不同的是,一個32 bit的IEEE格式的浮點處理器具有1536 dB的動態(tài)范圍,它可能導致推出支持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個量化步長。雖然這么大的量化步長數(shù)是不可能的,因為需要256 bit才能將它們全部編碼,但是像這種程度的分辨率對于非常小的數(shù)字是有可能的。而且小數(shù)字的用處就在于它能精確地表示信號,因為隨著數(shù)字增大,分辨率就會變得越來越粗。
在某些情況下這樣程度的分辨率可能會認為過分。但是,幾乎可以肯定如果換成減小動態(tài)范圍的16 bit和32 bit定點處理器完全不能充分地讓工程師高效而輕松地完成工作。
讓我們舉一個在定點處理器上進行矩陣求逆算法的簡單例子。如果假設輸入數(shù)字具有16 bit的精度,輸出數(shù)字可能需要擴展16 bit的動態(tài)范圍,取決于輸入的小數(shù)形式。最壞情況下按照16.0形式(16 bit整數(shù),0 bit小數(shù))輸入,那么輸出必定為0.16形式(0 bit整數(shù),16 bit小數(shù))。因此它必需將處理器的總動態(tài)范圍擴展到32 bit以便處理這兩種數(shù)字,或者采用塊浮點算法——該方法將指數(shù)相同而尾數(shù)不同的一組數(shù)據(jù)作為數(shù)據(jù)塊進行處理來補償有限動態(tài)范圍的定點處理技術
采用塊浮點將數(shù)據(jù)分成組,組內的數(shù)據(jù)相對彼此按比例縮放,但是不能與其它組的成員按相同的比例縮放,即使諸如加法這樣簡單的數(shù)學運算。在比較復雜的矩陣求逆情況中,分組之間需要比較復雜的數(shù)學運算,即使是中等的矩陣求逆運算如果采用定點處理器而不是浮點處理器也很難實現(xiàn),。
為了更好地理解浮點處理器能夠提供寬動態(tài)范圍的意義,讓我們來分析幾種其它的廣泛使用的DSP算法,看它們如何采用定點和浮點運算的。
FFT,F(xiàn)IR濾波和相關
快速傅立葉變換(FFT)是另一類不適用于定點處理器的算法。其原因是:FFT分級實現(xiàn),每一級都要經(jīng)歷所謂的“位增長”率。每一級的最大值可能會逐級加倍。(實際上這些值幾乎增加到三倍,但是這樣的增長率并不是每一級都會持續(xù)發(fā)生的。)如果不精心地規(guī)劃設計,這些值就會溢出,結果產(chǎn)生的FFT不是噪聲就是精度不夠而無法使用。
浮點處理器克服了這些問題,因為它具有極大的動態(tài)范圍不可能發(fā)生溢出,還因為它可以自動地縮放。工程師只需要寫代碼,而無需擔心數(shù)值會溢出或者當算法需要縮放時會丟失尾數(shù)位的問題。
當然,可提供許多算法可抵消定點運算中的位增長。但是它們對于某些應用需求還不是令人滿意的。這些算法中最簡單的一種就是在進行FFT的每一級運算之前將所有數(shù)值減半,如果這樣做,每一級都會損失許多寶貴的動態(tài)范圍的bit位。一種比較復雜的方法是實現(xiàn)塊浮點(在前面部分介紹),它會檢查位增長而且僅當位增長需要時才將數(shù)值減半。其缺點就是塊浮點耗費性能周期——而且更重要的是——有時候仍然需要在每一級減半,這取決于輸入信號。
無論哪一種方法,用定點處理器完成一次8192點FFT都會損失13 bit的動態(tài)范圍,因為要計算其13級中的每一級。當輸入為16 bit時,這樣只剩下3 bit的有效分辨率,其中1 bit為符號位。如果FFT只是用來測量信號的頻譜,那么就只能提供8個量化等級——這對于測量主諧波往往都不夠用,更別說其它了。如果對于大于8192點的FFT采用16 bit的定點運算,結果就更加不夠用了。
下面考慮一種更加嚴重的情況,其中FFT用于實現(xiàn)一個有限沖擊響應(FIR)濾波器或相關器。FFT的結果需要乘以一個向量,而且必須完成8192點的反FFT(IFFT)變換以便回到時域。好情況是信號只有3 bit,所以位增長不會給IFFT變換造成問題。壞情況是IFFT變換的結果只有3 bit的動態(tài)范圍,即使在有無限精度可能的情況下。記住采用更多的bit數(shù)來表示一個樣值可以更接近信號并減小量化誤差(噪聲),這樣可以合乎要求地提高噪比(SNR)。如果這個FIR濾波器是一種16 bit的CD質量音頻產(chǎn)品的器件,該器件應該具有18 dB的SNR——不可能達到高銷售量的產(chǎn)品。
采用FFT和定點數(shù)學運算來實現(xiàn)高保真音頻產(chǎn)品的FIR濾波器可能會導致更差的結果。音頻混響的實現(xiàn)通常需要延時為1 s或者更長的FIR濾波器。當今高端的音頻產(chǎn)品采用192 kHz采樣速率,必須要120 dB的SNR值。以192 kHz采樣速率采集1 s長的數(shù)據(jù)需要一個容納192,000個音頻采樣值的緩沖器。
傳統(tǒng)的FFT方法需要用2的冪指數(shù)表示的緩沖器,它需要256K 點的FFT。損失的動態(tài)范圍將達到18 bit,從而去掉16 bit的定點處理器,就沒有可用的數(shù)據(jù)位。一個32 bit的處理器只能留下14 bit的數(shù)據(jù),產(chǎn)生84 dB的SNR值——遠遠達不到需要的性能。另外一種方法就是采用64 bit的處理,但是性能會受到嚴重的沖擊,因為一個64 bit的乘法運算需要16次16 bit乘法和少量的移位運算。
在雷達、聲納和醫(yī)學圖像處理等相關計算和濾波器長度可能達上百萬樣點的應用中,浮點處理和定點處理方法之間的區(qū)別仍然比較明顯。因為這些應用需要如此之大的FFT,所以它們一直都采用浮點處理器。
最優(yōu)控制
最優(yōu)控制問題,它包括一些自適應的濾波技術,可以看成是方程組系統(tǒng)的一種解決方案(通常令最小化函數(shù)的偏導數(shù)等于零)。最優(yōu)控制算法用于根據(jù)動態(tài)變化的輸入特性自動完成系統(tǒng)控制某種行為的任何場合;典型實例包括諸如防抱死制動系統(tǒng)的工業(yè)設備和汽車系統(tǒng)。
即使是在最簡單的最小均方值(LMS)濾波器算法中(方程是線性的,因為它們是二次方程式的導數(shù)),解決系統(tǒng)問題也需要對矩陣求逆。如果矩陣非?!耙?guī)則”——即特征值都一樣大小——可以采用定點運算完成求逆,但是實現(xiàn)起來還是有很困難。
如果矩陣不是很規(guī)則(通常情況都是這樣),矩陣求逆所需的數(shù)學運算開始同時處理小的和大的數(shù)字。將大的數(shù)字縮小以便防止它們溢出,同時損失了小的數(shù)字,這樣會嚴重降低結果的精度。相比之下,浮點算法能同時處理小的和大的數(shù)字,因為可用動態(tài)范圍很大,而且浮點縮放不會損失較小的數(shù)字。
C語言, 匯編,或二者均可
讓我們將動態(tài)范圍和瞬時的數(shù)學精度放在一邊,面市時間和系統(tǒng)成本是任何系統(tǒng)設計工程的決定性因素。顯然,加快開發(fā)周期可以縮短面市時間。許多開發(fā)商都因為這個原因很喜愛C語言的生產(chǎn)力和易編程性,而且他們都已經(jīng)很精通這種高級語言。目前一代的浮點DSP支持高級C語言和匯編語言兩種語言的開發(fā)。
對于項目中的這些部分,可能從手工優(yōu)化的匯編代碼中獲得額外的性能優(yōu)勢,最好的DSP還能通過一種為喜愛采用C語言編碼的工程師所熟悉的代數(shù)匯編語法,簡化了匯編程序設計。互鎖流水線保護是一種相關的功能,它允許正如C語言那樣順序地寫匯編代碼。執(zhí)行的順序不會改變,所有的代碼都是可中斷的。
再回到動態(tài)范圍,因為浮點數(shù)學運算減輕了影響精度的某些計算問題——溢出、縮放、同時處理小數(shù)字和大數(shù)字——它有助于縮短面市時間,因為程序設計變得簡單了。
成本“方程式”
與定點DSP相比,浮點DSP的單位成本正變得越來越低,這都多虧了技術和封裝的進步。但是,無論原始單位成本看起來多么吸引人,如果系統(tǒng)總成本可以滿足設計的價格目標,外圍設備和存儲器等方面是不能忽視的。
例如,選擇一種具有每美元最高性能密度但是沒有適合于應用的外圍設備的處理器,就需要在印制電路板(PCB)上增加外部邏輯電路。選擇一種具有每美元最高性能密度以及適當?shù)耐鈬O備但是板內存儲器不夠的處理器,該設計就需要外部存儲器。在兩種情況下,起初看起來很有吸引力的系統(tǒng)性能和成本都很可能打折扣。
根據(jù)需要擴展到增加計算能力的功能也會影響系統(tǒng)總成本(以及面市時間)。但是這個屬性對于浮點處理器來說不受限制,當今市場上的領先浮點處理器,例如ADI公司的SHARC和TigerSHARC系列處理器,都是無需外接電路的。也就是說,它們使得開發(fā)商僅僅在系統(tǒng)中增加處理器的數(shù)量就可以提高性能。
為你自己算一算
隨著浮點處理器相對于定點處理器的成本差距的下降,浮點DSP的寬動態(tài)范圍和高計算精度的特性正在被越來越多的應用所采用并且從中獲益。應該根據(jù)對你特定的設計關系最大的參數(shù)提供的信息做出選擇決定。如今,這種選擇就是關于浮點計算相對于你對應用性能和容易編程的需求能達到怎樣的滿意程度。
作者簡介
Boris Lerner現(xiàn)任美國模擬器件公司(Analog Devices, Inc.,簡稱ADI)的高級DSP應用工程師(boris.lerner@analog.com),工作在馬薩諸塞州諾伍德市。動態(tài)范圍是作者所精通的領域。Lerner是一位有12年工作經(jīng)驗的應用電子工程師,獲得數(shù)學博士學位,而且在大學任教。他擁有兩項專利,而且與他人合作完成的自適應均衡器獲得《Discover Magazine(發(fā)現(xiàn))》雜志1996年技術創(chuàng)新獎決賽選手的榮譽。
SHARC和TigerSHARC是ADI公司的注冊商標。
評論