杜亞琦,周建英
(1. 通信信息控制和安全技術(shù)重點實驗室 浙江 嘉興314033;2.中國電子科技集團(tuán)公司第三十六研究所 浙江 嘉興314033)
FIR濾波器由于優(yōu)良的線性相位特性以及其靈活、快速、穩(wěn)定的特點,在多個領(lǐng)域都得到了廣泛的應(yīng)用。在圖像處理等領(lǐng)域中,對于數(shù)據(jù)傳輸速度和穩(wěn)定性的要求越來越高,導(dǎo)致其對FIR濾波器的運(yùn)算速度和穩(wěn)定性的要求也越來越高。根據(jù)了解,目前高速的FIR濾波器設(shè)計大部分是基于FPGA平臺的,但是這種硬件平臺雖然速度較快,但是其穩(wěn)定性和精確度不高以及受環(huán)境影響較大,靈活性也較差。而DSP平臺雖然穩(wěn)定性和靈活性好,但是運(yùn)算速度和實時性較差。鑒于這些特點,本文采用了在PowerPC硬件平臺上,利用AltiVec向量加速技術(shù)提高運(yùn)算速度以適應(yīng)實時性的要求。
AltiVec技術(shù)是由美國APPLE公司、美國 IBM公司與美國 Motorola公司在 PowerPC G4系列微處理器中添加的多媒體處理指令集。AhiVec技術(shù)是對PowerPC指令集體系結(jié)構(gòu)的擴(kuò)展,其目的是提高PowerPC的向量處理能力以提供對多媒體處理的支持[1]。AltiVec技術(shù)能夠通過運(yùn)行一個指令處理多組數(shù)據(jù),這種形式被稱作SIMD并行處理。利用AltiVec的指令集可以顯著提高復(fù)雜信號處理和大數(shù)據(jù)量運(yùn)算的效率。AltiVec技術(shù)本身是一項通用技術(shù),具有廣泛的應(yīng)用,只要數(shù)據(jù)是可并行處理的就可應(yīng)用AltiVec技術(shù)。
該技術(shù)采用128位的數(shù)據(jù)寬度,所以提供了一個新的寄存器文件,包含32個128位的面向向量處理的寄存器。其128位數(shù)據(jù)寬度可分為16個字節(jié)、8個半字、4個字以及4個單精度浮點數(shù)。AltiVec技術(shù)增加了包括算術(shù)運(yùn)算指令(整數(shù)或單精度浮點數(shù)乘積,加和等)、邏輯運(yùn)算指令和內(nèi)存操作指令在內(nèi)的162條指令。除內(nèi)存操作指令可以操作內(nèi)存以外,其他指令的所有源操作數(shù)只可以是寄存器。指令根據(jù)它們?nèi)绾翁幚硎噶繑?shù)據(jù)而分屬兩個組:元素內(nèi)部操作和元素間操作。元素內(nèi)部操作是從源寄存器的相同位置或地點獲取元素,然后并行地處理它們,最后把結(jié)果放到目標(biāo)寄存器的相同位置。元素間操作是從源寄存器中不同的位置獲取元素,然后進(jìn)行處理,最后把結(jié)果輸出到目標(biāo)寄存器的不同位置。改序指令和它的變異都執(zhí)行元素間操作。
假設(shè)一個N階FIR濾波器的單位沖激響應(yīng)序列為h(n)(n= 0 ,1,2,···,N- 1),輸入信號為x(n),則FIR濾波器方程為:
y(n)為輸出信號[2]。對式(1)進(jìn)行Z變換,整理可得FIR濾波器的傳遞函數(shù)為:
在設(shè)計數(shù)字濾波器時,通常采用MATLAB來進(jìn)行輔助設(shè)計和仿真,本文采用FDATool設(shè)計法設(shè)計一個FIR低通濾波器。FDATool(filter design & analysis tool)是MATLAB信號處理工具箱里專用的濾波器設(shè)計和分析工具,為濾波器設(shè)計提供了一個交互式的設(shè)計環(huán)境,用戶可以根據(jù)對復(fù)制和零極點圖的設(shè)置,設(shè)計幾乎所有基本的常規(guī)濾波器,用來顯示濾波器的各種特性;下半部分為參數(shù)設(shè)定區(qū),用來設(shè)定濾波器的各種參數(shù),包括濾波器的類型、設(shè)計方法、階數(shù)、頻率等。設(shè)計方法選擇布萊克曼窗,根據(jù)設(shè)計需要的參數(shù)計算出濾波器的結(jié)束、過度帶寬等,在FDATool界面上填好各種設(shè)計參數(shù)即可[3]。
以簡單的串行結(jié)構(gòu)為例,在軟件實現(xiàn)中,F(xiàn)IR濾波器是將待濾波的數(shù)據(jù)序列與濾波系數(shù)序列相乘后再相加運(yùn)算,同時要模仿FIR結(jié)構(gòu)中的延遲線將數(shù)據(jù)在存儲器中滑動。在以往的通用器件進(jìn)行此類乘加運(yùn)算時,都會耗費大量的CPU資源和時間。在PowerPC平臺上,AltiVec向量加速技術(shù)的特殊指令集包含乘法和加法的并行加速處理指令,這些指令的應(yīng)用極大的提高了這些數(shù)學(xué)運(yùn)算的計算速度[3]。
在實現(xiàn)N階FIR濾波器時,常規(guī)的流程是:首先在數(shù)據(jù)存儲區(qū)開辟 個單元的緩沖區(qū),存放延遲移位后最新的 個采用值,計算每一個輸出值,都需要讀取這 個采樣值并進(jìn)行 次乘法和累加,每讀完一個樣值后,都將此樣值向后移動,讀完最后一個樣值后,最后的樣值被推出緩沖區(qū),起始端又加入新的采樣值。將之前計算出的濾波器系數(shù)存放在一個緩存區(qū)中,與開辟出的采用值進(jìn)行運(yùn)算。這種常規(guī)的流程每計算出一個輸出值,都需要 次乘法和 次的加法。如果采用AltiVec向量加速技術(shù),利用vec_madd和vec_sums指令和vec_add指令來將其中計算量最大的乘加運(yùn)算進(jìn)行加速,每個128位的向量單元可以一次裝載16個不同的數(shù),向量與向量間的每一個元素都進(jìn)行運(yùn)算,結(jié)果保存在一個向量相應(yīng)的元素中,這樣的一次運(yùn)算與常規(guī)的一次運(yùn)算所花費的時間是一樣的,所以在完成相同的任務(wù)的情況下,向量運(yùn)算單元比常規(guī)運(yùn)算要快得多[3,5]。FIR濾波器的輸出計算轉(zhuǎn)換成運(yùn)用AltiVec向量加速技術(shù)首先要對表達(dá)式進(jìn)行數(shù)學(xué)變換,轉(zhuǎn)換成可以方便用向量單元并行處理的方式。具體轉(zhuǎn)換的原理圖如圖1所示。
假設(shè)N為4的倍數(shù)(如果不是,可以用添加零向量的方式補(bǔ)充),具體步驟如下:
1)設(shè)某時刻N(yùn)個采用值向量為An= {a1,a2,a3,··,aN},濾波器系數(shù)為向量B= {b1,b2,b3, ···,bN},輸出為y(n)(n= 0 , 1, 2, 3 · ··) ;
2)定義一個中間變量vet_temp = vector float{0.0, 0.0 , 0.0,0.0};
3)利用vec_madd指令計算出An于 對應(yīng)元素的乘積與vet_temp的和,并將得到的值再賦給vet_temp。
圖1 AltiVec加速濾波器設(shè)計原理Fig. 1 The design principle of AltiVec accelerating filter
4)重復(fù)3)的步驟,直至做完N個采樣值為止,得到最后一個vet_temp,用vec_sums指令將vet_temp的4個元素加起來就得到了n時刻的輸出y(n)。
主要部分的實現(xiàn)代碼為:
另外,當(dāng)對向量數(shù)據(jù)進(jìn)行操作時,還必須注意對齊的問題。Altivec要求我們從某個緩沖區(qū)中將數(shù)據(jù)裝入向量類型的變量的時候,緩沖區(qū)的地址必須是16位對齊的,否則裝入的數(shù)據(jù)將會出錯,而且系統(tǒng)不會報告錯誤。不過,系統(tǒng)提供了一系列的指令來解決這個問題,例如Altivec指令vec_ld。
應(yīng)用AltiVec向量加速技術(shù)后,每次可以計算4個元素的乘法以及跟前面4個相乘的結(jié)果相加的運(yùn)算,而常規(guī)的算法每次只能運(yùn)算一個元素的乘法或者一次加法,運(yùn)算效率比原來可以成倍的增加。為了驗證前面所設(shè)計的AltiVec并行優(yōu)化設(shè)計的加速效果,我們在真實的硬件平臺上做了驗證試驗。試驗平臺是PowerPC 8641D系列[5-6]。MPC8641處理器家族建立在Power體系技術(shù)之上,集合一個或兩個e600核,滿足了網(wǎng)絡(luò),存儲,無線設(shè)施,以及一般的嵌入式應(yīng)用的系統(tǒng)邏輯需求。
我們在此平臺上,分別對常規(guī)的C語言模式的代碼和運(yùn)用了AltiVec向量加速后的代碼的運(yùn)算數(shù)據(jù)量與運(yùn)算時間的關(guān)系進(jìn)行了測試,如圖2所示。在圖中可以看出,運(yùn)算數(shù)據(jù)量小的時候,運(yùn)用AltiVec技術(shù)優(yōu)化的算法的效率比常規(guī)運(yùn)算的效率提高不是很明顯,這主要因為:首先,AltiVec技術(shù)的指令只能夠處理寄存器間的運(yùn)算,所以同常規(guī)算法相比要多出從存儲器讀入數(shù)據(jù)到寄存器和寫寄存器中數(shù)據(jù)到存儲器的指令;其次,考慮到AltiVec技術(shù)是16字節(jié)地址對齊的,程序在進(jìn)行差分運(yùn)算時,需要使用vec_ld函數(shù)來完成差分?jǐn)?shù)據(jù)的裝載,因此會多出相應(yīng)時間;再次,AltiVec技術(shù)采用向量并行處理,一次運(yùn)算4個數(shù)據(jù),而對于數(shù)據(jù)總量不為4的整數(shù)倍的情況,程序中還要加入余數(shù)部分的處理代碼。而隨著運(yùn)算數(shù)據(jù)量的增大,運(yùn)用AltiVec技術(shù)優(yōu)化的算法的優(yōu)越性就大大的體現(xiàn)了出來,所以在大數(shù)據(jù)量FIR濾波器的信號處理系統(tǒng)中,AltiVec技術(shù)則發(fā)揮了重要的作用。
圖2 優(yōu)化前后性能比較Fig. 2 Performance comparison before and after optimization
本文研究了利用AltiVec向量加速技術(shù)對FIR濾波器設(shè)計進(jìn)行了優(yōu)化,并結(jié)合了基于PowerPC 8641D平臺的實驗系統(tǒng)對優(yōu)化算法的運(yùn)算時間進(jìn)行了實驗。實驗表明,這種優(yōu)化算法較之常規(guī)的算法,運(yùn)算所耗時間隨著數(shù)據(jù)量的增大,顯著的減小,運(yùn)算效率明顯提高。對于并行結(jié)構(gòu)的FIR濾波器,這種優(yōu)化算法同樣適用。而且這對利用AltiVec技術(shù)研究更加復(fù)雜的信號處理算法奠定了基礎(chǔ)。
[1]Mark Slater.Vector Processing in the Motorola PowerPC 7400[Z].
[2]黃全振,李泉溪,陳中偉.基于TMS320C54X的FIR濾波器的系統(tǒng)設(shè)計及應(yīng)用[J].河南理工大學(xué)學(xué)報,2008,27(3):314-318.
HUANG Quan-zhen,LI Quan-xi,CHEN Zhong-wei.The design and application of FIR filter based on TMS320C54X[J].Journal of Henan Polytechnic University,2008,27(3):314-318.
[3]Freescale. AltiVec Technology Programming Interface Manual[Z].
[4]趙秀玲,張利,武玉強(qiáng).MATLAB輔助DSP實現(xiàn)FIR數(shù)字濾波器[J].現(xiàn)代電子技術(shù),2007(9):38-40.
ZHAO Xiu-ling,ZHANF Li,WU Yu-qiang.Matlab Aia DSP in Approaching FIR Digital Filter[J].Modern Electronics Technique,2007(9):38-40.
[5]黃小平.基于AltiVec技術(shù)的向量處理單元的結(jié)構(gòu)研究[D].西安:西北工業(yè)大學(xué), 2006.
[6]馬琳. PowerPC體系結(jié)構(gòu)增加向量處理能力[J].今日電子,1998(10):7.
MA Lin. The ability of vector processing technology is increased by PowerPC processor[J]. Electronic Products China,1998(10):7.