联邦卡尔曼滤波

联邦Kalman滤波

利用Kalman滤波技术对多传感器数据进行最优融合有两种途径:集中式Kalman滤波和分散化滤波。集中式Kalman滤波利用一个滤波器来集中处理所有子系统的信息。分散化滤波利用子滤波器处理子系统的信息通过全局滤波器实现所有子系统的信息融合。

联邦滤波器一般结构

在这里插入图片描述

各子滤波器的估计不相关时的融合算法

定理1:若有 N N N个局部状态估计 X 1 ^ \hat{X_1} X1^, X 2 ^ \hat{X_2} X2^, . . . ... ..., X N ^ \hat{X_N} XN^和相应的估计误差协方差阵 P 11 P_{11} P11, P 22 P_{22} P22, . . . ... ..., P N N P_{NN} PNN,且各局估计互不相关,即 P i j = 0 ( i ≠ j ) P_{ij}=0(i\neq j) Pij=0(i=j),则全局最优估计可表示为:
X g ^ = P g ∑ i = 1 N P i i − 1 X i ^ \hat{X_g}=P_{g} \sum_{i=1}^{N}P_{ii}^{-1} \hat{X_i} Xg^=Pgi=1NPii1Xi^
其中
P g = ( ∑ i = 1 N P i i − 1 ) − 1 P_g=(\sum_{i=1}^{N}P_{ii}^{-1})^{-1} Pg=(i=1NPii1)1
P i i − 1 X i ^ P_{ii}^{-1} \hat{X_i} Pii1Xi^知,当 X i ^ \hat{X_i} Xi^的估计精度差,即 P i i P_{ii} Pii大时, X i ^ \hat{X_i} Xi^在全局估计的作用比较小。

各子滤波器估计相关条件下的联邦滤波算法

在一般情况下,各子滤波器是估计是相关的。为了解决这个问题,采用方差上界技术,对滤波过程进行适当的改造,使得局部估计实际上不相关,从而进行滤波。

假设各子滤波器的状态估计表示为:
X i ^ = [ X a i ^ X b i ^ ] \hat{X_i}=\begin{bmatrix}\hat{X_{ai}}\\\hat{X_{bi}}\end{bmatrix} Xi^=[Xai^Xbi^]
其中, X a i ^ \hat{X_{ai}} Xai^是各子滤波器的公共状态 X c X_c Xc的估计,如导航中的位置,速度,和姿态等误差状态的估计; X b i ^ \hat{X_{bi}} Xbi^是第 i i i个滤波器专有的状态估计,如GPS误差状态的估计。这里只对公共状态估计进行融合以得到其全局估计。

信息分配原则

系统中有两类信息

  • 状态运动方程信息

    状态方程的信息量是与系统噪声的方差成反比的,因此可用 Q − 1 Q^{-1} Q1表示状态状态方程信息量;

  • 量测方程信息

    量测方程的信息可用量测噪声协方差的逆 R − 1 R^{-1} R1表示。

将系统噪声总的信息 Q − 1 Q^{-1} Q1分配到各个子滤波器和主滤波中:
Q − 1 = ∑ i = 1 N Q i − 1 + Q m − 1 Q^{-1}=\sum_{i=1}^{N}Q_i^{-1}+Q_m^{-1} Q1=i=1NQi1+Qm1
其中 Q i = β i − 1 Q Q_i=\beta_i^{-1}Q Qi=βi1Q, Q m = β m − 1 Q Q_m=\beta_m^{-1}Q Qm=βm1Q

由信息守恒原理可知:
∑ i = 1 N β i + β m = 1 \sum_{i=1}^N\beta_i+\beta_m=1 i=1Nβi+βm=1
由子滤波器与主滤波器合成的全局估计值 X g ^ \hat{X_g} Xg^及其相应的估计误差方差阵 P g P_g Pg β i − 1 P g \beta_i^{-1}P_g βi1Pg后再反馈到子滤波器,重置子滤波器的估计值。
X i ^ = X g ^ \hat{X_i}=\hat{X_g} Xi^=Xg^

