稳态和时变卡尔曼滤波器KALMAN FILTER的设计和仿真植物动力学模型案例研究

简介: 稳态和时变卡尔曼滤波器KALMAN FILTER的设计和仿真植物动力学模型案例研究

本案例研究说明了卡尔曼滤波器的设计和仿真。考虑稳态和时变卡尔曼滤波器。

植物动力学

考虑一个在输入u[n]上有加性高斯噪声w[n]。

此外,让 yv[n] 是输出 y[n] 的噪声测量,其中 v[n] 表示测量噪声:

离散卡尔曼滤波器

该问题的稳态卡尔曼滤波器方程如下。

  • 测量更新:

  • 时间更新:

在这些方程中:

  • ˆx[n|n−1] 是 x[n] 的估计值,给定过去直到 yv[n−1] 的测量值。
  • ˆx[n|n] 是基于最后一次测量 yv[n] 的更新估计。

给定当前估计 ˆx[n|n],时间更新预测下一个样本_n_  + 1的状态值 (提前一步预测)。然后,测量更新基于新的测量值 yv[n+1] 调整该预测。修正项是新值的函数,即 y[n+1] 的测量值和预测值之间的差异。这种差异由下式给出:

给定噪声协方差,选择创新增益 M 以最小化估计误差的稳态协方差:

您可以将时间和测量更新方程组合到一个状态空间模型中,即卡尔曼滤波器:

该滤波器生成 yn 的最佳估计 ˆy[n|n]。请注意,过滤器状态是 ˆx[n|n−1]。

稳态设计

您可以使用函数 设计上述稳态卡尔曼滤波器 kalman。首先指定带有过程噪声的工厂模型:

这里,第一个表达式是状态方程,第二个是测量方程。

以下命令指定此工厂模型。采样时间设置为 -1,以将模型标记为离散模型而不指定采样时间。

Pla = s

假设 Q  =  R  = 1,设计离散卡尔曼滤波器。

kalm

此命令返回kalmf 滤波器的状态空间模型 以及创新增益 M

M

kalmf 的输入 是 u 和 yv,以及。输出是工厂输出和状态估计,ye=ˆy[n|n] 和 ˆx[n|n]。

因为您对输出估计 ye 感兴趣,所以选择第一个输出 kalmf 并丢弃其余的。

kalmf

要查看滤波器的工作原理,请生成一些输入数据和随机噪声,并将滤波后的因变量 ye 与真实因变量 _y 进行比较_。您可以单独生成每个因变量,也可以同时生成两者。要分别模拟每个因变量,先单独使用 植物,然后将植物和过滤器连接在一起。接下来详细介绍联合仿真替代方案。

下面的框图显示了如何生成真实输出和过滤输出。

您可以使用函数和 构建此框图的状态空间模型 。首先构建一个完整的工厂模型,以 u_、  _w_、  _v 作为输入,  y 和 yv(测量值)作为输出。

s(a,b,c,d,-1,'iptnme',{'u' 'w' 'v'},'ouutnae',{'y' 'yv'});

然后形成下图的并联。

pal(P,kf,1,1,\[\],\[\]);

最后,通过将设备输出 yv 连接到具有正反馈的过滤输入 yv 来关闭传感器回路。

Smoe = feedback; % 围绕输入#4和输出#2关闭循环
SiMe = SMdl % 从I/O列表中删除yv

生成的仿真模型将 w_、  _v_、  _u 作为输入,  y 和 ye 作为输出。查看属性进行验证。

InuNe
OupNme

您现在已准备好模拟过滤器。生成正弦输入 u 并处理和测量噪声向量 w 和 _v_。

n = length
w = sqrt*randn
v = sqrt*randn

模拟因变量。

\[out,x\] = lsim
y = out; % 真实响应
ye = out; % 滤过的响应
yv = y + v; % 测量响应

以图形方式比较真实和过滤后的因变量。

plot
xlabel
title
subplot
xlabel



点击标题查阅往期内容


卡尔曼滤波器:用R语言中的KFAS建模时间序列


左右滑动查看更多

01

02

03

04




第一个图显示了真实因变量 y  (虚线)和过滤后的输出 ye(实线)。第二个图将测量误差(点划线)与估计误差(实线)进行比较。该图显示噪音水平已显着降低。这是通过计算协方差误差来确认的。滤波前的误差协方差(测量误差)为:

MEro = sum/length
滤波后的误差协方差(估计误差)降低:
EsrCv = sum/length

时变卡尔曼滤波器

时变卡尔曼滤波器是对时变系统或具有非平稳噪声协方差的 LTI 系统的稳态滤波器的推广。

考虑以下工厂状态和测量方程。

时变卡尔曼滤波器由以下递归给出:

  • 测量更新:

  • 时间更新:

这里,ˆx[n|n−1] 和 ˆx[n|n] 如前所述。此外:

为简单起见,表示状态空间矩阵的时间依赖性的下标已被删除。

给定初始条件 x[1|0] 和 P[1|0],您可以迭代这些方程来执行过滤。您必须在每个时间样本更新状态估计 x[n|.] 和误差协方差矩阵 P[n|.]。

