递归最小二乘(Recursive Least Squares, RLS)算法是一种自适应滤波算法,用于在线估计动态系统的参数。它是一种最小化误差平方和的算法,并且可以递归地更新估计值,而不需要存储历史数据。
1 系统模型
假设系统模型为线性回归模型:
z
(
k
)
=
φ
(
k
)
T
θ
+
v
(
k
)
z(k) = \varphi(k)^T \theta + v(k)
z(k)=φ(k)Tθ+v(k)
其中:
- z ( k ) z(k) z(k) 是时刻 k k k 的输出。
- φ ( k ) \varphi(k) φ(k) 是时刻 k k k 的输入向量。
- θ \theta θ 是参数向量。
- v ( k ) v(k) v(k) 是噪声项,假设为高斯白噪声。
2 目标函数
递归最小二乘算法的目标是最小化预测误差的加权平方和:
J
(
θ
)
=
∑
i
=
1
k
λ
k
−
i
[
z
(
i
)
−
φ
(
i
)
T
θ
]
2
J(\theta) = \sum_{i=1}^k \lambda^{k-i} [z(i) - \varphi(i)^T \theta]^2
J(θ)=i=1∑kλk−i[z(i)−φ(i)Tθ]2
其中:
- λ \lambda λ 是遗忘因子,通常在 0 到 1 之间,用于控制历史数据的权重。
3 递归更新
为了递归更新参数估计 θ ^ ( k ) \hat{\theta}(k) θ^(k) 和误差协方差 P ( k ) P(k) P(k),我们首先对目标函数 J ( θ ) J(\theta) J(θ) 进行最优化。
3.1 参数更新
我们首先对代价函数 J ( θ ) J(\theta) J(θ) 关于参数向量 θ \theta θ 进行求导,并令导数为零,以找到最小化代价函数的参数估计。
对
J
(
θ
)
J(\theta)
J(θ) 关于
θ
\theta
θ 的导数为:
∂
J
(
θ
)
∂
θ
=
−
2
∑
i
=
1
k
λ
k
−
i
φ
(
i
)
[
z
(
i
)
−
φ
(
i
)
T
θ
]
\frac{\partial J(\theta)}{\partial \theta} = -2 \sum_{i=1}^k \lambda^{k-i} \varphi(i) [z(i) - \varphi(i)^T \theta]
∂θ∂J(θ)=−2i=1∑kλk−iφ(i)[z(i)−φ(i)Tθ]
令导数为零,得到:
∑
i
=
1
k
λ
k
−
i
φ
(
i
)
[
z
(
i
)
−
φ
(
i
)
T
θ
]
=
0
\sum_{i=1}^k \lambda^{k-i} \varphi(i) [z(i) - \varphi(i)^T \theta] = 0
i=1∑kλk−iφ(i)[z(i)−φ(i)Tθ]=0
将上式重新组织,得到:
∑
i
=
1
k
λ
k
−
i
φ
(
i
)
z
(
i
)
=
∑
i
=
1
k
λ
k
−
i
φ
(
i
)
φ
(
i
)
T
θ
\sum_{i=1}^k \lambda^{k-i} \varphi(i) z(i) = \sum_{i=1}^k \lambda^{k-i} \varphi(i) \varphi(i)^T \theta
i=1∑kλk−iφ(i)z(i)=i=1∑kλk−iφ(i)φ(i)Tθ
解得
θ
\theta
θ 为:
θ
(
k
)
=
(
∑
i
=
1
k
λ
k
−
i
φ
(
i
)
φ
(
i
)
T
)
−
1
∑
i
=
1
k
λ
k
−
i
φ
(
i
)
z
(
i
)
\theta(k) = \left( \sum_{i=1}^k \lambda^{k-i} \varphi(i) \varphi(i)^T \right)^{-1} \sum_{i=1}^k \lambda^{k-i} \varphi(i) z(i)
θ(k)=(i=1∑kλk−iφ(i)φ(i)T)−1i=1∑kλk−iφ(i)z(i)
3.2 递归形式
为了简化计算,我们引入
P
(
k
)
P(k)
P(k) 作为
θ
(
k
)
\theta(k)
θ(k) 的估计误差协方差矩阵的逆。那么,我们有:
P
(
k
)
=
(
∑
i
=
1
k
λ
k
−
i
φ
(
i
)
φ
(
i
)
T
)
−
1
P(k) = \left( \sum_{i=1}^k \lambda^{k-i} \varphi(i) \varphi(i)^T \right)^{-1}
P(k)=(i=1∑kλk−iφ(i)φ(i)T)−1
参数更新可以表示为:
θ
^
(
k
)
=
θ
^
(
k
−
1
)
+
P
(
k
)
φ
(
k
)
[
z
(
k
)
−
φ
(
k
)
T
θ
^
(
k
−
1
)
]
\hat{\theta}(k) = \hat{\theta}(k-1) + P(k) \varphi(k) [z(k) - \varphi(k)^T \hat{\theta}(k-1)]
θ^(k)=θ^(k−1)+P(k)φ(k)[z(k)−φ(k)Tθ^(k−1)]
3.3 误差协方差更新
误差协方差的更新公式可以表示为:
P
(
k
)
=
1
λ
(
k
)
[
P
(
k
−
1
)
−
P
(
k
−
1
)
φ
(
k
)
φ
(
k
)
T
P
(
k
−
1
)
λ
(
k
)
]
P(k) = \frac{1}{\lambda(k)} \left[ P(k-1) - P(k-1) \varphi(k) \varphi(k)^T P(k-1) \lambda(k) \right]
P(k)=λ(k)1[P(k−1)−P(k−1)φ(k)φ(k)TP(k−1)λ(k)]
为了简化,我们定义增益向量
y
(
k
)
y(k)
y(k) 为:
y
(
k
)
=
P
(
k
−
1
)
φ
(
k
)
[
φ
(
k
)
T
P
(
k
−
1
)
φ
(
k
)
+
λ
(
k
)
]
−
1
y(k) = P(k-1) \varphi(k) \left[ \varphi(k)^T P(k-1) \varphi(k) + \lambda(k) \right]^{-1}
y(k)=P(k−1)φ(k)[φ(k)TP(k−1)φ(k)+λ(k)]−1
那么,误差协方差的更新公式可以简化为:
P
(
k
)
=
1
λ
(
k
)
[
I
−
y
(
k
)
φ
(
k
)
]
P
(
k
−
1
)
P(k) = \frac{1}{\lambda(k)} \left[ I - y(k) \varphi(k) \right] P(k-1)
P(k)=λ(k)1[I−y(k)φ(k)]P(k−1)
- θ ^ ( k ) \hat{\theta}(k) θ^(k) 是时刻 k k k 的参数估计。
- P ( k ) P(k) P(k) 是时刻 k k k 的误差协方差矩阵的逆。
- y ( k ) y(k) y(k) 是增益向量,用于调整输入向量 $ \varphi(k) $ 对参数估计的影响。
这些递归公式允许算法在每个时间步更新参数估计,而不需要存储整个历史数据,从而实现高效的在线参数估计。
4 总结
RLS 最重要的:
θ
^
(
k
)
=
θ
^
(
k
−
1
)
+
y
(
k
)
[
z
(
k
)
−
φ
(
k
)
T
θ
^
(
k
−
1
)
]
\hat{\theta}(k) = \hat{\theta}(k-1) + y(k) [z(k) - \varphi(k)^T \hat{\theta}(k-1)]
θ^(k)=θ^(k−1)+y(k)[z(k)−φ(k)Tθ^(k−1)]
y
(
k
)
=
P
(
k
−
1
)
φ
(
k
)
[
φ
(
k
)
T
P
(
k
−
1
)
φ
(
k
)
+
λ
−
1
]
−
1
y(k) = P(k-1) \varphi(k) \left[ \varphi(k)^T P(k-1) \varphi(k) + \lambda^{-1} \right]^{-1}
y(k)=P(k−1)φ(k)[φ(k)TP(k−1)φ(k)+λ−1]−1
P
(
k
)
=
[
P
(
k
−
1
)
−
1
+
λ
−
1
φ
(
k
)
φ
(
k
)
T
]
−
1
P(k) = \left[ P(k-1)^{-1} + \lambda^{-1} \varphi(k) \varphi(k)^T \right]^{-1}
P(k)=[P(k−1)−1+λ−1φ(k)φ(k)T]−1
这些递归公式允许算法在每个时间步更新参数估计,而不需要存储整个历史数据,从而实现高效的在线参数估计。