目錄
1、自適應濾波器簡介
2、自適應濾波噪聲抵消原理
3、LMS算法原理
4、matlab實現
4.1、LMSfliter()
4.2、LMSmain()
5、結果分析
1、自適應濾波器簡介
自適應濾波,就是利用前一時刻以獲得的濾波器參數的結果,自動的調節現時刻的濾波器參數,以適應信號和噪聲未知的或隨時間變化的統計特性,從而實現最優濾波。自適應濾波器實質上就是一種能調節自身傳輸特性以達到最優的維納濾波器。自適應濾波器不需要關於輸入信號的先驗知識,計算量小,特別適用於實時處理。維納濾波器參數是固定的,適合於平穩隨機信號。卡爾曼濾波器參數是時變的,適合於非平穩隨機信號。然而,只有在信號和噪聲的統計特性先驗已知的情況下,這兩種濾波技術才能獲得最優濾波。在實際應用中,常常無法得到信號和噪聲統計特性的先驗知識。在這種情況下,自適應濾波技術能夠獲得極佳的濾波性能,因而具有很好的應用價值。
常用的自適應濾波技術有:最小均方(LMS)自適應濾波器、遞推最小二乘(RLS)濾波器格型濾波器和無限沖激響應(IIR)濾波器等。這些自適應濾波技術的應用又包括:自適應噪聲抵消、自適應譜線增強和陷波等。
2、自適應濾波噪聲抵消原理