P i i = β i − 1 P g P_{ii}=\beta_i^{-1}P_g Pii=βi1Pg

其中 β i − 1 \beta_i^{-1} βi1表示信息分配系数。

为了使 P i j ( i ≠ j ) P_{ij}(i\neq j) Pij(i=j)恒等于零,则需要对滤波过程进行改造。先构造一个增广系统,它的状态向量由 N N N个局部滤波子系统和主滤波子系统的状态组合而成:
X = [ X 1 ⋮ X N ˉ ] X=\begin{bmatrix}X_1\\\vdots\\ X_{\bar{N}}\end{bmatrix} X=X1XNˉ
式中: N ˉ = N + 1 \bar{N}=N+1 Nˉ=N+1

每个子系统的状态向量为:
X i = [ X c X b i ] X_i=\begin{bmatrix}X_c\\X_{bi}\end{bmatrix} Xi=[XcXbi]
其中, X c X_c Xc是公共状态向量; X b i X_{bi} Xbi是第 i i i个子系统的专有状态。

在这个增广系统的状态向量中含有公共状态,但是不影响理论分析。增广系统的状态方程为
[ X 1 ⋮ X N ˉ ] k + 1 = [ ϕ 11 ⋱ ϕ N ˉ N ˉ ] k [ X 1 ⋮ X N ˉ ] k + [ G 1 ⋮ G N ˉ ] W k {\begin{bmatrix}X_1\\\vdots\\ X_{\bar{N}}\end{bmatrix}}_{k+1}=\begin{bmatrix}{\phi_{11}}&&\\&{{\ddots}}&\\&&{\phi_{\bar{N}{\bar{N}}}}\end{bmatrix}_k{\begin{bmatrix}X_1\\\vdots\\ X_{\bar{N}}\end{bmatrix}}_{k}+{\begin{bmatrix}G_1\\\vdots\\ G_{\bar{N}}\end{bmatrix}}W_k X1XNˉk+1=ϕ11ϕNˉNˉkX1XNˉk+G1GNˉWk

E [ W i W i T ] = Q E{\begin{bmatrix}W_iW_i^T\end{bmatrix}}=Q E[WiWiT]=Q

增广系统总体滤波误差方差阵一般可表示为
P = [ P 11 ⋯ P 1 N ˉ ⋮ ⋮ P N ˉ 1 ⋯ P N ˉ N ˉ ] P={\begin{bmatrix}P_{11}&\cdots&P_{1\bar{N}}\\\vdots&&\vdots\\P_{\bar{N}1}&\cdots&P_{\bar{N}\bar{N}}\end{bmatrix}} P=P11PNˉ1P1NˉPNˉNˉ
式中: P j i ( j , i = 1 , 2 , ⋯   , N ˉ ) P_{ji}(j,i=1,2,\cdots,\bar{N}) Pji(j,i=1,2,,Nˉ)表示局部滤波之间的相关性。

考虑到集中滤波的时间更新,由状态方程可知
P j i = ϕ j j P j i ∗ ϕ i i T + G j Q G i T P_{ji}=\phi_{jj}P_{ji}^*\phi_{ii}^T+G_jQG_i^T Pji=ϕjjPjiϕiiT+GjQGiT
由上式知,由于公共噪声 Q Q Q的存在,即使 P j i ∗ = 0 P_{ji}^*=0 Pji=0 P j i P_{ji} Pji也不会等于0,即时间更新过程将引入各子滤波器的估计相关。因此需要利用方差上届技术来进行消除。将过程噪声改写为
[ G 1 ⋮ G N ˉ ] Q [ G 1 T ⋯ G N ˉ T ] = [ G 1 ⋱ G N ˉ ] [ Q ⋯ Q ⋮ ⋮ Q ⋯ Q ] [ G 1 T ⋱ G N ˉ T ] \begin{bmatrix}G_1\\\vdots\\G_{\bar{N}}\end{bmatrix}Q\begin{bmatrix}G_1^T&\cdots&G_{\bar{N}}^T\end{bmatrix}=\begin{bmatrix}G_1&&\\&\ddots&\\&&G_{\bar{N}}\end{bmatrix}\begin{bmatrix}Q&\cdots&Q\\\vdots&&\vdots\\Q&\cdots&Q\end{bmatrix}\begin{bmatrix}G_1^T&&\\&\ddots&\\&&G_{\bar{N}}^T\end{bmatrix} G1GNˉQ[G1TGNˉT]=G1GNˉQQQQG1TGNˉT
由矩阵理论可知:
[ Q ⋯ Q ⋮ ⋮ Q ⋯ Q ] ≤ [ γ 1 Q ⋯ 0 ⋮ ⋮ 0 ⋯ γ N ˉ Q ] \begin{bmatrix}Q&\cdots&Q\\\vdots&&\vdots\\Q&\cdots&Q\end{bmatrix}\leq\begin{bmatrix}\gamma_1Q&\cdots&0\\\vdots&&\vdots\\0&\cdots&\gamma_{\bar{N}}Q\end{bmatrix} QQQQγ1Q00γNˉQ

