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