自適應濾波:最小均方誤差濾波器(LMS、NLMS)
作者:桂。
時間:2017-04-02 08:08:31
宣告:歡迎被轉載,不過記得註明出處哦~
【讀書筆記08】
前言
西蒙.赫金的《自適應濾波器原理》第四版第五、六章:最小均方自適應濾波器(LMS,Least Mean Square)以及歸一化最小均方自適應濾波器(NLMS,Normalized Least Mean Square)。全文包括:
1)LMS與維納濾波器(Wiener Filter)的區別;
2)LMS原理及推導;
3)NLMS推導;
4)應用例項;
內容為自己的讀書記錄,其中錯誤之處,還請各位幫忙指出!
一、LMS與維納濾波器(Wiener Filter)的區別
- 這裡介紹的LMS/NLMS,通常逐點處理,對應思路是:隨機梯度下降;
- 對於Wiener Filter,給定準則函式J,隨機/批量梯度都可以得出最優解;
- LMS雖然基於梯度下降,但準則僅僅是統計意義且通常引入誤差,可以定義為$J_0$,簡而言之$J$通常不等於$J_0$,得出的最優解$w_o$自然也通常不等於維納最優解;
- 分析LMS通常會分析穩定性,穩定性是基於Wiener解,之前已給出分析。但LMS是Wiener解的近似,所以:迭代步長的穩定性,嚴格適用於Wiener解,對於LMS只是一種近似參考,並沒有充分的理論依據。
下文的分析仍然隨機梯度下降的思路進行。
二、LMS原理及推導
LMS是時間換空間的應用,如果迭代步長過大,仍然有不收斂的問題;如果迭代步長過小,對於不平穩訊號,還沒有實現尋優就又引入了新的誤差,屋漏偏逢連夜雨!所以LMS系統是脆弱的,訊號儘量平穩、哪怕短時平穩也湊合呢。
給出框圖:
關於隨機梯度下降,可以參考之前的文章。這裡直接給出定義式:
利用梯度下降:
$- \nabla J = {\bf{x}}{\left( {{{\bf{w}}^T}{\bf{x}} - {d}} \right)^T}$
給出LMS演算法步驟:
1)給定$\bf{w}(0)$,且$1<\mu<1/\lambda_{max}$;
2)計算輸出值:$y\left( k \right) = {\bf{w}}{\left( k \right)^T}{\bf{x}}\left( k \right)$;
3)計算估計誤差:$e\left( k \right) = d\left( k \right) - y\left( k \right)$;
4)權重更新:${\bf{w}}\left( {k + 1} \right) = {\bf{w}}\left( k \right) + \mu e\left( k \right){\bf{x}}\left( k \right)$
三、NLMS推導
看到Normalized,與之聯絡的通常是約束條件,看到約束不免想起拉格朗日乘子。思路有了,現在開始分析:
假設${\bf{w}}\left( k \right) \Rightarrow {\bf{w}}\left( {k + 1} \right)$得到最優權重,即:
$d\left( k \right) = {\bf{w}}\left( {k + 1} \right){\bf{x}}\left( k \right)$
我們希望在得到期望權重的附近,迭代不要過大以免錯過最優值:
寫出準則函式:
這裡僅僅分析基於歐式距離$p = 2$的情形,其它範數類似。求解得出:
通常為了防止分母為零迭代方程需要修正,而修正後步長存在偏差,故新增調節因子$\mu$:
給出NLMS演算法步驟:
1)給定$\bf{w}(0)$;
2)計算輸出值:$y\left( k \right) = {\bf{w}}{\left( k \right)^T}{\bf{x}}\left( k \right)$;
3)計算估計誤差:$e\left( k \right) = d\left( k \right) - y\left( k \right)$;
4)權重更新:${\bf{w}}\left( {k + 1} \right) = {\bf{w}}\left( k \right) + \frac{\mu }{{\alpha + {{\left| {{\bf{x}}\left( k \right)} \right|}^2}}}{\bf{x}}\left( k \right){e^*}\left( k \right)$
四、應用例項
A-自適應噪聲濾波
這個場景可以簡化為:一個房間兩個麥克風,一個放在遠處採集房間噪聲,一個放在說話人附近採集帶噪語音,認為兩個音訊檔案的噪聲相似。
這裡噪聲直接用白噪聲,對應實際場景可以認為是採集的噪聲資料,給出主要程式碼:
[s, fs, bits] = wavread(filename); s=s-mean(s); s=s/max(abs(s)); N=length(s); time=(0:N-1)/fs; %%生成帶噪訊號 clean=s'; ref_noise=0.1*randn(1,length(s)); mixed = clean+ref_noise %NLMS mu=0.05;M=32;espon=1e-4; % [en,wn,yn]=lmsFunc(mu,M,ref_noise,mixed);% [en,wn,yn]=nlmsFunc(mu,M,ref_noise,mixed,espon);
LMS程式碼:
function [e,w,ee]=lmsFunc(mu,M,u,d) % Normalized LMS % Call: % [e,w]=nlms(mu,M,u,d,a); % % Input arguments: % mu = step size, dim 1x1 % M = filter length, dim 1x1 % u = input signal, dim Nx1 % d = desired signal, dim Nx1 % a = constant, dim 1x1 % % Output arguments: % e = estimation error, dim Nx1 % w = final filter coefficients, dim Mx1 %intial value 0 w=zeros(M,1); %This is a vertical column %input signal length N=length(u); %make sure that u and d are colon vectors u=u(:); d=d(:); %NLMS ee=zeros(1,N); for n=M:N %Start at M (Filter Length) and Loop to N (Length of Sample) uvec=u(n:-1:n-M+1); %Array, start at n, decrement to n-m+1 e(n)=d(n)-w'*uvec; w=w+2*mu*uvec*e(n); % y(n) = w'*uvec; %In ALE, this will be the narrowband noise. end
NLMS程式碼:
function [e,w,ee]=nlmsFunc(mu,M,u,d,a) % Normalized LMS % Call: % [e,w]=nlms(mu,M,u,d,a); % % Input arguments: % mu = step size, dim 1x1 % M = filter length, dim 1x1 % u = input signal, dim Nx1 % d = desired signal, dim Nx1 % a = constant, dim 1x1 % % Output arguments: % e = estimation error, dim Nx1 % w = final filter coefficients, dim Mx1 %intial value 0 w=zeros(M,1); %This is a vertical column %input signal length N=length(u); %make sure that u and d are colon vectors u=u(:); d=d(:); %NLMS ee=zeros(1,N); for n=M:N %Start at M (Filter Length) and Loop to N (Length of Sample) uvec=u(n:-1:n-M+1); %Array, start at n, decrement to n-m+1 e(n)=d(n)-w'*uvec; w=w+mu/(a+uvec'*uvec)*uvec*e(n); % y(n) = w'*uvec; %In ALE, this will be the narrowband noise. end
對應結果圖:
可以看出LMS/NLMS在最開始都有一個自適應的過程。
NLMS基於訊號$x$的能量實現變步長,訊號大步長小,訊號小則步長大:目標訊號明顯,則迭代細緻,不明顯,則一帶而過,呵呵,跟平時看書還挺像,聰明的孩子。
再來看一組訊號:
這裡在中間令噪聲突變,可以看到濾波器又需要重新自適應,因此對於短時平穩LMS勉強使用,如果不斷變呢?非平穩LMS自然無效了,這個時候就需要Kalman Filter來搭把手。
B-工頻噪聲濾波
現在有一個音訊訊號,分析頻譜:
可以看到訊號帶有明顯的$50Hz$噪聲,我們知道$50Hz$的正弦與餘弦可以組合成任意相位的$50Hz$頻率訊號,基於這個思路,進行自適應濾波:
給出主要的程式碼:
x1=cos(2*pi*50*time); x2=sin(2*pi*50*time); w1=0.1; w2=0.1; e=zeros(1, N); y=zeros(1, N); mu=0.05; for i=1: N y(i)=w1 * x1(i)+ w2 * x2(i); e(i) =x(i)-y(i); w1=w1+mu * e(i) * x1(i); w2=w2+mu * e(i) * x2(i); end
結果圖可以看出,工頻50Hz濾除:
基於LMS的應用還有很多,不一一說啦。
參考:
- Simon Haykin 《Adaptive Filter Theory Fourth Edition》.
相關推薦
自適應濾波:最小均方誤差濾波器(LMS、NLMS)
作者:桂。 時間:2017-04-02 08:08:31 宣告:歡迎被轉載,不過記得註明出處哦~ 【讀書筆記08】 前言 西蒙.赫金的《自適應濾波器原理》第四版第五、六章:最小均方自適應濾波器(LMS,Least Mean Square)以及歸一化最小均方自適應濾波器(NLMS,
音訊噪聲抑制(4):普通最小均方誤差(LMS)演算法
引言前面講了基於Weiner濾波器的噪聲抑制方法。維納濾波器有一些假設條件,比如訊號平穩(這就導致解方程算濾波器係數的時候,自相關矩陣與絕對時間無關)、噪聲和有用訊號不相關…其實,這些條件在實際中並不是那麼容易滿足的。因此,用維納濾波器來實現訊號去噪,效果不是特別理想。於是就
Minimum Mean Squared Error (MMSE)最小均方誤差
square 估計 div 表示 函數 誤差 chat 求和 最大 均方誤差(Mean Squared Error, MSE)是衡量“平均誤差”的一種較方便的方法。可以評價數據的變化程度。均方根誤差是均方誤差的算術平方根。 最小二乘(LS)問題是這樣一類優化問題,目標函
Python實現最小均方算法(lms)
期望值 數學 樣本 lms算法跟Rosenblatt感知器相比,主要區別就是權值修正方法不一樣。lms采用的是批量修正算法,Rosenblatt感知器使用的是單樣本修正算法。兩種算法都是單層感知器,也只適用於線性可分的情況。 詳細代碼及說明如下:‘‘‘ 算法:
信源編碼第五次作業-LMS最小均方演算法
LMS演算法是自適應濾波器中常用的一種演算法,與維納演算法不同的 是,其系統的係數隨輸入序列而改變。維納演算法中擷取輸入序列自相關函式的一段構造系統的最佳係數。而LMS演算法則是對初始化的濾波器係數依據最小均方誤差準則進行不斷修正來實現的。因此,理論上講LMS演算法的效能在同等條件下要優於維納演
Python實現最小均方演算法(lms)
lms演算法跟Rosenblatt感知器相比,主要區別就是權值修正方法不一樣。lms採用的是批量修正演算法,Rosenblatt感知器使用的 是單樣本修正演算法。兩種演算法都是單層感知器,也只適用於線性可分的情況。 詳細程式碼及說明如下:
自適應濾波:LMS/NLMS
前言 西蒙.赫金的《自適應濾波器原理》第四版第五、六章:最小均方自適應濾波器(LMS,Least Mean Square)以及歸一化最小均方自適應濾波器(NLMS,Normalized Least Mean Square)。全文包括: 1)LMS與維納濾波器(Wiener Filter
自適應濾波:梯度下降演算法
作者:桂。 時間:2017-04-01 06:39:15 宣告:歡迎被轉載,不過記得註明出處哦~ 【學習筆記07】 前言 西蒙.赫金的《自適應濾波器原理》第四版第四章:最速下降演算法。優化求解按照有/無約束分類:如投影梯度下降演算法((Gradient projection)便是有
自適應濾波:維納濾波器——FIR及IIR設計
作者:桂。 時間:2017-03-23 06:28:45 【讀書筆記02】 前言 仍然是西蒙.赫金的《自適應濾波器原理》第四版,距離上次看這本書已經過去半個月,要抓點緊了。本文主要包括: 1)何為維納濾波器(Wiener Filter); 2)Wiener濾波器的推導;
記一下機器學習筆記 最小均方(LMS)演算法
這裡是《神經網路與機器學習》第三章的筆記… 最小均方演算法,即Least-Mean-Square,LMS。其提出受到感知機的啟發,用的跟感知機一樣的線性組合器。 在意義上一方面LMS曾被用在了濾波器上,另一方面對於LMS的各種最優化方式為反向傳播演算法提供了
最小均方差的概率闡述(Probabilistic interpretation)
當面對一個像線性迴歸的迴歸問題時,為什麼最小方差成本函式是一個好的解決方案呢?在這一節的內容,我們通過概率論的視角會發現最小方差迴歸是一個很自然的演算法。我們不妨假設,目標變數與輸入變數有如下關於:y(i)=θTx(i)+ϵ(i),y(i)=θTx(i)+ϵ(i),上式中的ϵ
最大方差和最小協方差解釋(線性代數看PCA)
數學基礎 限制 兩個 ali 從大到小 其中 我們 特征 向上 轉自: 最大方差和最小協方差解釋(線性代數看PCA) PCA降維 ——最大方差和最小協方差聯合解釋(線性代數看PCA) 註:根據網上資料整理而得,歡迎討論
迴歸評價指標:均方誤差根(RMSE)和R平方(R2)
做迴歸分析,常用的誤差主要有均方誤差根(RMSE)和R-平方(R2)。 RMSE是預測值與真實值的誤差平方根的均值。這種度量方法很流行(Netflix機器學習比賽的評價方法),是一種定量的權衡方法。 ””’ 均方誤差根 ”’ def rmse(y_te
最小點對分治法(洛谷1257)
分治法 nbsp fin -m 描述 ron can 復雜 集中 題目描述 給定平面上n個點,找出其中的一對點的距離,使得在這n個點的所有點對中,該距離為所有點對中最小的 輸入樣例#1: 3 1 1 1 2 2 2 輸出樣例#1: 1.0000首先我
51 Nod 1065 最小正子段和(前綴和)
sort lin 組成 name turn nod color main tmp 題目鏈接:https://www.51nod.com/onlineJudge/questionCode.html#problemId=1065¬iceId=348062 題意:
劍指Offer:面試題33——把陣列排成最小的數(java實現)(未完待續)
問題描述: 輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列{3,32,321},則打印出這三個數字能排成的最小數字為321323。
關於最大後驗概率估計就是結構風險最小化的詳解(統計學習方法)
(1)最大似然估計 這篇文章中提到,關於最大似然估計,使用頻率去估計概率,在拋硬幣問題中會得到正面向上的概率是0.7的結論,其原因是由於樣本數量太小,使用經驗風險最小化會出現過擬合現象。 經驗風險:即模型關於訓練樣本集的平均損失。(2)最大後驗概率估計: 為了
人工智慧之最大最小值演算法+剪枝優化(演算法 + C++實現)
1、最小最大值方法簡述 現在我們來看看博弈樹節點標註的另一種方法:最小最大值方法。整個博弈樹儘管大的出奇,然而在只有一部分有用的情況下,利用最小最大值方法是有其優點的,很容易推廣使用。 比方說,競賽的結果是以錢為賭注的。為方便起見,設賭金為一
最小的N個和(優先隊列)
包含 containe contain content 優先 cin 得到 bool end 描述 有兩個長度為N的序列A和B,在A和B中各任取一個數相加可以得到N^2個和,求這N^2個和中最小的N個。 輸入 第一行輸入一個正整數N(N<=10
自適應:用JS做的自適應,是最差的自適應,記頁面重新整理前後尺寸變化
今天遇到一個硬茬,我在使用weui重構一個頁面時,出現一個問題:路由進入頁面時,頁面內容尺寸硬是會變大,重新整理後又恢復正常: 專案背景:一個使用react-starter-kit構建的B端SPA專案 上圖: 出現問題時的情況: 重新整理後(它本應該的樣子): &