呂 虹,蔣婷婷,肖 曼
(安徽建筑大學(xué) 電信學(xué)院,安徽 合肥 230601)
自適應(yīng)濾波器在現(xiàn)代數(shù)字信號處理中應(yīng)用極為廣泛[1]。濾波器是人們進行設(shè)計系統(tǒng)的一種術(shù)語,是為了能夠從已經(jīng)失真的信息中過濾出實施者所需要的接近原本的有用內(nèi)容。由于這個措施在很多方面都會被需要,所以在眾多領(lǐng)域都有關(guān)于這個系統(tǒng)的研究。
本文通過Matlab程序仿真,來探索LMS算法與FIR的聯(lián)系,并通過更改步長與濾波器階數(shù)來觀察自適應(yīng)濾波器收斂性能的變化。并利用了Quartus II自下向上的設(shè)計方法,選擇合適的IP核,完成各項模塊的設(shè)置后,通過頂層原理圖將各模塊連接從而實現(xiàn)濾波器的設(shè)計。通過Matlab的設(shè)計提供加噪聲的輸入數(shù)據(jù)以及原始的期望信號,最終在Quartus II上運用波形仿真文件實現(xiàn)濾波器的設(shè)計。
自適應(yīng)濾波器是數(shù)字濾波器的一種[2]。本文研究的是線性濾波器。對于線性自適應(yīng)濾波器,一般通過輸入信號(已經(jīng)是目標(biāo)信號加噪聲之后)的自相關(guān)矩陣、誤差函數(shù)等的統(tǒng)計特性以某一種準則為標(biāo)準,使其盡可能靠向目標(biāo)值的過程。圖1為自適應(yīng)濾波器的結(jié)構(gòu)圖,圖中x(n)、y(n)和d(n)分別表示n時刻的輸入信號、輸出信號和期望信號。其中e(n)是期望信號與輸出信號的誤差,它能夠自動地調(diào)節(jié)自適應(yīng)濾波器的各項參數(shù)[3],使下一時刻的輸出y(n+1)更接近期望信號。
圖1 自適應(yīng)濾波器的結(jié)構(gòu)Fig.1 Structure of adaptive filter
由圖1可知自適應(yīng)濾波器總共由三個部分組成,每個部分具體含義如下:
(1)濾波結(jié)構(gòu):輸入信號經(jīng)過濾波結(jié)構(gòu)形成濾波輸出。IIR濾波器具有不穩(wěn)定的特點,因此本文采用了FIR濾波器進行濾波結(jié)構(gòu)的設(shè)計[4]。
(2)自適應(yīng)算法:通過規(guī)定的規(guī)則或函數(shù)來更改濾波器的參數(shù),從而可以達到對應(yīng)的濾波功能。
(3)性能評估:是指期望信號和輸出信號的差來定義輸出是否滿足需求。
針對線性自適應(yīng)濾波器分為兩部分,一部分是濾波,另一部分是自適應(yīng)[5]。自適應(yīng)主要體現(xiàn)在:如果信號環(huán)境不發(fā)生改變時,自適應(yīng)濾波器能夠以逐步迭代的方式來調(diào)整濾波器系數(shù)直達到最優(yōu)濾波才會停止迭代[6]。當(dāng)外部信號環(huán)境發(fā)生變化時,自適應(yīng)濾波器會調(diào)整濾波系數(shù)以跟蹤變化。與維納濾波器相比,自適應(yīng)濾波器無需事先知道輸入信號即可實現(xiàn)最優(yōu)濾波[7]。
LMS算法作為線性自適應(yīng)濾波中的梯度算法,結(jié)合最速下降算法,用瞬時平方誤差代替均方誤差[8]。
本文以FIR濾波器結(jié)構(gòu)(也稱橫向結(jié)構(gòu))來介紹維納濾波器。
圖2 FIR濾波器結(jié)構(gòu)Fig.2 FIR filter structure
圖2展示了k階濾波器的橫向結(jié)構(gòu)圖,定義如下:
(1)濾波器的輸入為x(n),定義向量x(n)=[x(n),x(n-1),x(n-2),…,x(n-k+1)]T;
(2)濾波器權(quán)系數(shù)為w(n),定義向量w(n)=[w0(n),w1(n),…,wk-1(n)]T;
(3)期望信號為d(n);
(4)濾波器的輸出信號為y(n);
(5)單位延遲單元為z-1。
x(n)通過單位延遲單元的結(jié)果是x(n-1)。當(dāng)x(n)進入到濾波器之后,濾波器的輸出信號y(n)為抽頭輸入和抽頭系數(shù)的內(nèi)積之和。
(1)
(1)式n為時刻,k為濾波器的階數(shù),wi表示第i個抽頭線上的權(quán)值,x(n-i)表示n時刻橫向濾波器第i個抽頭線上的輸入數(shù)據(jù)。系統(tǒng)的誤差表示如下:
e(n)=d(n)-y(n)=d(n)-wT(n)X(n)。
(2)
以最小均方差為準使系統(tǒng)輸出的均方函數(shù)J(n)達到最小,然后計算可使J(n)最小化的濾波器的權(quán)向量的值。其中,均方誤差J(n)定義如下:
J(n)=E{[d(n)-wT(n)X(n)]2}。
(3)
定義輸入信號的自相關(guān)矩陣為R,定義輸入信號與期望信號的互相關(guān)矩陣為R,以便表示均方差函數(shù):
R=E[X(n)XT(n)],
(4)
R=E[d(n)X(n)]。
(5)
則式(3)式可以表示為:
J(n)=E[d2(n)]+wT(n)Rw(n)-2RTw(n)。
(6)
由(6)式可知,當(dāng)輸入信號與期望信號穩(wěn)定時,均方誤差J(n)和權(quán)向量w(n)構(gòu)成了典型的二次函數(shù)??梢灾涝摵瘮?shù)的極小值是濾波器權(quán)向量的最小解,(6)對w(n)求導(dǎo)可得:
(7)
令(7)式為0,R為非奇異矩陣,得到如下解:
w*=R-1R。
(8)
則稱w*為濾波器的維納解。將w*代入(6)式可得均方誤差函數(shù)J(n)的最小值:
Jmin(n)=E[d2(n)]-RTw*。
(9)
由上可知維納濾波雖然可以準確地使均方誤差降到最低得到最優(yōu)濾波,但在求解的過程中要知道輸入信號和期望信號的特性,涉及到R的求逆運算。維納濾波缺少一個智能的、自動優(yōu)化的準則可循,使其在高階濾波中難以實現(xiàn)[9],因此在此基礎(chǔ)上進行改進。
根據(jù)最速下降法,沿性能表面最速下降方向(負梯度方向)調(diào)整濾波器的權(quán)值向量,以求得性能表面的最小點,這個尋找過程是一個迭代的過程[10]。設(shè)第n次迭代得到的濾波器抽頭權(quán)值向量為w(n),并設(shè)該次迭代得到的均方誤差是ε(n),那么第n+1次迭代得到的權(quán)向量的迭代公式為:
w(n+1)=w(n)-nu(n)。
(10)
(11)
上述選擇誤差性能曲面上負的梯度向量作為搜索時的方向向量的方法稱為“最速下降法”。
在最速下降算法中,為了獲得系統(tǒng)的最佳維納解,要事先知道輸入信號和期望信號的特性[11],當(dāng)期望信號未知,不能確定它們的相關(guān)特性,因此必須對梯度向量n進行估計,得到n的估計值
(12)
進一步令u(n)為常數(shù)u,則可得到新的迭代公式:
w(n+1)=w(n)+2ue(n)x(n)。
(13)
式(13)稱為LMS算法。其中u可以控制算法迭代的步長,而步長的大小可以決定收斂速度,一般來說,步長越大收斂速度就會越快,反之越慢。針對具體的算法來說,為了確保算法的收斂,u不能是無限大的,要選取適合的大小。LMS算法實現(xiàn)濾波的步驟為:
步1初始化濾波器的參數(shù)w(0)=0;
步2給出了n時刻的輸入信號向量:
x(n)=[x(n),x(n-1),x(n-2),…,x(n-k+1)]T,n時刻的期望響應(yīng)是記為d(n),k稱為濾波器的具體階數(shù);
步3計算通過濾波器的輸出信號y(n)=w(n)Tx(n);
步4比較輸出信號和期望響應(yīng)信號的誤差e(n)=d(n)-y(n);
步5根據(jù)誤差濾波器自動的調(diào)整相應(yīng)的權(quán)值向量w(n+1)=w(n)+2ue(n)x(n)。
LMS算法在計算上降低了自相關(guān)條件的要求,不需要對輸入信號矩陣逆變,而且所得輸出結(jié)果不斷接近目標(biāo)值,所以是自適應(yīng)算法中穩(wěn)定性比較好的,同時也是比較常用的。由于它的收斂速度和步長選擇有關(guān),步長u越大收斂速度越快。但u的范圍在0至1,所以相對而言LMS的收斂速度并不快。
實驗出于對波形的方便觀察,在Matlab上選擇了期望信號為正弦信號,可以比較直觀地觀察。輸入信號即待測信號是均勻分布的噪聲信號加入期望信號得出,將LMS算法與FIR結(jié)構(gòu)結(jié)合,即每個延遲端加入一個權(quán)頭值,而LMS算法就是對權(quán)頭值進行更新。而濾波輸出是通過權(quán)頭值與輸入的卷積獲得。
本文采用了蒙特卡諾(Monte Carlo)仿真方法研究了自適應(yīng)濾波器的性能[12],收斂性能縱坐標(biāo)為重復(fù)次數(shù),重復(fù)仿真得到此時在該點的誤差e(n)的均方值為統(tǒng)計量。
(1)在相同條件下,信噪比越大,濾波的效果越好,信噪比為正時,濾波效果優(yōu)于信噪比為負時,并且收斂速度較快,收斂性能也比較穩(wěn)定。
(2)在其他條件不變,改變步長:三者濾波器皆為64階,u值分別為1/256(如圖3)、1/1024(如圖4)、1/2048(如圖5)。
圖3 k=64, u=1/256 Matlab仿真波形Fig.3 k=64, u=1/256 Matlab simulation waveform
圖4 k=64, u=1/1024 Matlab仿真波形Fig.4 k=64, u=1/1024 Matlab simulation waveform
圖5 k=64, u=1/2048 Matlab仿真波形Fig.5 k=64, u=1/2048 Matlab simulation waveform
可以發(fā)現(xiàn)當(dāng)濾波器階數(shù)不變時,步長u值越大其收斂性能越好。
(3)若u值不變時,改變?yōu)V波器階數(shù),u值均為1/1024,階數(shù)分別為32(如圖6)、64(如圖4)、128(如圖7)。
圖6 u=1/1024, k=32 Matlab仿真波形Fig.6 u=1/1024, k=32 Matlab simulation waveform
圖7 u=1/1024, k=128 Matlab仿真波形Fig.7 u=1/1024, k=128 Matlab simulation waveform
可以看出,步長不變時,濾波器階數(shù)越高其收斂性能越強。
實驗在Quartus II上通過VHDL語言編程的主模塊功能主要包括了存儲 、計數(shù)、乘法、卷積濾波、權(quán)值更新。由于Quartus II對數(shù)值的限制,對于Matlab上的數(shù)據(jù)選擇了進行17 bit的量化。在實驗過程中u值以及信噪比的選擇會影響e的值可能還會導(dǎo)致它的高位為零,導(dǎo)致濾波輸出為零,所以通過在Matlab中進行不斷嘗試,最終選擇了信噪比10 db,濾波器階數(shù)位128階,u的值為1/1024。
對于所需要的輸入,是通過Matlab獲取并設(shè)置為滿足Quartus II中的mif文件格式的形式,將數(shù)據(jù)轉(zhuǎn)移至用記事本打開的文件的begin與end之間,后調(diào)用Quartus II的宏模塊將mif文件當(dāng)作其內(nèi)存數(shù)據(jù),分別生成用來存放輸入信號和期望信號的存儲器,生成模塊如圖8:
圖8 期望信號模塊Fig.8 Desired signal module
可以看到其輸出是通過輸入給地址讀出信號,選擇了計數(shù)器并設(shè)置updown端口,用于實現(xiàn)當(dāng)up為1時地址不斷加1,為0時地址減1的效果。如圖9:
圖9 輸入信號模塊Fig.9 Input signal module
Quartus II綜合實現(xiàn)部分主要包括2個計數(shù)模塊,2個rom模塊和一個主模塊。計數(shù)模塊是用來進行計數(shù),rom模塊中romx用來存儲輸入信號x,romd用來存儲期望信號d,主模塊包括了存儲 、計數(shù)、乘法、卷積濾波、權(quán)值更新。
然后建立波形文件,其中,clrd保持了20 us的“1”,后全為“0”;clrx保持了10 us的“1”,后全為“0”;為保證計數(shù)器輸出一直為加1將updown一直設(shè)置為“1”。然后進行功能仿真得出波形如圖10,其中x為輸入信號,d為期望信號,y為濾波輸出??梢钥闯鰹V波輸出與期望信號相同,這與3.1節(jié)Matlab仿真結(jié)果是一致的,因此表明本文設(shè)計的濾波器功能正確,性能良好。
本文提出的是主要基于FIR的自適應(yīng)濾波器,運用了LMS算法,先在Matlab上進行操作,在達到濾波目的的同時完成對各參數(shù)的選擇。在實驗中,為了方便計算,步長u的值選擇2的n次方的倒數(shù),然后再改變信噪比和適合的濾波器階數(shù),來觀察濾波效果。通過觀察比較可知當(dāng)信噪比為10 db,濾波器階數(shù)為128階,u的值為1/1024時濾波效果最好。然后在Quartus II上實現(xiàn)設(shè)計,對主模塊數(shù)選擇后,建立頂層原理圖后在波形文件中觀察輸出,完成濾波器的設(shè)計。實驗結(jié)果表明適當(dāng)改變?yōu)V波器的步長和階數(shù)可以去除噪聲影響,得到最佳濾波效果。
圖10 Quartus II波形仿真Fig.10 Quartus II saveform simulation