摘 要: 敘述了IIR數字濾波器" title="數字濾波器">數字濾波器的設計原理及其在DSP上的實現思路,并對用DSP實現IIR數字濾波的方法進行了分析。用MATLAB計算出IIR數字濾波器的系數,考慮到溢出問題,采用級聯" title="級聯">級聯的形式對濾波器進行分解,最后在TMS320VC5416 DSP上得以實現,并通過CCS(come composer studio)的輸入輸出功能和RTDX(real-time data exchange)的功能保證實現結果和仿真結果的一致性。
關鍵詞: IIR數字 濾波器 DSP 算法
數字濾波器在各種數字信號處理中發揮著十分重要的作用,數字濾波器設計一直是信號處理領域的重要研究課題。常用的數字濾波器有FIR濾波器和IIR濾波器,其中IIR數字濾波器因具有結構簡單、占用存儲空間少、運算速度快、較高的計算精度和能夠用較低的階數實現較好的選頻特性等特點[1],得到了廣泛應用。DSP芯片有適合于數字信號處理的軟件資源和硬件資源,是實現數字信號處理的重要途徑[2]。目前所見文獻,多數為濾波器的模型設計,所得結果也是在MATLAB等實驗環境下模擬仿真完成的,帶有很大的局限性。本文討論IIR數字濾波器在DSP上的實現思路,并對其實現方法" title="實現方法">實現方法進行了分析。
1 數字IIR濾波器的理論設計分析
數字濾波器實際上是一個采用有限精度算法實現的線性非時變離散系統,濾波器的功能實現實際上是通過大量的加法運算和乘法運算完成的。IIR數字濾波器差分方程的一般形式為:

從IIR數字濾波器的實現來看,有直接型、級聯型、并聯型和格型等基本網絡結構。不同的結構形式會有不同的運算誤差,其穩定性、運算速度、所占用的存儲空間等也有所不同[3]。其中直接Ⅱ型僅需要N級延遲單元,且可作為級聯型和并聯型結構中的基本單元,是最常用的IIR數字濾波器結構之一。
IIR數字濾波器的設計方法" title="設計方法">設計方法有兩類[4],一類是借助于模擬濾波器的設計方法設計出模擬濾波器,利用沖激響應不變法或雙線性變換法轉換成數字濾波器,然后用硬件或軟件實現;另一類是直接在頻域或時域中進行設計,設計時需要計算機作輔助工具。對系統傳遞函數為

的IIR數字波濾器來說,設計的任務就是尋求一種因果關系和物理上可實現的系統傳遞函數H(z),使其頻率響應H(ejω)能夠滿足所希望得到的頻域指標。
2 IIR數字濾波器在DSP上的實現方法及實現過程
2.1 IIR數字濾波器在DSP上的實現步驟和條件
IIR數字濾波器在DSP上的設計過程如下:
(1)根據指標確定濾波器的類型,設計出濾波器的參數;
(2)根據DSP的特點(字長、精度等)對參數進行取舍、量化,然后進行仿真;
(3)根據仿真結果對濾波器的結構、參數再次進行調整,直到滿足要求為止;
(4)在DSP上用語言實現濾波器功能。
定點DSP芯片,既可以做定點運算,也可以做浮點運算。一個算法,既可以用匯編語言編程實現,也可以用高級語言(C,C++)實現。而一個IIR數字濾波器是否可以在DSP上實現,最終要看此算法是否滿足兩個條件:執行時間和精度。一個算法的精度再高,如果做不到實時,也沒有實用價值;相反,如果執行時間很快,但精度滿足不了要求,也就無從實現濾波功能。IIR數字濾波器在DSP上的實現思路,應該是在滿足上面兩個條件的前提下,找到盡可能簡易的實現方法。
2.2 IIR數字濾波器在TMS320VC5416 DSP上的實現過程
借助于計算機強大的仿真功能,在MATLAB環境下設計一個IIR數字濾波器變得十分容易[5]。但是要在DSP上實現此濾波器功能,則需要對濾波器的結構、系數等參數進行改進。下面以一個低通IIR數字濾波器在DSP芯片TMS320VC5416上的實現為例,敘述其實現過程。
TMS320VC5416是DSP芯片的主要供應商TI公司最近推出的5000系列中的高性能DSP,該處理器為16位定點DSP,最高運算速度可達160MIPS,內帶256KB的RAM,有128KB的數據空間,最大程序容量高達16MB,有3個McBSP和6個DMA通道并且支持外部DMA,內核電壓低至1.5V。其CPU由于運算速度快、內部資源充足、接口靈活、功耗低,非常適合做復雜算法運算。
低通IIR數字濾波器的參數如下:采樣率為16000Hz,截止頻率為500Hz,采用butterworth模型設計時階數為7階,在MATLAB6.5環境下得到的b系數和a系數如表1所示。
從理論上說,可以用高階" title="高階">高階IIR數字濾波器實現良好的濾波效果。但由于DSP本身有限字長和精度的因素,加上IIR濾波器在結構上存在反饋回路,是遞歸型的,再者高階濾波器參數的動態范圍很大。這樣一來造成兩個后果:結果溢出和誤差增大,從而導致算法無法在DSP上實現。
解決此問題的有效方法是把高階IIR數字濾波器簡化成幾個2階濾波器來設計,即采用級聯結構。因此系統函數為:
H(z)=H1(z)H2(z)…Hn(z) (3)
上述7階IIR數字濾波器采用級聯的結構后變成4個濾波器級聯的形式,每個濾波器的系數如表2所示。
TMS320VC5416是16位DSP。在CCS下,它的浮點數格式占用兩個字,即32bit。通過CCS的數據輸入輸出功能和RTDX功能,可以隨時觀察DSP結果和理論仿真結果之間的差異,及時發現數據的溢出和計算誤差。對表2的系數取7個有效位(在CCS下浮點數的有效位為7位),計算結果如圖1所示。
圖中為輸入和濾波后的波形,信號頻率為500Hz。從圖中可以看出,濾波沒有產生溢出現象且濾波效果滿足設計要求。
程序流程如圖2。采用間接尋址指向數據存儲單元,主要指令為加法、乘法和循環實現,這些都可以通過MAC等指令直接實現。需注意的是要對乘法運算結果進行溢出保護。另外,因為主程序框架采用C結構,而算法由匯編語言實現,所以要注意不同環境下尋址方式的區別,當從C環境進入直接尋址時,要先確定DP值,以免帶來不確定的計算結果。數據采集時要先通過DSP的DMA功能將輸入數據保存在外部SRAM中,采樣結束后再將要濾波的數據通過DMA載入內部RAM中,從而提高處理速度??紤]到IIR數字濾波器的運算特點,某一時刻的輸入數據參加一次運算后不再參與下次運算,只有各級濾波器輸出結果需要參與多次運算,因此濾波結果和輸入數據可以共用同一存儲地址,從而節省存儲空間。
除此之處,還要注意以下問題:
(1)IIR數字濾波器是針對采樣率固定的系統設計的,更改系統或系統采樣率改變時應重新設計。
(2)用到的數據存儲單元,程序開始時應對這些單元進行初始化。如果要進行連續濾波,應保存上一次濾波的結果。
(3)IIR數字濾波器的濾波結果會引起相位的延遲,故對相位嚴格要求的場合,需加全通網絡進行較正,或選用FIR濾波器實現濾波功能。
IIR數字濾波器以它優越的性能,在電力、通信和測控等領域得到廣泛應用。本文針對TI公司的TMS320VC5416 DSP,敘述了IIR數字濾波器的理論設計及在DSP上的實現過程。根據其實現思路,可以很方便設計出符合要求的濾波器。該方法具有很強的實用性,對FIR濾波器的設計及濾波器在嵌入式系統中的實現也有很好的參考價值。通過“變壓器絕緣套管介損在線監測”等測控系統中的濾波器設計和實現表明,設計方法簡單、方便、實現靈活,滿足工程實際要求。
參考文獻
1 邢培育,崔克清.一種基于TMS320C5402的數字IIR濾波器設計[J].數據采集與處理,2002;17(2):227~230
2 張雄偉,曹鐵勇.DSP芯片的原理與開發應用(第2版)[M].北京:電子工業出版社,2001
3 高宇晨,戴居豐.改進的IIR濾波器避免運算溢出和定點DSP的實現[J]. 天津通信技術,2001;(3):31~34
4 陳愛萍,胡曉東.基于MATLAB的IIR數字濾波器的設計[J]. 湖南工程學院學報,2004;14(3):8~10
5 成躍樂,李東興,王文暢. MATLAB6.1環境下IIR數字濾波器的設計[J]. 山東理工大學學報(自然科學版),2003;17(5):82~85




