用多速率传感器估计非线性系统的状态

这个示例演示了如何在Simulink™中对具有多个以不同采样率运行的传感器的系统进行非线性状态估计。万博1manbetx控制系统工具箱中的扩展卡尔曼滤波块用于使用GPS和雷达测量来估计目标的位置和速度。

介绍

工具箱中有三个用于非线性状态估计的Simul万博1manbetxink块:

  • 扩展卡尔曼滤波器:实现一阶离散时间扩展卡尔曼滤波算法。

  • 无迹卡尔曼滤波:实现离散时间无迹卡尔曼滤波算法。

  • 粒子滤波:实现离散时间粒子滤波算法。

这些块支持使用以不同采样率万博1manbetx运行的多个传感器进行状态估计。使用这些积木的典型工作流程如下:

  1. 使用MATLAB或Simulink函数对植物和传感器的行为建模。万博1manbetx

  2. 配置块的参数。

  3. 模拟滤波器并分析结果,以获得对滤波器性能的信心。

  4. 在硬件上部署过滤器。您可以使用Simulink Coder™软件为这些过滤器生成代码。万博1manbetx

此示例使用扩展的Kalman过滤器块演示此工作流的前两个步骤。最后两个步骤将在本文中简要讨论下一个步骤部分。本例中的目标是估计使用由雷达和GPS传感器提供的噪声测量的对象的状态。对象的状态是它的位置和速度,这是在Simulink模型表示为xTrue。万博1manbetx

如果您对粒子滤波块感兴趣,请参阅示例“在Simulink中使用粒子滤波块进行参数和状态估计”。万博1manbetx

目录(fullfile (matlabroot,'例子',“控制”,“主要”))%添加示例数据open_system (“multirateEKFExample”);

植物建模

