站在哪个肩膀上开始学习卡尔曼滤波

站在哪个肩膀上开始学习卡尔曼滤波

  • 前言
  • 从自适应滤波的角度
    • 正交性原理到维纳解
    • kalman滤波的提出
    • innovation process新息过程
    • kalman滤波算法
    • Kalman 自适应滤波器算法
      • 初始条件
      • 输入观测向量过程
      • 已知参数
      • 计算:n=1,2,3,..
  • 参考

前言

不知道是不是每个想入局卡尔曼的同学都面临同样的问题,敲笔记之前浏览了一遍参考的东西,各种角度给出了非常生动的介绍,手里还有一本清华大学张贤达老师《现代信号处理》也从自适应滤波器的角度对卡尔曼滤波器的推导。虽然大模型也能给出示例程序,运行结果也能感受的到算法的魅力,但肉眼凡胎还是要亲自学习理解一下,那就学院派先来,笔记一下张老师的推导思路。

从自适应滤波的角度

自适应滤波器发展的历史中,匹配滤波器和维纳滤波器是绕不开的两座丰碑,匹配滤波器是输出达到最大的信噪比,一个经典的应用就是通信系统自带training sequence或pilot信号的解调。wiener滤波器采用最小均方估计误差的准则,不需要提供先验的同步信号,应用就更加广泛了。这个经典的推导再很多年前的webrtc中的噪声抑制之一:频域维纳滤波 敲过键盘。这里有很多关于极点的扩展分析,暂时涉及不到,就不深挖这个坑了。而数字信号处理中,估计误差e(n)e(n)e(n)定义为期望响应d(n)d(n)d(n)与滤波器输出y(n)y(n)y(n)之差,即y(n)=∑k=0∞wk∗u(n−k),n=1,2,...y(n)=\sum_{k=0}^\infty w^*_ku(n-k), \ \ n=1,2,...y(n)=k=0wku(nk),  n=1,2,...e(n)=d(n)−y(n)e(n)=d(n)-y(n)e(n)=d(n)y(n)这种估计误差在某种统计意义下最小的设计就被称为最优滤波器,优化准则即令某个代价函数最小化,在ai时代的熵函数盛行之前,最小均方误差应该是最核心的存在,这就是大名鼎鼎的:MMSE(Minimum Mean Square Error),简而言之:设计线性离散时间滤波器的系数wkw_kwk,使输出y(n)y(n)y(n)在给定的输入样本集合u(0),u(1),...u(0), u(1),...u(0),u(1),...的情况下给出期望响应d(n)d(n)d(n)的估计,并使得e(n)=d(n)−y(n)e(n)=d(n)-y(n)e(n)=d(n)y(n)的均方误差E∣e(n)∣2E{|e(n)|^2}Ee(n)2为最小。

正交性原理到维纳解