圖1給出了用自適應噪聲抵消技術來解決噪聲背景中的信號提取問題的基本原理。主輸入端接收從信號源發來的信號s但是受到噪聲源的干擾收到噪聲vo。參考輸入端的參考信號為vi是一個與有用信號s無關但與vo相關的噪聲信號。主輸入中含有待抵消的加性噪聲,參考輸入對准主輸入中的噪聲vo。利用兩輸入噪聲的相關性和信號與噪聲的獨立性,使參考輸入通過自適應濾波器與主輸入中噪聲分量逼近並相減,輸出誤差信號。自適應濾波算法決定濾波器對參考信號 v1的處理,使得濾波器的輸出盡可能地逼近主輸入中的干擾成分。所以,在最佳准則意義下濾波器的輸出v逼近vo等效於系統的輸出e逼近s。從而在噪聲對消器的輸出端大大地提高了信噪比。但若參考通道除檢測到噪聲v1外,還收到信號分量,則自適應濾波器的輸出中將包含信號分量,從而使噪聲對消效果變壞。因此,為獲得良好的噪聲對消性能,應使參考通道檢測到的信號盡可能小,在信號不可測的噪聲環境拾取參考輸入信號。
3、LSM算法原理
http://download.csdn.net/source/432206見其推導
4、matlab函數實現
4.1、LMSfilter(xn,dn,M,mu)
% 輸入參數: % xn 輸入的信號序列 (列向量) % dn 所期望的響應序列 (列向量) % M 濾波器的階數 (標量) % mu 收斂因子(步長) (標量) 要求大於0,小於xn的相關矩陣最大特征值的倒數 % 輸出參數: % W 濾波器的權值矩陣 (矩陣) % 大小為M x itr, % en 誤差序列(itr x 1) (列向量) % yn 實際輸出序列 (列向量) function [yn,W,en]=LMSfilter(xn,dn,M,mu) itr = length(xn); en = zeros(itr,1); % 誤差序列,en(k)表示第k次迭代時預期輸出與實際輸入的誤差 W = zeros(M,itr); % 每一行代表一個加權參量,每一列代表-次迭代,初始為0 % 迭代計算 for k = M:itr % 第k次迭代 x = xn(k:-1:k-M+1); % 濾波器M個抽頭的輸入 y = W(:,k-1).' * x; % 濾波器的輸出 en(k) = dn(k) - y ; % 第k次迭代的誤差 % 濾波器權值計算的迭代式 W(:,k) = W(:,k-1) + 2*mu*en(k)*x; end % 求最優時濾波器的輸出序列 r如果沒有yn返回參數可以不要下面的 yn = inf * ones(size(xn)); % inf 是無窮大的意思 for k = M:length(xn) x = xn(k:-1:k-M+1); yn(k) = W(:,end).'* x;%用最后得到的最佳估計得到輸出 end
4.2、filtermain()
clc; clear all; close all; %% 產生信號源 [X,Fs,bits] = wavread('C:\Users\mahl\Desktop\現代信號處理\MahlDSP\LMS\wav\XP開機.wav'); s = X(:,1); %取出雙通道中其中一個通道作為信號源s wavwrite(s,Fs,bits,'C:\Users\mahl\Desktop\現代信號處理\MahlDSP\LMS\wav\原始音頻'); %創建原始音頻.wav n = length(s); t=(0:n-1); figure(1); subplot(4,1,1); plot(t,s);grid; ylabel('幅度'); xlabel('時間'); title('原始音頻信號'); %% 產生均值為0方差為0.1的噪聲信號 v = sqrt(0.1)*randn(n,1); %% 產生AR模型的噪聲 ar=[1,1/2]; %AR模型 v_ar=filter(1,ar,v); % subplot(4,1,2); % plot(t,v_ar);grid; % ylabel('幅度'); % xlabel('時間'); % title('AR模型噪聲信號'); %% 產生MA模型的噪聲 是AR模型的相關噪聲 ma=[1,-0.8,0.4,-0.2]; %MA模型 v_ma=filter(ma,1,v); subplot(4,1,2); plot(t,v_ma);grid; ylabel('幅度'); xlabel('時間'); title('相關噪聲信號'); %% 產生期望信號 dn = s + v_ar; wavwrite(dn,Fs,bits,'C:\Users\mahl\Desktop\現代信號處理\MahlDSP\LMS\wav\含噪音頻'); %創建含噪音頻 subplot(4,1,3); plot(t,dn);grid; ylabel('幅度'); xlabel('時間'); title('含噪音頻信號'); %% LMS濾波算法 M = 10; %濾波器階數M mu = 0.0005; %濾波器的步長 [ylms,W,elms] =LMSfilter(v_ma,dn,M,mu); %% 繪制去噪后的語音信號 subplot(4,1,4); plot(t,elms);grid; ylabel('幅度'); xlabel('時間'); title('去噪后的音頻信號'); wavwrite(elms,Fs,bits,'C:\Users\mahl\Desktop\現代信號處理\MahlDSP\LMS\wav\去噪音頻');%保存去除噪聲的音頻 %% e = s-elms;%剩余噪聲 figure(2); subplot(2,1,1); plot(t,e);grid; ylabel('幅度'); xlabel('時間'); title('剩余噪聲'); %% 一小段三個信號比較 subplot(2,1,2); t=(50000:50500); plot(t,elms(50000:50500,1 ),'r',t,e(50000:50500,1),'g',t,s(50000:50500,1),'b'); axis([50000,50500,-1,1]); ylabel('幅度'); xlabel('時間'); legend('去噪后的語音信號','剩余噪聲','原始音頻'); title('一小段三個信號比較');
5、結果分析


我們從圖2可以看到,雖然真實的音頻信號中混雜了很強的噪聲,甚至噪聲淹沒了真實的信號,但是通過我們的LMS自適應濾波器后,可以很好的恢復出真實信號。所以自適應濾波器具有良好的去噪性能。從圖3,圖4,圖5分析來看,雖然隨着步長u增加,收斂時間t逐漸減少,音頻信號在u很小的時候,因為收斂慢,混有噪聲;但是當u增加是,音頻信號越來越清晰。但是當步長超過某一值時,音頻中又開始很有噪聲產生,再接着增加步長u,甚至會把音頻信號也濾去掉。所以若u值取的過小,收斂速度就會過於緩慢,當取的過大時,又會造成系統收斂的不穩定,導致發散。所以選取最佳的u值是LMS算法中一個重要的問題。