扩展卡尔曼滤波(EKF)算法需要一个描述状态从一个时间步长到下一个时间步长的状态转换函数。块支持以下两种功能形万博1manbetx式:

  • 添加剂过程噪声:$x[k+1] = f(x[k], u[k]) + w[k]$

  • 非相加过程噪声:$x[k+1] = f(x[k], w[k], u[k]

其中f(..)为状态转移函数,x为状态,w为过程噪声。u是可选的,表示f的其他输入,例如实例系统输入或参数。加性噪声是指下一个状态美元$ x [k + 1]和过程噪声w [k]美元线性相关。如果关系是非线性的,则使用非加性形式。

函数f(...)可以是功能的MATLAB与MATLAB编码器™,或者Simulink的功能块的限制规定。万博1manbetx创建˚F后(...),指定的函数名和过程噪声是否在扩展卡尔曼滤波器块添加剂或非加性。

在本例中,您将跟踪一个物体在二维平面上的东北方向的位置和速度。估计数量如下:

$$ \hat{x}[k] = \left[
c \开始{数组}{}& # xA;{x} \帽子_e [k] \ \ & # xA;{x} \帽子_n”[k] \ \ & # xA;{v} \帽子_e [k] \ \ & # xA;{v} \帽子_n”[k] & # xA;结束\{数组}& # xA;\右]& # xA;{array} {ll}
} textnormal{East position estimate};[m] \\
\textnormal{North position estimate}; [m] \\
\textnormal{East velocity estimate} \; [m/s] \\
\textnormal{North velocity estimate} \; [m/s] \\
\end{array} $$

在这里k美元为离散时间索引。所用的状态转变方程是非加性的$\hat{x}[k+1] = A\hat{x}[k] + Gw[k]$,在那里$ \帽子{x} $为状态向量,w美元是过程噪声。过滤器假设w美元是一个方差已知的零均值独立随机变量吗E (ww ^ T)美元。A和G矩阵为:

$$ A = \左[
\begin{array}{c c c c}
1 & # 38岁;0 & # 38;T_s & # 38;0 xA \ \ & #;0 & # 38;1 & # 38岁;0 & # 38;T_s \ \ & # xA; 0 & 0 & 1 & 0 \\
 0 & 0 & 0 & 1
 \end{array}
 \right]
 \;\;\;\;\;\;\;\; G = \left[
 \begin{array}{c c}
 T_s/2 & 0 \\
 0 & T_s/2 \\
 1 & 0 \\
 0 & 1
 \end{array}
 \right]
$$

在哪里T_s美元为采样时间。A和G的第三行将东向速度模拟为随机游走:$ {v} \帽子_e (k + 1) = {v} \帽子_e [k] + w_1 [k]美元。实际上,位置是一个连续时间变量,是速度随时间的积分$ \压裂{d} {dt} {x} _e = \ \帽子帽子{v} _e美元。A和G的第一行表示这个运动学关系的离散近似:美元(\帽子{x} _e [k + 1] - \帽子{x} _e [k]) / T_s =(\帽子{v} _e [k + 1] + \帽子{v} _e [k]) / 2美元。A和G的第二行和第四行代表了北速度和位置之间相同的关系。这种状态转换模型是线性的,而雷达测量模型是非线性的。这种非线性要求使用非线性状态估计器,如扩展卡尔曼滤波器。

在本例中,使用Simulink函数块实现状态转换函数。万博1manbetx要做到这一点,

  • 添加一个万博1manbetx仿真软件的功能阻止到您的模型万博1manbetx模型/用户定义函数图书馆

  • 单击Simulink函数块上显示的名称。万博1manbetx编辑函数名,并根据需要添加或删除输入和输出参数。在本例中,状态转换函数的名称为stateTransitionFcn。它有一个输出参数(xNext)和两个输入参数(x, w)。

  • 虽然在本例中并不需要,但是您可以在Simulink函数中使用来自其余Simulink模型的任何信号。万博1manbetx为此,添加轮廓尺寸块的万博1manbetx模型/来源图书馆。注意,它们与ArgInArgOut通过函数签名设置的块(xNext = stateTransitionFcn(x, w))。

  • 在Simuli万博1manbetxnk功能块,构建利用Simulink模块的功能。

  • 方法中设置输入和输出参数x、w和xNext的维数信号的属性选项卡的ArgInArgOut块。属性中提供的信息必须与数据类型和端口维一致扩展卡尔曼滤波器块。

在本例中还实现了状态转换函数的解析雅可比矩阵。指定雅可比矩阵是可选的。然而,这减少了计算负担,并在大多数情况下提高了状态估计的精度。将雅可比函数实现为Simulink函数,因为状态转换函数是Simulink万博1manbetx函数。

open_system ('multirateEKFExample/万博1manbetxSimulink函数-状态转换雅可比矩阵');

传感器建模-雷达

扩展的卡尔曼滤波块还需要一个描述状态如何与测量相关的测量函数。支持以下两种功能形式:万博1manbetx

  • 添加剂测量噪声:$y[k] = h(x[k], u[k]) + v[k]$

  • 非相加测量噪声:$ y的[K] = H(X [k]的,V [K],U [K])$

这里H(..)是测量函数,并且v是测量噪声。u是可选的,并且表示附加输入到h,例如系统输入或参数。这些输入可以从在状态转换函数的输入是不同的。

在本例中,位于原点的雷达以20赫兹测量物体的范围和角度。假设两个测量值都有5%的噪声。这可以通过以下测量方程来建模:

$$ y_{radar}[k] = \left[
c \开始{数组}{}& # xA;大概{x_n \ [k] ^ 2 + x_e [k] ^ 2} \;(1 + v_1 [k]) \ \ & # xA;量化(x_n [k], x_e [k]) \;(1 + v_2 [k]) \ \ & # xA;结束\{数组}& # xA;\右]& # xA; $ $

在这里v_1 [k]美元美元$ v_2 [k]为测量噪声项,每项方差为0.05^2。也就是说,大多数测量的误差小于5%。测量噪声是非加性的,因为v_1 [k]美元美元$ v_2 [k]不是简单地添加到测量值中,而是依赖于状态x。在本例中,雷达测量方程是使用Simulink函数块实现的。万博1manbetx

open_system (“multirateEKFExample/万博1manbetxSimulink功能-雷达测量”);

传感器建模- GPS

全球定位系统以1赫兹的频率测量物体的东、北位置。因此,GPS传感器的测量方程为:

$$ y_{GPS}[k] = \左[
c \开始{数组}{}& # xA;x_e [k] \ \ & # xA;x_n [k] & # xA;结束\{数组}& # xA;\右]+ & # xA;左\ [& # xA;c \开始{数组}{}& # xA;v_1 [k] \ \ & # xA;v_2 [k] & # xA; \end{array}
 \right]
$$

在这里v_1 [k]美元美元$ v_2 [k]为协方差矩阵[10^2 0;0 10 ^ 2)。也就是说,测量精确到大约10米,误差是不相关的。测量噪声是附加的,因为噪声项影响测量美元y_ {GPS} $线性。

创建此功能,并将其保存在一个文件名为gpsMeasurementFcn.m。当测量噪声是附加的,你不能在函数中指定噪声项。在扩展的卡尔曼滤波块中提供函数名和测量噪声协方差。

类型gpsMeasurementFcn
函数y = gpsMeasurementFcn(x) % gpsMeasurementFcn GPS测量函数状态估计% %假设状态x为:%[东方网;NorthPosition;EastVelocity;上面需要的是你想用MATLAB编码器生成C或c++代码的过滤器y = x([1 2]);位置状态是测量结束

过滤建设

配置扩展的卡尔曼滤波块来执行估计。您可以指定状态转换和测量函数名称、初始状态和状态误差协方差,以及流程和测量噪声特性。

系统模型块对话框的选项卡,指定以下参数:

状态转换

  1. 指定状态转换函数,stateTransitionFcn,在功能。因为你有这个函数的雅可比矩阵,选择雅可比矩阵,然后指定雅可比函数,stateTransitionJacobianFcn

  2. 选择非相加过程噪声下拉列表,因为您明确地说明了进程噪声如何影响函数中的状态。

  3. 指定过程噪声协方差为[0.2 0;0 0.2]。如在植物建模这个例子中的部分,处理噪声来定义在每个方向上的速度的随机游动。对角项约捕获多少速度可以在状态转换函数的一个样本时间而改变。的非对角项被设置为零,这是一种幼稚的假设是,在北和东的方向的速度变化是不相关的。

初始化

  1. 指定您的最佳初始状态估计值初始状态。在本例中,指定[100;100;0;0]。

  2. 指定你的信心在你的状态估计猜测最初的协方差。在本例中,指定10。软件将此值解释为可能包含的真实状态值下午\ \ sqrt{10} $美元你最初的估计。您可以通过设置为每个状态指定一个单独的值最初的协方差作为一个向量。您可以通过将其指定为矩阵来指定这种不确定性中的相互关系。

因为有两个传感器,所以单击添加测量指定第二个度量函数。

测量1

  1. 指定测量函数的名称,radarMeasurementFcn,在功能

  2. 选择非相加测量噪声下拉列表,因为您明确地说明了流程噪声如何影响函数中的度量。

  3. 指定测量噪声协方差为[0.05^2 0;0。05^2]传感器建模-雷达部分。

测量2

  1. 指定测量函数的名称,gpsMeasurementFcn,在功能

  2. 该传感器模型具有附加噪声。因此,指定GPS测量噪声为添加剂测量噪声下拉列表。

  3. 指定测量噪声协方差为[100 0;0 100]。

多重速率的标签中,由于两个传感器在不同的采样速率操作时,进行如下配置:

  1. 选择使多重速率的操作

  2. 指定状态转换示例时间。状态转换采样时间必须最小,所有测量采样时间必须是状态转换采样时间的整数倍。指定状态转换采样时间为0.05,采样时间的测量最快。虽然在本例中不是必需的,但是与所有测量相比,状态转换的采样时间可能更短。这意味着在没有测量的情况下会有一些采样时间。对于这些样本时间,过滤器使用状态转换函数生成状态预测。

  3. 指定测量1采样时间(雷达)为0.05秒测量2(GPS)为1秒。

仿真和结果

测试扩展卡尔曼滤波器的性能,通过模拟一个场景,在该场景中,物体以正方形模式移动,具体操作如下:

  • 在t = 0处,物体开始于美元x_e (0) = 100 \;\ textnormal {[m]}, x_n (0) = 100 \ \ textnormal {[m]} $

  • 它朝北在$ {x} \点_n”= 50 \; \ textnormal {[m / s]} $直到t = 20秒。

  • 它的方向是东$ {x} \点_n”= 40 \; \ textnormal {(m / s)} $在t = 20和t = 45秒之间。

  • 它朝南在$ {x} \点_n”= -25 \ \ textnormal {[m / s]} $吨之间= 45和T = 85秒。

  • 它向西延伸到\ \点{x} _e = -10美元;\ textnormal {[m / s]} $在t = 85和t = 185秒之间。

生成运动对应的真实状态值:

t = 0.05;% [s]真实状态的采样率[t, xTrue] = generateTrueStates(Ts);在0-185秒内生成位置和速度剖面

模拟模型。例如,东向的实际速度和估计速度:

sim卡(“multirateEKFExample”);open_system (多速率kfexample /Scope - East Velocity);

图中显示了东向的真实速度及其扩展卡尔曼滤波估计。过滤器成功地跟踪了速度的变化。滤波器的多速率特性在时间范围t = 20 ~ 30秒内最明显。该滤波器每秒钟进行较大的校正(GPS采样率),而由雷达测量引起的校正每0.05秒可见。

下一个步骤

  1. 验证状态估计:无迹和扩展卡尔曼滤波性能的验证通常使用大量的蒙特卡罗模拟来完成。有关更多信息,请参见在Simulink中验证在线状态估计万博1manbetx

  2. 生成代码:无味和扩展卡尔曼滤波模块支持利用Simulink编码器™软件,C和C ++代码生成。万博1manbetx万博1manbetx这些块你所提供的功能,必须符合MATLAB编码器™软件的限制,(如果你使用MATLAB功能,您的系统模型)和Simulink编码器软件(如果你使用的Simulink功能块到您的系统模型)。万博1manbetx

摘要

这个例子演示了如何在系统识别工具箱中使用扩展的卡尔曼滤波块。通过以不同采样率工作的两个不同的传感器,您可以估计一个对象的位置和速度。

close_system (“multirateEKFExample”,0);

另请参阅

||

相关话题