从数学上课文还推导了正交性原理,并讲述其从数学上作为线性最有滤波理论中令代价函数JJJ最小化的充分必要条件之关系。直接写出定理和引理E{u(n−k)eopt∗(n)}=0,k=0,1,2E\{u(n-k)e^*_{opt}(n)\}=0, \ \ \ k=0,1,2E{u(nk)eopt(n)}=0,   k=0,1,2E{yopt(n)eopt∗(n)}=0E\{y_{opt}(n)e^*_{opt}(n)\}=0E{yopt(n)eopt(n)}=0根据前面的推导,可以将定理展开E{u(n−k)[d∗(n)−∑i=0∞wopt,ku∗(n−i)]}=0,k=0,1,2...E\{u(n-k) [ d^*(n)-\sum_{i=0}^\infty w_{opt,k} u^*(n-i)]\}=0, \ \ \ k=0,1,2...E{u(nk)[d(n)i=0wopt,ku(ni)]}=0,   k=0,1,2...∑i=0∞wopt,kE{u(n−k)u∗(n−i)}=E{u(n−k)d∗(n)},k=0,1,2...\sum_{i=0}^\infty w_{opt,k} E\{u(n-k) u^*(n-i)\}=E\{u(n-k) d^*(n)\}, \ \ \ k=0,1,2...i=0wopt,kE{u(nk)u(ni)}=E{u(nk)d(n)},   k=0,1,2...式中,数学期望项E{u(n−k)u∗(n−i)}E\{u(n-k) u^*(n-i)\}E{u(nk)u(ni)}代表v滤波器输入在之后i−ki-kik的自相关函数Ru,u(i−k)R_{u,u}(i-k)Ru,u(ik),即Ru,u(i−k)=E{u(n−k)u∗(n−i)}R_{u,u}(i-k)=E\{u(n-k) u^*(n-i)\}Ru,u(ik)=E{u(nk)u(ni)}而数学期望项E{u(n−k)d∗(n)}E\{u(n-k) d^*(n)\}E{u(nk)d(n)}等于v滤波器输入u(n−k)u(n-k)u(nk)与数学期望d(n)d(n)d(n)在滞后−k-kk的互相关函数Ru,d(−k)R_{u,d}(-k)Ru,d(k) Ru,d(−k)=E{u(n−k)d∗(n)}R_{u,d}(-k)=E\{u(n-k) d^*(n)\}Ru,d(k)=E{u(nk)d(n)}由此得到一个更简洁的公式:∑i=0∞wopt,kRu,u(i−k)}=Ru,d(−k),k=0,1,2...\sum_{i=0}^\infty w_{opt,k} R_{u,u}(i-k)\}=R_{u,d}(-k), \ \ \ k=0,1,2...i=0wopt,kRu,u(ik)}=Ru,d(k),   k=0,1,2...这就是Wiener-Hopf 差分方程,对应M阶FIR滤波器,正无穷这个东西就变成了M-1,所有有限长FIR的M个齐次方程为∑i=0M−1wopt,kRu,u(i−k)}=Ru,d(−k),k=0,1,2...M−1\sum_{i=0}^{M-1} w_{opt,k} R_{u,u}(i-k)\}=R_{u,d}(-k), \ \ \ k=0,1,2...M-1i=0M1wopt,kRu,u(ik)}=Ru,d(k),   k=0,1,2...M1如果定义M个输入向量u(n)=[u(n),u(n−1),..u(n−M+1)]T\bold u(n)=[u(n),u(n-1),..u(n-M+1)]^Tu(n)=[u(n),u(n1),..u(nM+1)]T那么自相关矩阵为:R=E{u(n)uH(n)}=[Ru,u(0)Ru,u(1)Ru,u(M−1)Ru,u∗(1)Ru,u(0)Ru,u(M−2)⋱Ru,u∗(M−1)Ru,u∗(M−2)Ru,u(0)]R=E\{\bold u(n)\bold u^H(n)\} = \begin{bmatrix} R_{u,u}(0) &R_{u,u}(1) & & R_{u,u}(M-1) \\ R_{u,u}^*(1) &R_{u,u}(0)& & R_{u,u}(M-2) \\ & \ddots & \\ R_{u,u}*(M-1)&R_{u,u}^*(M-2)& &R_{u,u}(0) \end{bmatrix} R=E{u(n)uH(n)}=Ru,u(0)Ru,u(1)Ru,u(M1)Ru,u(1)Ru,u(0)Ru,u(M2)Ru,u(M1)Ru,u(M2)Ru,u(0)等式右侧则是输入与期望响应的互相关向量:r=E{u(n)d∗(n)}=[Ru,d(0),Ru,d(−1),...,Ru,d(−M+1)]Tr=E\{\bold u(n) d^*(n)\}=[R_{u,d}(0), R_{u,d}(-1),...,R_{u,d}(-M+1)]^Tr=E{u(n)d(n)}=[Ru,d(0),Ru,d(1),...,Ru,d(M+1)]T进一步简化成矩阵表达:Rwopt=rRw_{opt}=rRwopt=r等式两侧左乘以R−1R^{-1}R1,则得到维纳滤波器的最有权重解:wopt=R−1rw_{opt}=R^{-1}rwopt=R1r

kalman滤波的提出

