引言
本文介紹在ADSP-TS20x TigerSHARC®處理器上執(zhí)行一個2階16-bit IIR濾波,利用了直接型II。
濾波器結(jié)構(gòu)
2階濾波器的結(jié)構(gòu)見圖1?梢酝ㄟ^若干個2階濾波器的級聯(lián)或并聯(lián)達(dá)到高于2階的濾波。這樣的濾波器的階數(shù)是2的倍數(shù)。做一個奇數(shù)階數(shù)的濾波器需要一個1階濾波器和一個或幾個2階濾波器。 列表3中的示例代碼沒有包括這一點(diǎn)。
圖1 2階直接型II
下面的方程式1描述了這種類型的濾波器結(jié)構(gòu)。
方程式1 描述2階直接型II IIR第一個分子系數(shù)( b0)總設(shè)為1,這樣需要將輸 入x[i]除以b0,b1和b2再除以b0。示例中即如是做法,見下面的列表1。
執(zhí)行
以流水線方式執(zhí)行一個小的遞歸運(yùn)算是個困難的問題。這個濾波器中W[i]的值取決于W[i-1]。這種前后依賴限制了流水線操作的程度。在這個程序中,所有用來產(chǎn)生w[i] 和 y[i]的乘法運(yùn)算都在單個周期中計(jì)算。然而,把部分結(jié)果再送入輸入,累加得到最終的結(jié)果需要5個周期。這期間乘法器處于空閑狀態(tài),結(jié)果造成程序只利用了一個計(jì)算單元。由于用于管理延遲線(還有內(nèi)存裝取)的操作由ALU完成,因此要在每個指令行中插入多個指令槽也是個問題。上面提到,可以通過并連2階濾波器得到高階濾波器。這樣就可以同時在兩個計(jì)算區(qū)塊計(jì)算兩個濾波輸出,最后累加得到這些結(jié)果的和。這2個要素的狀態(tài)存儲在寄存器yR5中,在每次遞歸運(yùn)算中,每個新得到的w[i]先被插入狀態(tài)寄存器,再進(jìn)行左移位操作。由于延遲線是重疊的,因而可以執(zhí)行一個如圖2所示的上的4個乘法運(yùn)算。
圖2 延遲線和系數(shù)的乘法部分結(jié)果由Sideways Summation指令得到。如果系數(shù)既有分?jǐn)?shù)又有整數(shù),那么這4-way乘法必須分成兩個獨(dú)立的乘法分別運(yùn)算,同時會降低效率。因?yàn)槭褂昧?SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: ; FONT-VARIANT: normal; COLOR: rgb(0,0,0); FONT-STYLE: normal">SDAB(短型字?jǐn)?shù)據(jù)隊(duì)列緩存),每次調(diào)用就要載入8個16-bit字,而僅需使用第一個字。因?yàn)閮?nèi)存帶寬不是瓶頸,所以這種對載入字的看似浪費(fèi)的處理方法卻是合適的。
接口
本例中講述的C類型的濾波器原型見下面的列
附錄
附錄為示例文件的匯編源代碼。
完整文檔請百度云盤下載:鏈接:http://pan.baidu.com/s/1geiopX5 密碼:zmla
ADI DSP任何問題,可聯(lián)系OP的QQ:5516164,郵箱:sale@openadsp.com
|