自適應濾波:遞歸最小二乘


作者:桂。

時間:2017-04-04  15:51:03

鏈接:http://www.cnblogs.com/xingshansi/p/6664478.html 

聲明:歡迎被轉載,不過記得注明出處哦~


【讀書筆記12】

前言

  西蒙.赫金的《自適應濾波器原理》第四版第九章:遞歸最小二乘(Recursive least squares, RLS)。記得看完第一章之后,半個月沒有碰這本書,后來想着開了個頭,還是該看到第十章的卡爾曼濾波才好,前前后后又花了半個月,總算看到了第九章。回頭看看,靜下心來,確實容易理清思路,也學到不少知識。雖然前路漫漫,編程水平不夠、機器學習的理論還沒多少概念、算法基礎沒多少、收入也很微薄......不過還是該表揚一下自己。既然選擇了道路,自己還是該耐心走下去,哪怕上不了山頂,也該看看高處的風景。

  言歸正傳,本文主要包括:

  1)RLS原理介紹;

  2)RLS應用實例;

內容為自己的學習記錄,其中多有借鑒他人的地方,最后一並給出鏈接。

一、RLS原理介紹

  A-問題描述

考慮指數加權的優化問題:

$0 < \lambda  \le 1$為遺忘因子,這里只討論平穩情況,取$\lambda = 1$。

從而得到最優解:

其中:

可以看到,$\lambda = 1$對應的就是最小二乘思想。回頭看看之前分析的LMS以及NLMS,用的是隨機梯度下降的思想,這是RLS與LMS很明顯的不同點。

由於$x(i)$、$y(i)$時刻在變換,最優解如何更新呢?

  B-迭代更新

首先給出文中用到的矩陣求逆引理:

矩陣求逆引理

定義逆矩陣:

利用矩陣求逆引理:

其中$k(n)$稱為增益向量,由上式得出:

借助迭代:

可以得到權重的更新公式:

其中為估計誤差:

至此實現RLS的整個步驟。

 

二、RLS應用實例

  A-算法步驟

結合上文的推導,給出RLS的迭代步驟:

步驟一:初始化

其中$\delta $為很小的正數,如1e-7;

步驟二:迭代更新

  B-代碼應用

給出主要代碼,可以結合前文的LMS/NLMS對比分析:

function [e,w]=rls(lambda,M,u,d,delta)
% recursive least squares,rls.
% Call:
% [e,w]=rls(lambda,M,u,d,delta)
%
% Input arguments:
% lambda = constant, (0,1]
% M = filter length, dim 1x1
% u = input signal, dim Nx1
% d = desired signal, dim Nx1
% delta = constant for initializaton, suggest 1e-7.
%
% Output arguments:
% e = estimation error, dim Nx1
% w = final filter coefficients, dim Mx1
% Step1:initialize
% 2017-4-4 14:34:33, Author: Gui
w=zeros(M,1);
P=eye(M)/delta;
u=u(:);
d=d(:);
% input signal length
N=length(u);
% error vector
e=d.';
% Step2: Loop, RLS
for n=M:N
    uvec=u(n:-1:n-M+1);
    e(n)=d(n)-w'*uvec;
    k=lambda^(-1)*P*uvec/(1+lambda^(-1)*uvec'*P*uvec);
    P=lambda^(-1)*P-lambda^(-1)*k*uvec'*P;
    w=w+k*conj(e(n));
end

給出應用:

[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=.1*randn(1,length(s));
mixed = clean+ref_noise;
mu=0.05;M=2;espon=1e-4;
% [en,wn,yn]=lmsFunc(mu,M,ref_noise,mixed);
% [en,wn,yn]=nlmsFunc(mu,M,ref_noise,mixed,espon);
delta = 1e-7;
lambda = 1;
[en,w]=rls(lambda,M,ref_noise,mixed,delta);

  對應結果圖:

可以看出不像NLMS/LMS有一個慢速收斂的過程,RLS在開始階段就得到較好的降噪。

  C-與LMS對比

與LMS對比,可以觀察到RLS的幾點特性:

  • 平穩環境λ=1,其實是最小二乘的思想;LMS/NLMS是隨機梯度下降思想;
  • 最小二乘是直接得出結果,隨機梯度下降收斂慢,因此RLS比LMS/NLMS收斂快一個數量級;

 

參考:

  • Simon Haykin 《Adaptive Filter Theory Fourth Edition》.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM