摘 要: 濾波是濾除信號中某些特定頻率的波形的技術,在數字信號處理中,主要用于濾除噪聲和干擾信號。由于噪聲和干擾信號的不確定性,采用固定濾波系數的數字濾波器無法達到最佳的效果。自適應濾波器能夠隨著環境的改變而改動濾波器自身的參數和結構,從而能夠隨著噪聲和干擾信號的不斷變化修正濾波器的參數和結構,最終實現較理想的濾波。本文研究了最小均方差(LMS)算法,并結合自適應濾波器的結構和原理,設計出FIR結構自適應濾波器。最后給出MATLAB仿真結果,并利用DSP驗證自適應濾波器的性能。
關鍵詞: 自適應濾波器;MATLAB;LMS算法;FIR濾波器;DSP
0 引言
濾波即濾除信號中的噪聲和干擾信號,提取有用信號的技術。濾波技術廣泛應用于信號處理和信號分析中。在信號的獲取和傳輸過程中出現的噪聲,以及信號處理過程中的干擾信號都需要通過濾波技術濾除,來保證信號的安全性和可靠性。例如,實現雷達跟蹤功能需要獲取大量的船舶方位數據,在獲取數據的過程中,會產生大量的隨機干擾和測量誤差。因此,為了準確地獲取船舶瞬時的位置、加速度和速度等,需要利用濾波,將誤差和隨機干擾濾除,濾波技術在雷達跟蹤功能實現中起到非常重要的作用。濾波器是一種允許特定頻率信號通過的選頻裝置,通過這種裝置獲取有用的信號,濾除雜波。從最初的維納濾波到后來的卡爾曼濾波,濾波器的實現有了很大的發展,隨著技術的進步和社會的發展,需要處理的信號越來越復雜,要求實現的精度越來越高,同時對濾波器的要求也越來越高,其應用范圍進一步得到拓展。隨著濾波器的應用環境不斷復雜化,對非線性的濾波技術研究得到進一步的發展。因此,自適應濾波器重新得到國內外研究者關注。自適應濾波器具有自我修正和跟蹤的特點,主要適用于隨機性噪聲和干擾濾除。本文在自適應濾波器的原理和算法的基礎上,利用MATLAB和DSP軟件仿真環境設計實現自適應濾波的最優濾波。
1 自適應濾波器原理與結構
1.1 自適應濾波原理
自適應濾波即濾波器的參數可以自我調節,可以利用前一時刻的結果作為當前時刻濾波器的參數改變的依據,由此可以適應具有隨機噪聲和隨時間變化的干擾信號的應用環境。就像生物能以各種有效的方式適應生存環境一樣。自適應濾波器是一種具有反饋作用的閉環設置,它是一種特殊形式的維納濾波器,可以通過反饋信息調節自身參數達到最優濾波。自適應濾波器沒有復雜計算,實時性強,不需要已知輸入信號,也可以對信號進行有效濾波。因此對于無法預知的信號固定濾波系數的傳統濾波器無法濾除的雜波和噪聲,自適應濾波器可以簡單快速地輸出理想期望信號。利用數字濾波器對噪聲和干擾的最佳估計將輸入信號中混有的干擾濾除,將目標信號與噪聲和干擾信號有效地分離。隨著自適應濾波技術的發展,其在電信、雷達、聲吶、實時控制以及圖像處理等領域都有廣泛應用。
1.2 自適應濾波器的結構
自適應濾波器主要由數字濾波器和自適應算法兩部分構成[1],其中,數字濾波器的系數可以調節,而自適應算法的作用就是調節和修正自適應濾波器的系數。如圖1所示。圖中自適應濾波器有x(n)和z(n)兩個輸入端,其中z(n)是包含目標信號s(n)和噪聲d(n)的輸入信號,s(n)和d(n)是不相關的兩個信號,x(n)是與噪聲d(n)有某種聯系的z(n)的一種度量信號。y(n)可以通過數字信號濾波器得到,然后可以通過公式e(n)=z(n)-y(n)=s(n)+d(n)-y(n)得到誤差信號e(n)。通過e(n)得到s(n)的最佳估計信號,而自適應濾波器的基本原理就是利用系數可調的數字濾波器將雜波和噪聲從信號中濾除。
由圖1自適應濾波器結構可知,基于濾波系數可調的要求,對于數字濾波器的選擇包括有限長沖激響應濾波器(FIR)和無限長沖激響應濾波器(IIR)兩種數字濾波器可選擇。FIR型濾波器優勢明顯,它的系統更穩定,可以利用它實現多通帶濾波器,同時它更容易實現線性相位[2]。IIR濾波器可以用更低的階數實現與FIR相同的阻帶衰減效果,但鑒于FIR易實現嚴格的線性相位、穩定性和任意的幅頻特性等優點,另外FIR還有便于用DSP實現的優勢,可以用節省存儲空間的立即數乘加完成編程,因此本文的設計中自適應數字濾波器部分采用FIR濾波器橫向結構。圖2所示為FIR橫向濾波器結構圖。
2 自適應濾波算法
2.1 LMS自適應濾波算法
Widrow和Hoff提出的最小均方差(LMS)算法在實踐中被廣泛應用,其具有計算量小和易于實現的特點[3]。自適應算法通常由三大重要的技術指標來衡量其優劣:時變系統隨參數變化導致系統特性變化的檢測能力、輸出信號收斂到期望信號的速度以及對系統穩定性的調節能力。自適應濾波器實現功能的關鍵是尋找出均方誤差最小時濾波器權系數Wi的值,整個過程中利用ε和各x(n)的值,再根據上述的條件,通過算法找出Wi的值,實現自動調節Wi值的濾波器。所有的濾波器系數調整算法都是設法使輸出y(n)和目標信號d(n)之差 e(n)的均方值最小化,并且根據這個判據來修改權系數。均方誤差ε表示為:
其中:R=E[X(n)XT(n)]為N×N的自相關矩陣,它是輸入信號采樣值間的相關性矩陣。P=E[d(n)X(n)]為N×1互相關矢量,代表理想信號d(n)與輸入矢量的相關性。
由式(4)可知,自適應濾波器的權系數與濾波器的抽頭系數相關聯,可以根據已知的矩陣R和矢量P以及抽頭系數的二次函數方程式求得W的解。根據二次函數曲線具有唯一最小函數值的性質,可以得出濾波器輸出誤差函數具有最小值即濾波得到最優效果,在數學上可以利用梯度法求得此最小值,為了簡單起見,設W是一維的,則E[e2(n)]與W的關系成為一個拋物線。如圖3中在W*點獲得最小均方誤差。根據遞推關系式,利用梯度矢量法計算出拋物曲面的最低點。而自適應的過程就是在梯度矢量的負方向上逐漸校正濾波器系數,調節加權系數W使均方誤差最小,相當于沿超拋物形曲面下降到最小值,獲得最佳濾波或準最優工作狀態。
實際上,自適應濾波與維納濾波最主要的差別就是自適應濾波增加了一個可以識別控制濾波器系數的部分,可以根據期望輸出信號與濾波器實際輸出信號的比較,用誤差函數值去控制和調整濾波器系數直至誤差達到最小值。也正因如此,找到一個能求得加權系數,直至W=W*,E[e2(n)]=min的遞推式是LMS算法的核心。
2.2 RLS自適應濾波算法
另外一種區別于LMS算法的具有較快收斂速度的自適應算法即RLS,但是它存在實時性差的缺點,限制了其應用。RLS自適應濾波器的最佳濾波權系數需要用輸入信號自相關矩陣的逆來求得[4]。針對RLS算法計算復雜、實時性差但收斂于期望信號的速度比較快的特性,只要加以改進就能使其得到很好的應用,因此人們提出了改進的RLS算法,即變換域自適應濾波算法。
2.3 變換域自適應濾波算法
對于某些強相關的信號或難以濾除的信號,利用變換域的思想可以將目標信號輕松地分離出來,變換域可以輕松解決時域疑難問題,頻域變換、小波變換都屬于變換域。1979年Dentino首次將變換域的思想應用在自適應濾波上,對變換域自適應濾波算法做了全面的總結和解釋。變換域自適應濾波算法就通過正交變換把時域信號轉變為頻域或小波域等信號,用歸一化的能量平方根來表示變換后的信號,然后結合自適應算法進行濾波。隨著技術的不斷發展,變換域自適應濾波算法不斷得到推廣。由于LMS算法是依賴于輸入信號求其收斂性,所以針對強相關的信號,LMS自適應濾波的效果大大降低[5]。基于對以上三種自適應算法的研究,本文主要針對LMS自適應算法對其進行MATLAB與DSP設計與實現。
3 自適應濾波器的仿真實現
3.1 FIR濾波算法MATLAB仿真實現
MATLAB能方便地以書寫計算公式的思維方式對所要實現的功能編程,具有強大的語言功能,在數字信號處理方面具有很大的優勢。另外,MATLAB具有很多封裝完整的可供用戶使用的開源數據和工具箱,如系統辨識工具箱、神經網絡工具箱、信號處理工具箱、模糊推理系統工具箱等。圖形、數學、編程還可以通過Simulink模塊來實現,可將自己建好的模型打包成塊,以后便可以直接調用,非常方便。它還提供了與Windows編程相結合的矩陣運算、圖形繪制、數據處理和圖形處理等工具,在自動控制、圖像信號處理、雷達工程、信號分析、優化設計等領域得到了廣泛應用[6]。
自適應LMS算法可以用MATLAB方便地實現。自適應LMS算法的原理是利用最陡下降法以及時間n=0的濾波系數矢量和任意的起始值W(0)通過迭代公式更新濾波器權系數W(n),其具體方法如下:
(1)求得誤差信號e(n):e(n)=d(n)-x(n),其中 d(n)為濾波器期望輸出信號,x(n)為濾波器輸入信號。
(2)求濾波器系數。利用如下遞推公式更新矢量值:
w(n)=w(n-1)+2*e(n)*x(n)
其中為收斂因子。
(3)從時間參數n=0開始遞增加1,求誤差信號,重復上述計算直到求得最小均方誤差實現最優濾波為止。
LMS的核心算法如下:
function[yn,W,en]=LMS(xn,dn,M,mu,itr)
en=zeros(itr,1);
W=zeros(M,itr);
for k=M:itr
x=xn(k:-1:k-M+1);
y=W(:,k-1).′*x;
en(k)=dn(k)-y;
W(:,k)=W(:,k-1)+2*mu*en(k)*xn(k);
end
yn=inf*ones(size(xn));
for k=M:length(xn)
x=xn(k:-1:k-M+1);
yn(k)=W(:,end).′*x;
end
通過實驗產生輸入信號x(n),期望信號為d(n),兩者相減得到誤差信號e(n),然后通過調用LMS算法從寬甸信號中提取單頻信號,實驗結果如圖4、圖5所示,進一步調整收斂因子,觀察結果變化發現,收斂因子越大,濾波器的抽頭數越多,期望信號能以更快的速度收斂到輸出信號,同時也存在穩態誤差越大的風險,所以應選用合適的收斂因子和濾波器階數,在收斂速度和誤差穩態范圍上得到權衡。
3.2 自適應濾波器DSP設計實現
通過MATLAB的仿真實驗,LMS自適應濾波器的濾波特性得到驗證,接下來用TMS320C6713設計實現LMS自適應濾波器。本文設計實現的是應用LMS算法的FIR型自適應濾波器[7]。其自適應濾波器的程序流程圖如圖6所示。
由圖6自適應濾波器設計流程圖可知,其設計過程主要包括三個步驟:
第一步:程序初始化
為輸入信號x(n)、濾波輸出信號y(n)、誤差信號 e(n)分配存儲區,同時為輸入信號的長度(num)、濾波器階數(coeff)設置初值,本文設置為num=1 024,coeff=16。收斂因子fU=0.000 5。
第二步:調用信號輸入子程序產生輸入信號x(n),輸出信號y(n),誤差信號e(n)。
其程序如下:
for(i=0;i<num;i++)
{
x[i]=256*sin(i*2*PI/34);//初始化輸入信號
y[i]=z[i]=0;//初始化輸出信號誤差信號
}
第三步:調用LMS算法
主程序運行時不斷調用LMS算法子程序,來計算濾波信號輸出,檢測信號是否完成濾波,如未完成重復第三步工作[8]。其LMS算法子程序流程圖如圖7。LMS算法子程序為int FIRLMS(int*nx,float*nh,int nError,int nCoeffNum)。在CCS環境下用C語言編寫程序,通過編譯、鏈接后生成公共目標代碼,選擇View/Graph/Time/Frequency,進入Graph Prorerty Dialog對話框,設置合適的圖形顯示參數,在顯示窗口顯示自適應濾波器DSP仿真結果,如圖8、圖9、圖10所示。
LMS核心算法子程序如下:
int FIRLMS(int*nx,float*nh,int nError,int nCoeffNum)
{
int i,r;
float fWork;
r=0;
for(i=0;i<nCoeffNum;i++)
{
fWork=nx[i]*nError*fU;
//h(n+1)=h(n)+2u*e(n)*x(n)
nh[i]+=fWork;
r+=(nx[i-i]*nh[i]);
}
r/=128;
return r;}
通過觀察輸出波形與輸入波形,可以看出輸出波形一開始與輸入波形相差較大,但通過自適應濾波器不斷調節加權系數w(n),使輸出波形逐漸符合輸出要求。由此也可驗證此自適應濾波器LMS算法的有效性,其能夠很好地濾除數字信號中的噪聲,較好地還原了數字信號的信息,在數字信號處理領域有很好的應用價值。
4 結束語
本文對自適應濾波器的原理和結構圖進行了分析,利用先進的MATLAB仿真技術進行仿真最后進行DSP的設計實現。仿真結果充分表明,自適應濾波器可以根據噪聲信號的頻率進行跟蹤并以此來很好地濾除信號中的噪聲。并且,在噪聲和信號特性不斷隨時間變化的同時,自適應濾波器可以利用自適應算法不斷調整和修正沖激響應函數系數,能很好地適應輸入環境的變化。這充分突出了自適應濾波器的優勢,使其具有更廣泛的應用領域和廣闊的發展前景,例如通信信道的自適應均衡、心電圖的電源干擾消除、系統模型識別和雷達波束形成等領域。基于不同的自適應算法以及不同的數字濾波器結構可構成不同結構的自適應濾波器,本文重點研究了基于LMS算法的FIR型自適應濾波器。本文還有待于進一步研究和改進,以提高自適應濾波器的精度和收斂速度。
參考文獻
[1] 貢鎮.基于DSP的自適應濾波器的設計與實現[J].現代電子技術,2013(17):62-64.
[2] 李茂清,王潔,陳強,等.基于MATLAB程序的FIR濾波器設計實現[J].電力學報,2008(2):87-90.
[3] 張玲玲,唐曉英,劉偉峰.一種新的變步長LMS自適應濾波算法性能分析[J].生命科學儀器,2005(5):39-41.
[4] 郭華.自適應濾波算法及應用研究[D].西安:西北師范大學,2007.
[5] 蔣薇薇,楊萍,王昱潔.基于變步長LMS算法的自適應濾波器研究[J].儀器儀表學報,2010,31(8):478-480.
[6] 劉光普,高玉春.MATLAB在通信原理教學中的應用[J].數據采集與處理,2012(S1):39-42.
[7] 莫晶.基于自適應噪聲抵消系統的不同濾波算法研究[D].昆明:云南師范大學,2014.
[8] 許國威,馬勝前,危淑平.自適應濾波RLS算法研究與DSP實現[J].計算機技術與發展,2010(10):35-38.