用matlab軟體實現變長nlms自適應濾波器演算法

時間 2021-08-30 10:17:29

1樓:京城飛

clear all

close all

n=10; %濾波器階數

sample_n=500; %取樣點數

a=1; %訊號幅度

snr=10; %訊雜比

t=1:sample_n;

length_t=100; %期望訊號序列長度

d=a*sin(2*pi*t/length_t); %期望訊號

m=length(d); %m為接收資料長度

x=awgn(d,snr); %經過通道(加噪聲)

delta=1/(10*n*(a^2)); %計算能夠使lms演算法收斂的delta

y=zeros(1,m);

h=zeros(1,n); %lms濾波器係數

h_normalized=zeros(1,n); %歸一化lms濾波器係數

y1=zeros(1,n);

for n=n:m %係數調整lms演算法

x1=x(n:-1:n-n+1);

%lms演算法

y(n)=h*x1';

e(n)=d(n)-y(n);

h=h+delta*e(n)*x1;

%nlms演算法

y_normalized(n)=h_normalized*x1';

e_normalized(n)=d(n)-y_normalized(n);

h_normalized=h_normalized+e_normalized(n)*x1/(x1*x1');

enderror=e.^2; %lms演算法每一步迭代的均方誤差

error_normalized=e_normalized.^2; %nlms演算法每一步迭代的均方誤差

for n=n:m %利用求解得到的h,與輸入訊號x做卷積,得到濾波後結果

x2=x(n:-1:n-n+1);

y1(n)=h*x2';

y2(n)=h_normalized*x2';

endsubplot(411)

plot(t,d);

axis([1,sample_n,-2,2]);

subplot(412)

plot(t,x);

subplot(413)

plot(t,y);

subplot(414)

plot(t,y_normalized);

figure(2)

plot(t,error,'r',t,error_normalized,'b');

2樓:手機使用者

一種具有雙瞬變因子的lms自適應濾波演算法

曾召華 劉貴忠 馬社祥

(西安交通大學資訊與通訊工程研究所 西安710049)

作者在文獻〔4〕中提出了一種改進的瞬變步長splms自適應濾波演算法。本文在splms演算法的基礎上,進一步提出一種基於瞬變步長、瞬變平滑因子的雙瞬變splms演算法—dsplms演算法。該演算法除具有常規lms演算法簡單的優點外,還具有更高的起始收斂速率、更小的權失調噪聲和更大的抑噪能力。

文中重點討論瞬變步長、瞬變平滑因子的變化特性。計算機**結果支援了理論分析。

自適應濾波器,失調噪聲,收斂速度,最小均方誤差,瞬變因子

1 引言

自適應濾波器及其相應演算法是多年來人們廣泛研究的課題。基於widrow-hoff標準的lms演算法和其相應的自適應濾波器以其演算法和結構簡單,便於實時訊號處理等優點,在不同領域得到了最為廣泛的應用。而為克服常規的固定步長lms或牛頓lms(newton lms,即nlms)自適應演算法在收斂速率、跟蹤速率與權失調噪聲之間要求上存在的較大矛盾,人們發展了各種各樣的改進型lms演算法,如基於瞬變步長lms自適應濾波演算法〔1~6〕、基於正交變換(dct、fft、小波變換、子帶濾波)的新型lms均衡演算法〔7~8〕。

基於模糊判斷的自適應lms系統識別和基於最小四次均方誤差的lms自適應平穩收斂演算法〔9~10〕。在所有改進型lms演算法中,瞬變步長lms自適應濾波演算法是研究最為廣泛的一類lms自適應濾波演算法。本文演算法也是基於瞬變因子的一種改進lms自適應濾波演算法。

2 splms演算法分析及問題的提出

在文獻〔4〕中,作者對上述方案進行了大量的計算機**和理論分析,結果表明:(1)上述諸種演算法的收斂速率與系統輸入訊雜比snr直接相關,訊雜比snr越高,它們的收斂速率普遍提高;隨著訊雜比snr的降低,它們的收斂速率減慢,甚至出現發散現象,因此它們必須在弱干擾下完成規一化起動,即在起始過程中噪聲要相當小,否則效果不佳。(2)在上述所有演算法中,由於採用瞬時平方誤差效能函式e2k來代替均方誤差效能函式,所以其演算法的權值收斂過程表現為加權向量的平均值變化規律和由於噪聲引起的隨機起伏項的疊加。

因此,噪聲方差越大,則隨機起伏項越大,表現為權值振動也就越大。(3)為了追求更快的收斂性,往往增大μ和m,但濾波器階數越高,步長因子μ和輸入功率越大,就便得失調係數也越大。在有限次數起動迭代過程中,也就很難收斂到較穩態值,所以必須尋求更佳的瞬態步長演算法。

文獻〔4〕在準最小均方(pseudo-lms,即plms)誤差演算法基礎上通過採用滑動時間窗,減少plms演算法起動過程的計算量;同時在權值迭代中加一平滑迭代而使plms演算法具備全域性較強的抗噪效能,較快速收斂效能而提出了splms演算法,即:

其中rk為m階濾波器輸入訊號的功率估值;wk為濾波器的第k步m維最優權向量估值;xk是濾波器輸入訊號的m維輸入資料向量;dk為希望輸出;μk為濾波器第k步瞬態步長。切換條件中,閾值μ類似於lms演算法的步長因子μl,滿足:

μl<μ<1/trr,r=e〔xkxtk〕(7)

為待定的演算法常數,是μk變化的動態平衡點。而α是一常數為平滑因子,它決定上一次的權值變化對本次權值更新的影響程度。k0是採用式(2)規一化啟動後,演算法收斂到較穩態時的步數。

式(4)是μk下降的遞推演算法,式(5)是μk上升的平滑遞推演算法。λ為上升的速度因子,滿足0<λ<1。在實際應用中,考慮到學習過程的啟動速度,一般取較大的λ值,即:

0.9<λ<1,k0=25~35,|α|<0.3(8)

splms演算法的實質是:在開始k0步中,採用啟動速度較快的mlms(mend lms)演算法收斂到相對較穩態的狀態;然後在k≥k0+1過程中,採用瞬態步長μk來訓練演算法。而μk根據不同的切換條件將圍繞μ作升降變化,其迭代計算主要表現為不降即升的動態過程。

α主要根據經驗來取值,輸入資料的非平穩性越大,噪聲方差越大時,增大α可明顯抑制振動,從而加速收斂過程;在噪聲小時減小α。

但splms演算法也有一明顯不足,即α主要根據經驗來取值,沒有理論上的確切依據。α取值不當,反而容易造成演算法收斂效能更差,甚至發散的現象。從理論上分析,α與瞬態步長μk和輸出誤差ek(文中定義為:

ek=dk-wtk xk)應有一定關係。在演算法啟動階段,ek較大,為追求啟動速度而常取較大步長μk,但μk越大,權失調係數也就越大,有時反而起不到應有的作用,這時就應相應增加α值來平滑權失調噪聲;在演算法漸趨穩定,步長μk漸趨於常數,ek漸趨於0,此時α也應漸趨於0。綜合起來就是:

α應隨步長μk和誤差ek瞬時變化而變化,也應是一瞬變因子。本文重點就是尋求瞬變因子αk的數學表示式以滿足上述分析的要求。

3 改進的雙瞬變因子splms演算法——dsplms演算法

3.1 μk的變化特性

從式(4)和式(5)可以看出,在k≥k0+1過程中,μk根據不同的切換條件將圍繞μ作升降變化,μk的迭 代計算主要表現為不降即升的動態過程。對於式(5),設k≥kr時,μk<μ,則在k≥kr>k0+1的上升過程中:

即上升速度按指數衰減,使趨於平衡點μ的上升速度迅速減小。其變化過程類似於一電阻電容串聯電路上電容的充電過程。對式(4),由於μk=μk-1/(1+rk),rk>0,即使很小的rk經過一步迭代就足以使μk<μ,再次切換到上升過程。

當rk較大時,下降形成的負脈衝也較大。

綜上所述,在k≥k0+1的收斂過程中,μk的時變特性等價於幅值極不對稱的隨機正負尖脈衝序列組成的瞬態分量和直流分量μ的線性疊加。瞬態分量的負脈衝強度與rk瞬值對應,有利於抑制區域性自激或短暫發散,減小權向量噪聲,提高穩定度。在rk較小、演算法漸趨於穩定時,瞬變分量趨於0,μk~μ。

3.2 αk的變化特性

定義:δwk=wk+1-wk為自適應濾波器的權係數增量;ξ為均方誤差效能函式,ξ=e〔ek〕2,ek=dk-wtk xk為輸出誤差,則splms演算法的權係數更新公式由式(1)可重寫為:

wk+1=wk-μk^wξk+αδwk-1(10)

其中wξ為ξ的梯度函式,^w為wξ的第k步估計。由式(10)的係數更新公式,我們可寫出均方誤差效能函式的表示式:

式中上標t表示向量的轉置。若用一向量^wζk+1去左乘式(10),則可得到:

^wξk+1wk+1=^wζk+1wk-μk^wζk+1^wζk+^wζk+1αδwk-1(13)

利用式(12)的結論,可將式(13)化簡為:

^twζk+1δwk=0(14)

由於參量μk和α均為實的標量因子,故式(14)又可寫成:

(μk^twζk+1)(αδwk)=0(15)

式(15)清楚地表明:在splms演算法中,自適應濾波器的權係數在迭代過程中,其均方誤差效能函式的梯度估值與權係數增量始終存在一個正交關係。δwk-1對δwk的調節作用是在當前梯度估值方向上,給出與梯度估值方向正交向量,並以這兩個向量所構成的合向量來改變權係數空間的權重。

對於fir結構的lms自適應系統而言,其均方誤差效能函式在平穩輸入時為一個二次型函式,在收斂點附近仍可視為一個二次型函式,故有:

ξ(wk+1)=wtk rwk-2wtk p+c(16)

式中r=e〔xtk xk〕為輸入訊號的自相關矩陣,p=e〔dkxk〕為所需訊號與輸入訊號的互相關向量,c=e〔d2k〕,則由式(16)可得:

將式(17)代入式(18),則式(18)可變形為:

式(19)就是本文給出的瞬變平滑因子αk的數學表示式。顯然,它滿足前面分析時所提出的要求,且在演算法達到穩態收斂時,滿足:

limk→∞αk=0(20)

3.3 改進的雙瞬變splms演算法——dsplms演算法

用式(19)中αk的表示式替換式(1)中的α,就得到本文提出的具有雙瞬變因子的lms演算法——dsplms演算法,即

wk+1=wk+2μk(dk-wtk xk)xk+αk(wk-wk-1)(21)

μk=λ/(1+2λrk),0≤k≤k0(22)

由式(19)、(20)可知,αk是一個與μk成正比且具有衰減性的瞬變因子,從而使本文提出的dsplms演算法比splms演算法更能快速穩定收斂;與常規lms演算法相比,其效能有極大的提高,為實時訊號處理提供了一個較好的演算法。

4 計算機**

**實驗的結構如圖1所示,其中dk為隨機輸入訊號,nk為高斯白噪聲,ek為輸出誤差,xk為自適應濾波器的輸入,yk為濾波器輸出,此時xk=dk+nk。

在圖2中,dk是均值為0、方差為1的高斯白噪聲;nk是與dk不相關的均值為0、方差為1的高斯白噪聲;濾波器引數:m=32,λ=0.9,μl=0.005,μ=0.01,α=0.1。在圖3中,nk為均值為0、方差為0.1的高斯白噪聲,其它引數同圖2。

圖2、3為分別採用lms、splms和dsplms演算法進行濾波的學習曲線比較圖。

從圖2(強幹擾啟動)和圖3(較弱干擾啟動)中可以看出:在強幹擾下,dspl ms 具有比splms好、比lms好得多的啟動速度和收斂速度;而在弱干擾下,dsplms仍具有比splms快、比lms快得多的啟動速度。從圖中同時還可看出:

dsplms與splm s具有幾乎相同的收斂速度,它們的收斂速度比lms快得多。

5 結語

加進瞬變平滑項的規一化起動,使dsplms具有更高的起始收斂速度、更小的權失調噪聲和更大的抑噪能力;在平穩連線之後的穩態過程中,該演算法趨於步長為μ的lms演算法效能,但由於瞬變分量負脈衝的作用,在相近的權失調量下可按式(7)取較大的μ值,增強演算法對時變引數過程的跟蹤處理能力;輸入資料的非平穩性越大,噪聲方差越大時,加進的瞬變平滑項使權失調噪聲減小,從而使本文提出的dsplms演算法比splms演算法更能快速穩定地收斂;與常規lms演算法相比,其效能有極大的提高,可以明顯抑制振動,從而加速收斂過程。**:

請問怎麼用“matlab”軟體算定積分

用matlab的int 函式可以快速算相對簡單的定積分。使用格式 int s,v,a,b s 被積函式 v 積分變數 a,b 積分割槽間 syms x f int cos x sqrt 1 x 2 x,0,10 vpa f,5 ans 0.37571 matlab怎麼計算定積分? 白楊龍 int是解...

Matlab下如何實現ifgoto

原創 matlab實現c c 的if.goto.語句的解決辦法之一 原創 c c 示例 for i 0 to n end for k end j end ilabel1 goto到的語句 matlab 實現這樣的if.goto.語句,我的解決辦法是使用乙個退出標誌變數,然後當要從內迴圈退出到外層某個...

matlab軟體如何程式設計的,MATLAB軟體如何程式設計的

matlab 程式的檔案 是以.m檔案的形式呈現的。將matlab 編寫進.m檔案內然後執行即可。例子 建立一個 helloworld.m 檔案內包括內容如下 fprintf hello world 使用快捷鍵f5直接執行,然後可以在控制檯下看到列印的 hello world jack little...