1 γ 1 + ⋯ + 1 γ N ˉ = 1 , 0 ≤ 1 γ i ≤ 1 \frac{1}{\gamma_1}+\cdots+\frac{1}{\gamma_{\bar{N}}}=1,0\leq\frac{1}{\gamma_i}\leq1 γ11++γNˉ1=1,0γi11

由此可见,选择等号放大估计误差方差矩阵,
P i i = ϕ i i P i i ∗ ϕ i i T + γ i G i Q G i T P_{ii}=\phi_{ii}P_{ii}^*\phi_{ii}^T+\gamma_iG_iQG_i^T Pii=ϕiiPiiϕiiT+γiGiQGiT

P j i = ϕ j j P j i ∗ ϕ i i T = 0 , P j i ∗ = 0 P_{ji}=\phi_{jj}P_{ji}^*\phi_{ii}^T=0,P_{ji}^*=0 Pji=ϕjjPjiϕiiT=0,Pji=0

通过式中表明,只要将各子滤波器的自身的初始方差矩阵在放大些就可以忽略各子滤波器初始方差之间的相关项。这样得到的局部滤波结果也是保守的。

联邦滤波器的设计步骤
  1. 将子滤波器和主滤波器的初始估计误差方差矩阵设置为组合系统初始估计误差方差的 γ i ( i = 1 , 2 , ⋯   , N ) \gamma_i(i=1,2,\cdots,N) γi(i=1,2,,N)倍。
  2. 将子滤波器和主滤波器的过程噪声方差矩阵设置为组合系统过程噪声方差矩阵的 γ i \gamma_i γi倍。
  3. 各子滤波器处理自己的观测信息,进而获得局部估计。
  4. 在得到各子滤波器的局部估计和主滤波器的估计后,按定理1进行最优合成。
  5. 用全局最优滤波解来重置各子滤波器和主滤波器的滤波值和估计误差方差矩阵。
联邦滤波器的结构

根据信息分配策略不同,联邦滤波算法有4种实现模式:零复位模式;变比例模式;无反馈模式;融合—反馈模式。

  1. 零复位模式( β m = 1 , β i = 0 \beta_m=1,\beta_i=0 βm=1,βi=0零化式重置)

在这里插入图片描述

优缺点:

  • 主滤波器分配到全部信息;
  • 故障检测和隔离能力强;
  • 减少了数据通讯量,计算简单,解算精度不高。
  1. 变比例模式( β m = β i = 1 / ( N + 1 ) \beta_m=\beta_i=1/(N+1) βm=βi=1/(N+1)有重置)

在这里插入图片描述

优缺点:

  • 主滤波器与子滤波器之间平均分配信息;
  • 融合后全局滤波精度高,局部滤波因为有全局滤波反馈,精度也提高了;
  • 一个子系统发生故障后,主滤波器受污染,隔离后必须重新初始化主滤波器。
  1. 无反馈模式( β m = 0 , β i = 1 / N \beta_m=0,\beta_i=1/N βm=0,βi=1/N无重置)

