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