时变设计

要实现这些滤波器递归,首先要生成噪声输出测量值。使用 之前产生的过程噪声 w 和测量噪声 v

y = lsim

假设以下初始条件:

for 循环实现时变滤波器 。

P = B\*Q\*B'; %初始误差协方差
x = zeros; % 状态的初始条件
for i = 1:length
  % 测量更新
  erv(i) = C\*P\*C';
  % 时间更新
  x = A\*x + B\*u;

以图形方式比较真实输出和估计输出。

subplot(211)
subplot
xlabel

第一个图显示了真实因变量 y  (虚线)和过滤后的因变量 ye(实线)。第二个图将测量误差(点划线)与估计误差(实线)进行比较。

时变滤波器还估计errcov 每个样本的估计误差 y-ye的协方差 。绘制它以查看您的滤波器是否达到稳定状态(正如您对固定输入噪声所期望的那样)。

subplot(211)
plot

从这个协方差图中,您可以看到输出协方差确实在大约五个样本中达到了稳定状态。从那时起,您的时变滤波器具有与稳态版本相同的性能。

与由实验数据导出的估计误差协方差比较:

Esro = sum/length

该值小于理论值 errcov ,接近稳态设计获得的值。

最后,注意最终值 M[n] 和 创新增益矩阵的稳态值 _M_重合。

Mn
M

相关文章
|
1月前
|
机器学习/深度学习 算法
基于VMD-SSA-LSTM的多维时序光伏功率预测
基于VMD-SSA-LSTM的多维时序光伏功率预测
基于扩展(EKF)和无迹卡尔曼滤波(UKF)的电力系统动态状态估计
基于扩展(EKF)和无迹卡尔曼滤波(UKF)的电力系统动态状态估计
|
1月前
|
存储
R语言分解商业周期时间序列:线性滤波器、HP滤波器、Baxter滤波器、Beveridge Nelson分解等去趋势法
R语言分解商业周期时间序列:线性滤波器、HP滤波器、Baxter滤波器、Beveridge Nelson分解等去趋势法
|
10月前
|
算法 自动驾驶 数据挖掘
【鲁棒优化】基于联合聚类和定价的鲁棒功率控制方法(Matlab代码实现)
【鲁棒优化】基于联合聚类和定价的鲁棒功率控制方法(Matlab代码实现)
|
11月前
|
算法
【分布鲁棒和多目标非负矩阵分解】基于DR-NMF的对NMF问题噪声模型的识别鲁棒性研究(Matlab代码实现)
【分布鲁棒和多目标非负矩阵分解】基于DR-NMF的对NMF问题噪声模型的识别鲁棒性研究(Matlab代码实现)
|
10月前
|
机器学习/深度学习 安全
基于扩展(EKF)和无迹卡尔曼滤波(UKF)的电力系统动态状态估计(Matlab代码实现)
基于扩展(EKF)和无迹卡尔曼滤波(UKF)的电力系统动态状态估计(Matlab代码实现)
|
10月前
|
机器学习/深度学习 算法 机器人
【不确定非线性动力系统的优化算法】【动态集成系统优化与参数估计(DISOPE)技术】DISOPE + MOMENTUM + PARTAN 算法提高非线性动态系统的收敛性研究(Matlab代码实现)
【不确定非线性动力系统的优化算法】【动态集成系统优化与参数估计(DISOPE)技术】DISOPE + MOMENTUM + PARTAN 算法提高非线性动态系统的收敛性研究(Matlab代码实现)
|
10月前
|
机器学习/深度学习 算法 数据挖掘
【CNN-BiLSTM-attention】基于高斯混合模型聚类的风电场短期功率预测方法(Python&matlab代码实现)
【CNN-BiLSTM-attention】基于高斯混合模型聚类的风电场短期功率预测方法(Python&matlab代码实现)
124 0
|
11月前
|
算法 Serverless
基本粒子群算法及惯性权重分析
粒子群算法(particle swarm optimization,PSO)是计算智能领域,除了蚁群算法、鱼群算法之外的一种群体智能的优化算法。该算法最早由Kennedy和Eberhart在1995年提出的。PSO算法源于对鸟类捕食行为的研究,鸟类捕食时,找到食物最简单有效的策略就是搜寻当前距离食物最近的鸟的周围区域。PSO算法是从这种生物种群行为特征中得到启发并用于求解优化问题的,算法中每个粒子都代表问题的一个潜在解,每个粒子对应一个由适应度函数决定的适应度值。粒子的速度决定了粒子移动的方向和距离,速度随自身及其他粒子的移动经验进行动态调整,从而实现个体在可解空间中的寻优。
|
11月前
|
资源调度 算法 计算机视觉
【状态估计】粒子滤波器、Σ点滤波器和扩展/线性卡尔曼滤波器研究(Matlab代码实现)
【状态估计】粒子滤波器、Σ点滤波器和扩展/线性卡尔曼滤波器研究(Matlab代码实现)