在这里插入图片描述

  • 主滤波器状态方程无信息分配,主滤波器不需要进行滤波,只起简单的融合作用;
  • 各局部滤波器独立滤波,没有反馈重置带来的相互影响提高了容错性能;
  • 由于没有全局估计的反馈重置,局部估计精度不高。
  1. 融合—反馈模式( β m = 0 , β i = 1 / N \beta_m=0,\beta_i=1/N βm=0,βi=1/N有重置)

在这里插入图片描述

优缺点:

  • 具有反馈作用,精度较高;
  • 滤波器的故障检测与隔离能力差。
  • 19
    点赞
  • 111
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
联邦卡尔曼滤波(Federated Kalman Filter)是一种将多个卡尔曼滤波器联合起来进行状态估计的方法。它可以用于分布式系统中,其中每个子系统都有自己的传感器和测量数据,但需要共享信息以获得更准确的状态估计结果。 在Matlab中,可以使用以下步骤实现联邦卡尔曼滤波: 1. 定义每个子系统的状态转移矩阵A、观测矩阵C、过程噪声协方差矩阵Q和测量噪声协方差矩阵R。 2. 初始化每个子系统的状态估计向量x和协方差矩阵P。 3. 对于每个子系统,根据其自身的测量数据更新状态估计向量和协方差矩阵,可以使用卡尔曼滤波的预测和更新步骤。 4. 将每个子系统的状态估计向量和协方差矩阵发送给联邦卡尔曼滤波器。 5. 在联邦卡尔曼滤波器中,根据每个子系统的状态估计向量和协方差矩阵,使用加权平均或其他方法来融合各个子系统的状态估计结果。 6. 根据联合状态估计结果,可以进行进一步的控制或决策。 以下是一个简单的Matlab示例,演示了如何实现联邦卡尔曼滤波: ```matlab % 定义子系统1的状态转移矩阵A1、观测矩阵C1、过程噪声协方差矩阵Q1和测量噪声协方差矩阵R1 A1 = [1 1; 0 1]; C1 = [1 0]; Q1 = [0.1 0; 0 0.1]; R1 = 1; % 定义子系统2的状态转移矩阵A2、观测矩阵C2、过程噪声协方差矩阵Q2和测量噪声协方差矩阵R2 A2 = [1 1; 0 1]; C2 = [1 0]; Q2 = [0.2 0; 0 0.2]; R2 = 1; % 初始化子系统1的状态估计向量x1和协方差矩阵P1 x1 = [0; 0]; P1 = [1 0; 0 1]; % 初始化子系统2的状态估计向量x2和协方差矩阵P2 x2 = [0; 0]; P2 = [1 0; 0 1]; % 生成子系统1的测量数据 z1 = C1 * x1 + sqrt(R1) * randn; % 生成子系统2的测量数据 z2 = C2 * x2 + sqrt(R2) * randn; % 子系统1的卡尔曼滤波预测步骤 x1_pred = A1 * x1; P1_pred = A1 * P1 * A1' + Q1; % 子系统1的卡尔曼滤波更新步骤 K1 = P1_pred * C1' / (C1 * P1_pred * C1' + R1); x1 = x1_pred + K1 * (z1 - C1 * x1_pred); P1 = (eye(2) - K1 * C1) * P1_pred; % 子系统2的卡尔曼滤波预测步骤 x2_pred = A2 * x2; P2_pred = A2 * P2 * A2' + Q2; % 子系统2的卡尔曼滤波更新步骤 K2 = P2_pred * C2' / (C2 * P2_pred * C2' + R2); x2 = x2_pred + K2 * (z2 - C2 * x2_pred); P2 = (eye(2) - K2 * C2) * P2_pred; % 联邦卡尔曼滤波器的状态估计融合 x_fusion = (P1 \ x1 + P2 \ x2) / (P1 \ eye(2) + P2 \ eye(2)); P_fusion = inv(inv(P1) + inv(P2)); % 输出联邦卡尔曼滤波器的状态估计结果 disp('Fusion State Estimate:'); disp(x_fusion); % 输出联邦卡尔曼滤波器的协方差矩阵 disp('Fusion Covariance Matrix:'); disp(P_fusion); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值