kalman滤波是再wiener理论上发展的,“采用频域设计法是造成Wiener滤波器设计困难的根本原因。因此人们逐渐转向寻求在时域内直接设计最优滤波器的方法。Kalman在20世纪60年代初提出了Kalman滤波理论。Kalman滤波理论是一种时域方法。它把状态空间的概念引入随机估计理论,把信号过程视为白噪声作用下一个线性系统的输出,用状态方程来描述输入-输出关系,在估计过程中利用系统状态方程、观测方程和白噪声激励,即系统过程噪声和观测噪声,利用它们的统计特性形成滤波算法。由于所用的信息都是时域内的量,所以Kalman滤波不但可以对平稳的一维随机过程进行估计,也可以对非平稳的、多维随机过程进行估计。同时Kalman滤波算法是递推的,便于在计算机上实现实时应用,克服了经典Wiener滤波方法的缺点和局限性”。上面这段摘自《Kalman滤波算法详解及MATLAB实现》相对于wiener解本身的数学方法是非递推的(lms/rls等方法是等效实现),卡尔曼方法先天的递推计算,即自适应滤波器哦。这个推导过程与最小二乘法的自适应框架统一。
考虑一离散时间的动态系统,它由描述状态的过程方程和描述观测向量的观测方程共同表示。
(1)过程方程x(n+1)=F(n+1,n)x(n)+v1(n)\bold x(n+1)=\bold F(n+1,n)\bold x(n)+\bold v_1(n)x(n+1)=F(n+1,n)x(n)+v1(n) M∗1维向量M*1维向量M1维向量x(n)x(n)x(n)表示系统再离散时间nnn的状态向量,它是不可观测的;M∗MM*MMM矩阵F(n+1,n)\bold F(n+1,n)F(n+1,n)称为状态转移矩阵,描述动态系统在时间n的状态到n+1的状态之间的转移,它应该是已知的;而M∗1M*1M1向量v1(n)v_1(n)v1(n)的过程噪声向量,描述状态转移中间的加性噪声或误差。因为这样一个过程也可以看作是状态的变迁,所以此方程也称为状态转移方程。
(2)观测方程y(n)=C(n)x(n)+v2(n)y(n)=\bold C(n)\bold x(n)+\bold v_2(n)y(n)=C(n)x(n)+v2(n) y(n)y(n)y(n)代表动态系统在时间n的N∗1N*1N1观测向量;N∗MN*MNM矩阵C(n)称为观测矩阵(描述状态经过其作用,变成可观测数据),要求是已知的;v2v_2v2表示观测噪声向量,其维度与观测向量相同。
要简化计算,以下的假设是必须滴: v1(n)v_1(n)v1(n)过程噪声向量和v2v_2v2观测噪声向量都是零均值的白噪声,两者也是线性无关的。他们的相关矩阵分别为E{v1(n)v1H(k)}={Q1(n),if n=kO,if n≠kE\{v_1(n)v_1^H(k)\}=\begin{cases} Q_1(n), & \text{if }n=k \\ O, & \text{if }n\neq k \end{cases}E{v1(n)v1H(k)}={Q1(n),O,if n=kif n=kE{v2(n)v2H(k)}={Q2(n),if n=kO,if n≠kE\{v_2(n)v_2^H(k)\}=\begin{cases} Q_2(n), & \text{if }n=k \\ O, & \text{if }n\neq k \end{cases}E{v2(n)v2H(k)}={Q2(n),O,if n=kif n=kE{v1(n)v2H(k)}=O,∀n,kE\{v_1(n)v_2^H(k)\}=O, \space \forall n,kE{v1(n)v2H(k)}=O, n,k
利用观测的向量y(1),...,y(n)y(1),...,y(n)y(1),...,y(n)n≥1n\geq 1n1求状态向量x(i)\bold x(i)x(i)各个分量的最小二乘估计,那么具体的根据状态变量索引iii和观测向量索引nnn的关系,kalman问题又细分为三个类型:
(1)滤波(i=ni=ni=n):使用n时刻及以前时刻的测量数据,抽取n时刻的信息;
(2)平滑(1≤i<n1\leq i <n1i<n):因为n以前某个时刻的信息,而且n时刻以后的测量数据也可用,非因果的效果使得平滑更加精确;
(3)预测(i > n):使用n时刻及其以前时刻的测量数据,提前抽取n+τ,τ>0\tau,\space \tau >0τ, τ>0时刻(未来)的信息,这是一种预测。

innovation process新息过程

看到这个概念,我的第一反映这是什么WTF?为什么叫“新息”?在卡尔曼滤波中,新息过程就是这个预测值和实际观测值之间的差异。用数学符号表示就是:
新息=实际观测值−预测的观测值新息 = 实际观测值 - 预测的观测值 新息=实际观测值预测的观测值结合上面的符号,给定观测值y(1),...,y(n−1)y(1),...,y(n-1)y(1),...,y(n1),求观测向量y(n)y(n)y(n)的最小二乘估计,记作y^1(n)=defy^(n∣y(1),...,y(n−1))\hat y_1(n)\stackrel{\text{def}}{=}\hat y(n|y(1),...,y(n-1))y^1(n)=defy^(ny(1),...,y(n1))y(n)y(n)y(n)的新息过程定义为α(n)=y(n)−y^1(n)\alpha(n)=y(n)-\hat y_1(n)α(n)=y(n)y^1(n)N∗1N*1N1向量α(n)\alpha(n)α(n)表示观测数据y(n)y(n)y(n)的新的信息,简称新息。新息的性质:
(1)n时刻的新息α\alphaα与过去所有的观测数据y(1),...,y(n−1)y(1),...,y(n-1)y(1),...,y(n1)正交,即E{α(n)yH(k)}=O,1≤k<nE\{\alpha(n)y^H(k)\}=O,\space 1\leq k <nE{α(n)yH(k)}=O, 1k<n
(2)新息过程由彼此正交的随机向量序列{α(n)}\{\alpha(n)\}{α(n)}组成,E{α(n)αH(k)}=O,1≤k<nE\{\alpha(n)\alpha^H(k)\}=O,\space 1\leq k <nE{α(n)αH(k)}=O, 1k<n
(3)表示观测数据的随机向量序列{y(1),...,y(n)}\{y(1),...,y(n)\}{y(1),...,y(n)}与表示新息过程的随机向量序列{α(1),...,α(n)}\{\alpha(1),...,\alpha(n)\}{α(1),...,α(n)}一一对应,即{y(1),...,y(n)}={α(1),...,α(n)}\{y(1),...,y(n)\}=\{\alpha(1),...,\alpha(n)\}{y(1),...,y(n)}={α(1),...,α(n)}以上性质表明:n时刻的新息α(n)\alpha(n)α(n)是一个与n时刻之前的观测数据{y(1),...,y(n−1)}\{y(1),...,y(n-1)\}{y(1),...,y(n1)}不相关、具有白噪声性质的随机过程,但它却能够提供有关y(n)y(n)y(n)的新信息。新息的的相关矩阵R(n)=E{α(n)αH(k)}R(n)=E\{\alpha(n)\alpha^H(k)\}R(n)=E{α(n)αH(k)}在卡尔曼滤波中,并不直接估计观测数据向量的一步预测y^1(n)\hat y_1(n)y^1(n),而是先计算状态向量的一步预测:x^1(n)=defx(n∣y(1),...,y(n−1))\hat x_1(n)\stackrel{\text{def}}{=} x(n|y(1),...,y(n-1))x^1(n)=defx(ny(1),...,y(n1))然后利用观测方程y^1(n)=C(n)x^1(n)\hat y_1(n)=C(n)\hat x_1(n)y^1(n)=C(n)x^1(n)带入新息计算的公式α(n)=y(n)−C(n)x^1(n)=C(n)[x(n)−x^1(n)]+v2(n)\alpha(n)=y(n)-C(n)\hat x_1(n)=C(n)[x(n)-\hat x_1(n)]+v_2(n)α(n)=y(n)C(n)x^1(n)=C(n)[x(n)x^1(n)]+v2(n)此即新息过程的实际计算公式,但首先一步预测的状态向量估计x^1(n)\hat x_1(n)x^1(n)要先求出。定义状态向量的一步预测误差ϵ(n,n−1)=defx(n)−x^1(n)\epsilon(n,n-1)\stackrel{\text{def}}{=}x(n)-\hat x_1(n)ϵ(n,n1)=defx(n)x^1(n)α(n)=C(n)ϵ(n,n−1)+v2(n)\alpha(n)=C(n)\epsilon(n,n-1)+v_2(n)α(n)=C(n)ϵ(n,n1)+v2(n)然后将这个式子带入相关矩阵R(n)=C(n)E{ϵ(n,n−1)ϵH(n,n−1)}CH(n)+E{v2(n)v2H(n)}=C(n)K(n,n−1)CH(n)+Q2(n)R(n)=C(n)E\{\epsilon(n,n-1)\epsilon^H(n,n-1)\}C^H(n)+E\{v_2(n)v_2^H(n)\}\\ =C(n)K(n,n-1)C^H(n)+Q_2(n)R(n)=C(n)E{ϵ(n,n1)ϵH(n,n1)}CH(n)+E{v2(n)v2H(n)}=C(n)K(n,n1)CH(n)+Q2(n)K(n,n−1)=E{ϵ(n,n−1)ϵH(n,n−1)}K(n,n-1)=E\{\epsilon(n,n-1)\epsilon^H(n,n-1)\}K(n,n1)=E{ϵ(n,n1)ϵH(n,n1)}定义为一步预测状态误差的相关矩阵,Q2(n)Q_2(n)Q2(n)是观测噪声v2(n)v_2(n)v2(n)的相关矩阵。

kalman滤波算法

新息过程是为了转入kalman滤波算法的核心问题:如何利用新息过程估计状态向量的预测?答案是用新息过程序列α(1),...,α(n)\alpha(1),...,\alpha(n)α(1),...,α(n)的线性组合直接构造状态向量的一步预测:x^1(n+1)=defx^1(n+1∣y(1),...,y(n))=∑k=1nW1(k)α(k)\hat x_1(n+1)\stackrel{\text{def}}{=}\hat x_1(n+1|y(1),...,y(n)) =\sum_{k=1}^nW_1(k)\alpha(k)x^1(n+1)=defx^1(n+1∣y(1),...,y(n))=k=1nW1(k)α(k)式子中W1(k)W_1(k)W1(k)表示与一步预测相对应的权矩阵,且k为离散时间,如何求解这个权矩阵?那就得利用正交性原理了,即最有估计的误差与已知值正交,这里误差公式是下一拍的,ϵ(n+1,n)=x(n+1)−x^1(n+1)\epsilon(n+1,n){=}x(n+1)-\hat x_1(n+1)ϵ(n+1,n)=x(n+1)x^1(n+1),已知值其实就是新息α(n)\alpha(n)α(n),由此设计公式E{ϵ(n+1,n)αH(k)}=E{[x(n+1)−x^1(n+1)]αH(k)}=O,k=1,...,.nE\{\epsilon(n+1,n)\alpha^H(k)\}=E\{[x(n+1)-\hat x_1(n+1)]\alpha^H(k)\}=O, \space k=1,...,.nE{ϵ(n+1,n)αH(k)}=E{[x(n+1)x^1(n+1)]αH(k)}=O, k=1,...,.n代入权重表达式,并利用新息的正交性可得E{x(n+1)αH(k)}=W1(k)E{α(k)αH(k)}=W1(k)R(k)E\{x(n+1)\alpha^H(k)\}=W_1(k)E\{\alpha(k)\alpha^H(k)\}=W_1(k)R(k)E{x(n+1)αH(k)}=W1(k)E{α(k)αH(k)}=W1(k)R(k)右×一下R−1(k)R^{-1}(k)R1(k)得到了权重的自洽表达W1(k)=E{x(n+1)αH(k)}R−1(k)W_1(k)=E\{x(n+1)\alpha^H(k)\}R^{-1}(k)W1(k)=E{x(n+1)αH(k)}R1(k)由此状态向量的一步预测的最小均方估计表示为x^1(n+1)=∑k=1n−1E{x(n+1)αH(k)}R−1(k)α(k)+E{x(n+1)αH(n)}R−1(n)α(n)\hat x_1(n+1)=\sum_{k=1}^{n-1}E\{x(n+1)\alpha^H(k)\}R^{-1}(k)\alpha(k)+E\{x(n+1)\alpha^H(n)\}R^{-1}(n)\alpha(n)x^1(n+1)=k=1n1E{x(n+1)αH(k)}R1(k)α(k)+E{x(n+1)αH(n)}R1(n)α(n)利用之前的假设E{v1(n)α(k)}=O,k=0,1,...,nE\{v_1(n)\alpha(k)\}=O, k=0,1,...,nE{v1(n)α(k)}=O,k=0,1,...,n,结合状态方程x(n+1)=F(n+1,n)x(n)+v1(n)\bold x(n+1)=\bold F(n+1,n)\bold x(n)+\bold v_1(n)x(n+1)=F(n+1,n)x(n)+v1(n)E{x(n+1)αH(k)}=E{[F(n+1,n)x(n)+v1(n)]αH(k)}=F(n+1,n)E{x(n)αH(k)},k=0,1,...,nE\{x(n+1)\alpha^H(k)\}=E\{[\bold F(n+1,n)\bold x(n)+\bold v_1(n)]\alpha^H(k)\}=\bold F(n+1,n)E\{\bold x(n)\alpha^H(k)\}, \space k=0,1,...,nE{x(n+1)αH(k)}=E{[F(n+1,n)x(n)+v1(n)]αH(k)}=F(n+1,n)E{x(n)αH(k)}, k=0,1,...,n这样先化简最小均方估计的第一项∑k=1n−1E{x(n+1)αH(k)}R−1(k)α(k)=F(n+1,n)∑k=1n−1E{x(n)αH(k)}R−1(k)α(k)=F(n+1,n)x^1(n)\sum_{k=1}^{n-1}E\{x(n+1)\alpha^H(k)\}R^{-1}(k)\alpha(k)=F(n+1,n)\sum_{k=1}^{n-1}E\{x(n)\alpha^H(k)\}R^{-1}(k)\alpha(k)=F(n+1,n)\hat x_1(n)k=1n1E{x(n+1)αH(k)}R1(k)α(k)=F(n+1,n)k=1n1E{x(n)αH(k)}R1(k)α(k)=F(n+1,n)x^1(n)最小均方估计的第二项,若定义G(n)=defE{x(n+1)αH(n)}R−1(n)G(n)\stackrel{\text{def}}{=}E\{x(n+1)\alpha^H(n)\}R^{-1}(n)G(n)=defE{x(n+1)αH(n)}R1(n)那么最终得到的预测公式x1(n+1)==F(n+1,n)x^1(n)+G(n)α(n)x_1(n+1)==F(n+1,n)\hat x_1(n)+G(n)\alpha(n)x1(n+1)==F(n+1,n)x^1(n)+G(n)α(n)上面的公式表明n+1时刻的状态向量的一步预测分为非自适应的部分F(n+1,n)x^1(n)F(n+1,n)\hat x_1(n)F(n+1,n)x^1(n)和自适应的部分G(n)α(n)G(n)\alpha(n)G(n)α(n)这里G(n)G(n)G(n)称为Kalman增益(矩阵)。初学者到这里肯定微醺了,那不妨先记住流程吧

Kalman 自适应滤波器算法

初始条件

x^1(1)=E{x(1)}\hat x_1(1)=E\{x(1)\}x^1(1)=E{x(1)}
K(1,0)=E{[x(1)−xˉ(1)][x(1)−xˉ(1)]H},xˉ(1)=E{x(1)}K(1,0)=E\{[x(1)-\bar x(1)][x(1)-\bar x(1)]^H\},\space\space\bar x(1)=E\{x(1)\}K(1,0)=E{[x(1)xˉ(1)][x(1)xˉ(1)]H},  xˉ(1)=E{x(1)}

输入观测向量过程

观测向量序列={y(1),...,y(n)}观测向量序列=\{y(1),...,y(n)\}观测向量序列={y(1),...,y(n)}

已知参数

状态转移矩阵F(n+1,n)观测矩阵C(n)过程噪声向量的相关矩阵Q1(n)观测噪声向量的相关矩阵Q2(n)状态转移矩阵F(n+1,n)\\观测矩阵C(n)\\过程噪声向量的相关矩阵Q_1(n) \\观测噪声向量的相关矩阵Q_2(n) 状态转移矩阵F(n+1,n)观测矩阵C(n)过程噪声向量的相关矩阵Q1(n)观测噪声向量的相关矩阵Q2(n)

计算:n=1,2,3,…

G(n)=F(n+1,n)K(n,n−1)CH(n)[C(n)K(n,n−1)CH(n)+Q2(n)]−1α(n)=y(n)−C(n)x^1(n)x^1(n+1)=F(n+1,n)x^1(n)+G(n)α(n)P(n)=K(n,n−1)−F−1(n+1,n)G(n)C(n)K(n,n−1)K(n+1,n)=F(n+1,n)P(n)FH(n+1,n)+Q1(n)\begin{aligned} G(n) & = F(n+1,n)K(n,n-1)C^H(n)[C(n)K(n,n-1)C^H(n)+Q_2(n)] ^{-1}\\ \alpha(n) & = y(n) - C(n)\hat x_1(n)\\ \hat x_1(n+1) & = F(n+1,n)\hat x_1(n) + G(n) \alpha(n) \\ P(n) & =K(n,n-1) - F^{-1}(n+1,n) G(n)C(n) K(n,n-1) \\ K(n+1,n) & =F(n+1,n)P(n)F^H(n+1,n) + Q_1(n) \\ \end{aligned} G(n)α(n)x^1(n+1)P(n)K(n+1,n)=F(n+1,n)K(n,n1)CH(n)[C(n)K(n,n1)CH(n)+Q2(n)]1=y(n)C(n)x^1(n)=F(n+1,n)x^1(n)+G(n)α(n)=K(n,n1)F1(n+1,n)G(n)C(n)K(n,n1)=F(n+1,n)P(n)FH(n+1,n)+Q1(n)
上面就是清华专著的推导,Kalman滤波器的估计性能,使滤波后的状态估计误差的相关矩阵P(n)的迹最小化,即Kalman滤波器是状态向量x(n)的线性最小方差估计。

参考

卡尔曼滤波个人学习笔记 (一)
卡尔曼滤波(一):初始篇
卡尔曼滤波算法原理讲解(搬运的文章,备份留作学习用)
卡尔曼滤波:从入门到精通
图解卡尔曼滤波(Kalman Filter)
The Kalman Filter
Kalman Filter 卡尔曼滤波
A geometric interpretation of the covariance matrix
How a Kalman filter works, in pictures
卡尔曼滤波原理及应用——MATLAB仿真
Kalman滤波算法详解及MATLAB实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/90448.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/90448.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是FCR,如何提升FCR?

‌ FCR&#xff08;First Call Resolution&#xff0c;首次呼叫解决率&#xff09;&#xff0c;意思是指客户首次联系客服时&#xff0c;问题在单次交互中被完全解决的比率。‌ ‌FCR &#xff08;首次解决的通话量 / 总首次通话量&#xff09; 100%一、关键要点&…

【浏览器插件冲突】Edge浏览器加载不出来CSDN创作者中心

【浏览器插件冲突】Edge浏览器加载不出来CSDN创作者中心写在最前面报错GPT的全部回复&#xff0c;可以参考&#x1f50d; 具体错误解释&#xff1a;1. **CORS错误**2. **XHR 请求失败**3. **ReaderArticleFinder / Readability**&#x1f6e0;️ 为什么页面没有内容显示&#x…

从零开发Java坦克大战:架构设计与难点突破 (下)

6. 游戏引擎类:6.1 完整源码展示: import javax.swing.*; import java.awt.*; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.ArrayList; import java.util.HashSet; import java.util.Random; import java.util.Set;public class Gam…

Git下载与安装全攻略

引言 Git是当今最流行的分布式版本控制系统&#xff0c;由Linus Torvalds于2005年创建。它帮助开发者高效管理代码变更&#xff0c;支持多人协作开发&#xff0c;是现代软件开发不可或缺的工具。无论是个人项目还是团队协作&#xff0c;Git都能提供强大的版本控制功能。 本文…

【Elasticsearch】快照生命周期管理 SLM(理论篇)

《Elasticsearch 集群》系列&#xff0c;共包含以下文章&#xff1a; 1️⃣ 冷热集群架构2️⃣ 合适的锅炒合适的菜&#xff1a;性能与成本平衡原理公式解析3️⃣ ILM&#xff08;Index Lifecycle Management&#xff09;策略详解4️⃣ Elasticsearch 跨机房部署5️⃣ 快照与恢…

深入理解 UDP 协议:从原理到实战的技术解析

UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09;作为 TCP 的 "轻量型伙伴"&#xff0c;在实时通信、流媒体传输等场景中发挥着不可替代的作用。与 TCP 的可靠传输不同&#xff0c;UDP 以 "简单、快速、无连接" 为设计理念&a…

c语言-数据结构-沿顺相同树解决对称二叉树问题的两种思路

二叉树OJ前言对称二叉树前言 本篇继续讲解二叉树OJ题目之对称二叉树 对称二叉树 题目链接&#xff1a;https://leetcode.cn/problems/symmetric-tree/description/ 该题要求比较这棵树是否对称&#xff0c;对称&#xff0c;指的是结构对称并且值也要对称&#xff0c;即对应…

云原生可观测-日志观测(Loki)最佳实践

一、Loki 简介 云原生可观测三大支柱 支柱工具用途MetricsPrometheus性能趋势、系统负载LogsLoki原始事件记录、错误诊断TracesTempo / Jaeger分布式链路追踪 一、Loki 简介 1.1 Loki 是什么 Loki 是由 Grafana Labs 开发的 日志聚合系统&#xff0c;与 Prometheus 架构一…

Windows Server 2003 R2系统C盘扩容教程

一、PAGreen软件下载 下载地址&#xff1a; ExtPart.zip https://pan.baidu.com/s/1FxK61XNI0t-4JIEWK1QA8Q?pwd8888 提取码: 8888 二、将软件解压缩 (1)、执行步骤一下载的程序 双击下图所示可执行程序 (2)、选择好解压路径&#xff0c;点击「Unzip」进行解压缩 (3)、磁…

Kubernetes配置管理

目录什么是ConfigMap创建ConfigMap1&#xff1a;基于目录创建ConfigMap1.创建conf目录&#xff0c;放置文件2.基于目录下的所有文件创建ConfigMap3.查看当前创建的ConfigMap2&#xff1a;基于文件创建ConfigMap1.单个文件创建ConfigMap2.使用带有key的命令创建ConfigMap3.多个文…

golang怎么实现每秒100万个请求(QPS),相关系统架构设计详解

一.需求 使用Golang,以Gin框架为基础,设计一个能够处理每秒100万请求(QPS 1M)的系统架构 注意:100万QPS是一个很高的数字,单机通常难以处理,所以必须采用分布式架构,并且需要多层次的架构设计和优化 二.搭建步骤 1.系统架构设计 为了实现高并发,需要考虑以下几个方面…

HCIA再复习

第一章.网络基础1.1 网络类型分类网络按照二层链路类型分为以下四种&#xff1a;多点接入网络&#xff08;MA&#xff09;&#xff1a;1&#xff0c;广播型多点接入&#xff08;BMA&#xff09;&#xff1a;如以太网&#xff0c;支持广播&#xff0c;设备通过MAC地址通信&#…

Qt 数据库连接池实现与管理

在 Qt 应用程序中&#xff0c;频繁创建和销毁数据库连接会带来显著的性能开销。数据库连接池通过复用现有连接&#xff0c;避免重复创建和销毁连接的开销&#xff0c;从而提高应用程序的响应速度和吞吐量。本文将详细介绍 Qt 中数据库连接池的实现与管理方法。 一、数据库连接池…

数据采集分析:从信息洪流中掘金的科学与艺术

——如何将原始数据转化为商业决策的黄金&#xff1f;&#x1f310; 引言&#xff1a;我们正淹没在数据的海洋&#xff0c;却渴求着知识的甘泉每天全球产生 2.5万亿字节 数据&#xff08;相当于每秒下载4.5万部高清电影&#xff09;&#xff0c;但未经分析的数据如同未提炼的原…

Oracle国产化替代:一线DBA的技术决策突围战

从“如履薄冰”到“游刃有余”,中国数据库的自主之路正重塑技术人的思维地图。 “凌晨三点的最后一次数据校验通过,割接系统绿灯全亮——**河北移动核心账务系统的Oracle数据库已被GoldenDB完全替代**。”2025年6月底,这场持续两年的攻坚战画上句号。当全省业务流量平稳切…

OS19.【Linux】进程状态(1)

目录 1.情景引入 2.操作系统学科对进程状态的分类 运行状态 基于时间片的轮转调度算法 阻塞状态 等待IO设备的例子 等待其他进程中需要获取的数据 进程唤醒 挂起状态(全称为阻塞挂起状态) 简单谈谈虚拟内存管理 就绪状态 笔面试题 3.Linux对进程状态的分类 R和S状…

Hadoop小文件合并技术深度解析:HAR文件归档、存储代价与索引结构

HDFS小文件问题的背景与挑战在Hadoop分布式文件系统&#xff08;HDFS&#xff09;的设计哲学中&#xff0c;"大文件、流式访问"是核心原则。然而现实场景中&#xff0c;海量小文件&#xff08;通常指远小于HDFS默认块大小128MB的文件&#xff09;的涌入却成为系统性能…

Verilog 提取信号的上升沿或者下降沿

上升沿提取代码&#xff1a;reg [1:0] F1;always (posedge clk)beginif(rst_n 1b0) F1[1:0]<2b00;else F1[1:0]<{F1[0],start_i};endwire start_l2h (F1[1:0]2b01)?1b1:1b0;下降沿提取代码&#xff1a;reg [1:0] F1;always (posedge clk)b…

.Net core 部署到IIS出现500.19Internal Server Error 解决方法

.Net core 部署到IIS&#xff0c;网页出现500.19Internal Server Error 解决方法解决方法 在URL:https://dotnet.microsoft.com/zh-tw/download/dotnet/8.0下载并安装dotnet-hosting-8.0.18-win.exe 重启IIS服务器

Linux 基本命令整理

&#x1f427; Linux 基本命令整理 为了方便初学者快速掌握 Linux 常用命令&#xff0c;以下是经过分类整理的核心命令及用法说明。 &#x1f4c2; 目录操作与文件管理 pwd 核心功能&#xff1a;打印当前工作目录的绝对路径&#xff0c;明确用户所在位置。 实操示例&#x…