本文首發在我的個人博客:宅到沒朋友,歡迎大家來玩!
1.最小二乘算法簡介
最小二乘算法基於確定性思想,該算法討論怎樣根據有限個觀測數據來尋找濾波器的最優解,即求如下圖這樣具有M個抽頭的橫向濾波器的最優權向量。
最小二乘算法的目的就是通過最小化誤差向量e的模的平方和,即最小化J=∥e∥2,來求解得到最優權向量:
w=[w0w1⋯wM−1]
由於:
e=[e(M)e(M+1)⋯e(N)]H=b−b^=b−Aw
其中:
- 濾波器階數:M
- 樣本點數:N
- 誤差向量:e=[e(M)e(M+1)⋯e(N)]
- 期望向量:b=[d(M)d(M+1)⋯d(N)]
- 數據矩陣:AH=[u(M)u(M+1)⋯u(N)]=⎣⎢⎢⎢⎡u(M)u(M−1)⋮u(1)u(M+1)u(M)⋮u(2)⋯⋯⋱⋯u(N)u(N−1)⋮u(N−M+1)⎦⎥⎥⎥⎤
由此可以得到:
J=∥e∥2=eHe=(b−Aw)H(b−Aw)
化簡得:
J=bHb−bHAw−wHAHb+wHAHAw
要求J的最小值,首先要得到J關於w的梯度:
▽J=−2AHb+2AHAw
再令▽J=0得:
AHAw^=AHb(1)
上式被稱爲確定性正則方程。
當M<N−M+1時,若方陣AHA是非奇異(可逆)的,則可以得到確定性正則方程的解:
w^=(AHA)−1AHb(2)
上式也被稱爲最小二乘(LS)解。
估計向量b^=Aw被稱爲對期望響應向量b的最小二乘估計,簡稱LS估計。
2.遞歸最小二乘(RLS)算法
在(2)式中,涉及矩陣AHA的求逆運算,運算量較大,遞歸最小二乘(RLS)算法就是用迭代算法代替矩陣求逆達到降低運算量的目的。
將數據矩陣AH做如下擴展:
AH=⎣⎢⎢⎢⎡u(1)0⋮0u(2)u(1)⋮0⋯⋯⋱⋯u(M)u(M−1)⋮u(1)⋯⋯⋱⋯u(N)u(N−1)⋮u(N−M+1)⎦⎥⎥⎥⎤
將期望向量b做如下擴展:
b=[d(1)d(2)⋯d(M)⋯d(N)]
定義輸入數據數據的時間相關矩陣:
Φ(N)=AHA=i=1∑Nu(i)uH(i)
定義時間互相關向量爲
z(N)=AHb=i=1∑Nu(i)d∗(i)
於是,如式(1)所示的確定性正則方程變成下式:
Φ(N)w^=z(N)(3)
(3)式就是N時刻的確定性正則方程。
將N時刻變爲任意時刻n,並引入遺忘因子λ(0<λ≤1),則Φ、z和(3)式變成如下所示:
Φ(n)=i=1∑nλn−iu(i)uH(i)+δλnI
z(n)=i=1∑nλn−iu(i)d∗(i)
Φ(n)w^=z(n)
注:Φ(n)中引入δλnI是爲了使Φ(n)可逆。
令P(n)=Φ−1(n),接下來需要的事情就是求出w^的迭代公式,推導過程較爲繁瑣,在此不再展開,直接給出最後的迭代公式。
w^(n)=w^(n−1)+k(n)ξ∗(n)
其中:
k(n)=1+λ−1uH(n)P(n−1)u(n)λ−1P(n−1)u(n)
ξ(n)=d(n)−w^(n−1)u(n)
P(n)=λ−1P(n−1)−λ−1k(n)uH(n)P(n−1)
可以看到w^(n)迭代式中的變量P(n)、k(n))、ξ(n)都是可以迭代求解的。
2.1 (RLS)算法步驟
1. 初始化:
P(0)=δI,δ是小正數
w^(0)=0
λ取接近於1
2. n=1,2,⋯,N時,做如下迭代運算:
k(n)=1+λ−1uH(n)P(n−1)u(n)λ−1P(n−1)u(n)
ξ(n)=d(n)−w^(n−1)u(n)
w^(n)=w^(n−1)+k(n)ξ∗(n)
P(n)=λ−1P(n−1)−λ−1k(n)uH(n)P(n−1)
3. 令n=n+1,重複步驟2。
2.2 算例
考慮一階AR模型u(n)=−0.99u(n−1)+v(n)的線性預測。假設白噪聲v(n)的方差爲σv2=0.995,使用抽頭數爲M=2的FIR濾波器,用RLS算法實現u(n)的線性預測,選擇遺忘因子λ=0.98。
2.3 Matlab仿真結果
可以看到RLS算法收斂的速度很快,收斂特性相當好。
2.4 Matlab源碼下載
點此下載源碼!
歡迎搜索並關注微信公衆號“工科南”。