作者:桂。
時間: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》.


