文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2015.11.006
中文引用格式: 彭昊,黃駿雄,江先陽,等. 多通道高保真音頻信號IIR濾波器設計[J].電子技術應用,2015,41(11):24-26,30.
英文引用格式: Peng Hao,Huang Junxiong,Jiang Xianyang,et al. Multi-Channel IIR filter design based on FPGA[J].Application of Electronic Technique,2015,41(11):24-26,30.
0 引言
數字濾波器是現代數字信號處理系統的重要組成部分,具有模擬濾波器所無法替代的優越特性,在語音處理領域更是有著很廣泛的運用。數字濾波器根據單位脈沖響應的不同,可分為有限脈沖響應濾波器(FIR)和無限脈沖響應濾波器(IIR)。FIR濾波器的優點在于具有良好的相位特性,IIR濾波器的優點在于擁有良好的幅頻特性。IIR和FIR濾波器相比,在低階數時就可以達到很好的頻率濾波性能,但其相位特性是非線性的[1]。
音頻信號可以視為不同頻率正弦波信號的疊加。通過對于音頻信號系統的頻譜分析,可以很清晰地分辨出需要保留的信號以及需要抑制的噪聲信號。因為人耳對于聲音的相位變化是不敏感的,所以在音頻信號的濾波中,IIR濾波器的應用相比于FIR更有優勢[2]。
另一方面,隨著娛樂媒體的發展,高精度的多通道處理更是進行音頻信號處理的重要而基本的需求之一。由于軟件的串行特性,多通道的音頻信號在處理上往往需要預先搭建特別的平臺,這使得采用軟件實現的方式既不經濟又缺乏擴展性。目前的設計很多都是針對單通道進行實現,而音頻信號往往又存在需要多個聲道混合產生立體聲的問題。一種傳統的做法是通過DSP專用芯片來實現實時性的音頻信號處理[3-5],但這種方式中實現并行多通道傳輸往往需要消耗額外的器件資源;而另外一種通過FPGA實現的濾波器方案采用以FPGA內部的SOPC實現的一種軟件方式,并沒有涉及到使用FPGA良好的硬件器件特性實現多路復用的方法[6]。針對這一問題,本文基于FPGA設計了一款可擴展的時分復用多通道IIR濾波器。
1 IIR濾波器的設計
1.1 系統的穩定性判斷
穩定性是一個濾波器的重要指標。IIR濾波器的系統傳遞函數是復變量z的有理函數,其分子和分母都是z-1的多項式,因此H(z)可以表示為:
其中ci(i∈[1,M])是零點di(i∈[1,N])的極點。一個線性時不變系統當且僅當它的系統傳遞函數H(z)的極點都處于單位圓內時(包括單位圓)是穩定的。由于實際的PCB板內部的電磁干擾輸出端會出現一個幅度極小頻率極低的干擾噪聲,在后級放大后使得噪聲不能忍受,所以濾波器希望能濾掉采樣率為48 kHz的音頻信號中因PCB中噪聲干擾產生的一個極低的噪聲信號,目標濾波器的濾波器斜率為12 dB/OCT,中心頻率為6 Hz。
1.2 系數量化轉換
由理論設計出的理想數字濾波器傳輸函數的系數ai、bi如果用二進制表示是無限精度的。在實現時硬件只有限位寬,所以必須對數字濾波器傳遞函數的系數進行量化轉換。具體來說在FPGA中實現差分方程時,一般是把這些非整數系數乘以2L然后取整[7-8]。當L值足夠大的時候,就可以保證IIR濾波器的精度。而當濾波器的系數乘以2L,從硬件上可以相應轉化為左移L位操作,左移操作無需消耗乘法邏輯單元從而節約了邏輯資源。系數量化轉換完成后可以通過Matlab驗證濾波器系數是否滿足穩定條件。
1.3 系數的簡化問題
高保真的音頻信號一般是24位的有效數據,為了保證濾波后音頻信號的精度,濾波器系數也設為24位。通過使用巴特沃斯型IIR濾波器可以將零點全部調整到單位圓與X軸Y軸的交點處,從而將ai系數全部調整為整數。在此基礎上將系數乘以2L(L為整數)后可以將乘法操作轉化為移位操作節省邏輯資源。
依據應用需要,目標濾波器的中心頻率為6 Hz,所需要的濾波器衰減斜率為12 dB/OCT,即一個二階濾波器。采用Matlab的fdatool工具設置對應參數并選擇濾波器為巴特沃斯逼近,生成滿足條件的濾波器系數[9-10],如表1所示。
基于1.1節的穩定性分析可知,這一濾波器是一個穩定的二階IIR濾波器,其差分方程可以描述為:
y(n)=a1x(n)+a2x(n-1)+a3x(n-2)+b2y(n-1)+b3y(n-2)
=x(n)-2x(n-1)+x(n-2)-1.998 89y(n-1)
+0.998 89y(n-2)(2)
依據式(2)和上述分析,這一濾波器在硬件實現上可簡化為兩個24位乘法器以及數據的移位、求和操作。
1.4 多路時分復用分析
提供多通道可擴展支持有兩種方式:(1)在資源限制小的情況下,綜合考慮所需要的濾波器的最大工作頻率以及所需要的通道數,利用FPGA資源的豐富性對單一濾波器結構進行邏輯復用從而實現并行方式的多路擴展;(2)在所需要的濾波器的工作能力要求不高的情況下,根據所需要的通道數,通過時分復用的方式使用單一的邏輯資源實現多路通道的擴展方案減少資源消耗。由于音頻信號傳輸的速率往往不高,使用時分復用單一邏輯的方式會比使用邏輯復用的方式更為經濟,本文基于這一目標設計實現一個4通道的二階IIR濾波器,更多通道的情況將采取類似的思路進行擴展。
常用的音頻數據格式中一次采樣的音頻信號占32位,如I2S數據格式中一次采樣中有24位有效數據而另外8位恒定為0,相當于一次采樣保有32個時鐘周期的可利用時間。在4路數據并行情況下,每一路數據計算及緩存值的更新共同所需的時鐘周期數為Tqt≤32/4=8,也即設計的濾波器操作周期最大不能大于8。從式(2)發現每一路信號都需要保存4個中間結果:x(n-1),x(n-2),y(n-1),y(n-2)。由于這些中間結果之間有強烈的數據延遲依賴關系,即x(n-1)、x(n-2)分別為在第n次計算時第n-1次及第n-2次的數據輸入值,y(n-1)、y(n-2)分別為第n-1次的數據輸出值以及第n-2次的數據輸出值,在時分復用操作過程中可以利用這一延遲關系節省時間。
2 IIR濾波器硬件電路實現
2.1 濾波計算控制狀態機
前面已經給出濾波器每一次的計算周期數不能高于8,在這不多于8個周期內要能夠穩定處理中間數據的保存和刷新工作采用狀態機實現。觀察式(2)在采用的設計方法情況下,其計算過程的第n次輸入的數據x(n)僅需要進行移位和加減操作;y(n-1)和y(n-2)需要使用乘法單元。這一部分的計算利用延遲特性可以從上一路計算結束時開始,進而形成流水線提升整個計算效率。
設計中采用的算法狀態轉換圖如圖1。其中所示的每一個狀態均占用一個周期,正好能滿足只要有數據輸入整個計算過程為8個周期。為了合理地利用延遲,從S0狀態時即可對RAM中的數據進行預讀,這樣在讀入數據后的下一個周期,乘法器單元能自動地進行乘法計算,同時在S3狀態時得到乘法的輸出結果;乘法器采用3級流水線結構剛好和這一計算過程匹配,充分利用數據的延遲特性,并且能極大地提高該設計的計算能力,對于后續的擴展有著關鍵意義。對于系數部分的移位和求和過程,則在S1和S2狀態分別執行以節省時間。
2.2 多路復用濾波器結構
設計采用的濾波器結構如圖2所示。寬度為24的4路待處理數據從外部輸入后,首先將24位的待計算值送入常系數運算處理單元[11],這一運算中,首先對于a1、a2、a3系數左移L位,然后求和a1、a2所對應部分的結果sum1,再將sum1與a3移位后所對應的部分求和得到常系數運算處理單元計算結果。在進行移位操作的同時從RAM表中取出參與該次計算的y(n-1)、y(n-2),并分別在相應乘法單元中進行運算,得到乘法計算的部分和,隨后將各乘法單元以及常系數運算處理單元的運算結果輸入求和單元進行運算,并根據參數的擴展量2L截取求和單元輸出的[L+23:L]作為最終輸出,這一部分的值還將作為下次計算的y(n-1)存入RAM數據保存區中。為了實現更多的多路擴展,在采用類似機制的同時,需要對于RAM數據保存區的存儲單元大小進行適當調整,以使得容量足夠處理相應多路條件下的中間數據。
2.3 目標濾波器資源占用情況
目標濾波器選用的器件為Xilinx公司的Spartan 3AN XC3S700A一款非DSP強化型FPGA。目標濾波器對應的主要資源消耗情況如表2所示,可見所消耗的資源數非常低。乘法器的消耗主要是采用24位乘24位的乘法器IP核來處理音頻信號。目標濾波器在該器件上可達到的最大工作頻率為129.121 MHz,遠遠高于實際使用的時鐘頻率,說明這一邏輯可以適用于時鐘頻率更高或同時滿足更多通路的時分復用操作的環境中。
3 仿真測試與討論
本文采用Matlab SE 10.1a與ISE Design Suite 14.7聯合仿真來測試所設計的IIR濾波器。在測試流程中將比對Matlab軟件計算結果和硬件計算結果,從而判斷硬件實現的成效。仿真測試中,采用一個1.5 kHz幅值為1的正弦波信號疊加上一個3 Hz幅值為3的正弦波信號作為低頻噪聲。先使用Matlab產生這一激勵信號形成文件然后在測試中讀取這一文件。為了驗證該硬件濾波器的性能,將Xilinx與Matlab數據聯合仿真的輸出結果通過Matlab繪制成頻譜圖如圖3所示,同時利用modelsim將測試的多路濾波的結果顯示如圖4所示。
圖3所示為信號處理前的頻譜圖,由于仿真中使用的噪聲信號頻率很低,中頻部分幾乎沒有信號,所以將處理前的頻譜分為0~15 Hz,1 000 Hz~2 000 Hz顯示;圖4為處理后的頻譜。對比圖3與圖4可見對于3 Hz的噪聲信號通過設計的濾波器后,幅值減為原來的一半,實現了-3 dB的衰減。圖5顯示每一個數據均能保持4次計算結束信號周期的時長說明了該濾波器具有多通道時分復用的功能。
4 小結
本文根據實際的音頻信號處理工程需求,設計了一款基于時分復用方式實現4通道語音信號濾波的二階IIR濾波器。通過Matlab和modelsim的聯合仿真,讀取輸出數據導入Matlab并通過繪制出對應頻譜,驗證了該濾波器的幅度頻率特性滿足設計目標要求。
在設計中將傳輸函數的系數轉換為整數,從而將乘法計算轉化為簡單的移位操作節約FPGA專有乘法器單元,這一優化形式可以方便地拓展到其他應用中。
文章提出了兩種通道擴展的方式。本設計目標濾波器依據所處理的音頻信號特點采用了其中的時分復用方式。此外,因為二階濾波器是高階濾波器的基本單元,高階濾波器可以通過二階濾波器以級聯方式來實現[12],所以本文所設計的IIR濾波器對于實現更復雜語音信號處理所需的高階IIR濾波器有一定的參考意義。
參考文獻
[1] 周利清,蘇菲.數字信號處理基礎(第二版)[M].北京:北京郵電大學出版社,2007.
[2] 趙力.語音信號處理(第二版)[M].北京:機械工業出版社,2011.
[3] 謝海霞,孫志雄.IIR濾波器的DSP實現[J].電子器件,2013,36(2):194-196.
[4] 崔景安,徐寧.實時音頻信號采集系統中的數字濾波器的設計及實現[J].內蒙古大學學報(自然科學版),2014,41(3):336-339.
[5] 欒軍山,陳華.實時音頻處理系統中的IIR濾波器設計及Lattice結構實現[J].制造業自動化,2011,33(5):97-100.
[6] 邸麗霞,張彥軍,劉怡文.基于SOPC的高速IIR濾波算法的實現[J].科學技術與工程,2013,13(33):9978-9982.
[7] 秦宏伍,史浩,崔·尤里·謝爾蓋維奇.基于FPGA的IIR濾波器整數設計[J].微計算機信息,2007,23(122).
[8] MEYER-BEASE.Digital signal processing with field programmable gate arrays[M].Springer,2007.
[9] 劉彬.MATLAB環境下IIR濾波器設計,仿真與驗證[J].電子測量技術,2011,34(4):7-10.
[10] 薛定宇,張曉華.控制系統與計算機輔助設計——MATLAB語言與應用(第二版)[M].北京:清華大學出版社,2000.
[11] 張大為,姜靜,劉迪.基于FPGA的IIR低通數字濾波器的設計[J].船電技術,2012(2).
[12] 王衛兵.高階IIR數字濾波器的FPGA描述[J].現代電子技術,2005,207(16):3-4.