跟踪对象的使用MATLAB代码

学习目标

在本教程中,您将学习如何:

  • 使用MATLAB函数MATLAB添加块®Simulink函数金宝app®用于建模、仿真和部署到嵌入式处理器的模型。

    这种功能对于用MATLAB的文本语言而不是Simulink的图形语言来编码算法很有用。金宝app

  • 使用coder.extrinsic调用MATLAB代码MATLAB函数块。

    此功能允许您快速创建原型。您可以从Simulink调用现有的MATLAB代码,而不必使这些代码适合于代码金宝app生成。

  • 在生成代码之前,检查现有的MATLAB代码是否适合代码生成。

    在生成代码之前,必须准备好代码。

  • 在生成代码时指定可变大小的输入。

教程的先决条件

你需要知道的

要完成本教程,您应该对MATLAB软件有基本的熟悉。您还应该了解如何创建和模拟基本的Simulink模型。金宝app

所需的产品下载188bet金宝搏

要完成本教程,您必须安装以下产品:下载188bet金宝搏

  • MATLAB

  • MATLAB编码器™

  • 金宝app

  • 金宝app仿真软件编码器

  • C编译器

有关受支持的编译器的列表,请金宝app参见金宝app支持编译器

在生成C代码之前,必须设置C编译器。看到设置C编译器

有关安装MathWorks的说明®下载188bet金宝搏产品,请参阅针对您的平台的MATLAB安装文档。如果您已经安装了MATLAB并想要检查安装了哪些MathWorks产品,请输入下载188bet金宝搏版本在MATLAB命令窗口中。

示例:卡尔曼滤波器

描述

本节描述本教程使用的示例。要完成本教程,您不必熟悉算法。

本教程的示例使用卡尔曼滤波器从一系列基于过去位置的噪声输入中估计在二维空间中移动的物体的位置。位置向量有两个分量,x而且y,表示其水平坐标和垂直坐标。

卡尔曼滤波器有广泛的应用,包括控制、信号和图像处理;雷达声纳;还有金融建模。它们是递归滤波器,从一系列不完整或有噪声的测量中估计线性动态系统的状态。卡尔曼滤波器算法依赖于滤波器的状态空间表示,并使用存储在状态向量中的一组变量来完全描述系统的行为。它利用状态转移矩阵和过程噪声估计线性递归地更新状态向量。

算法

本节描述了卡尔曼滤波器的算法,并在本教程提供的滤波器的MATLAB版本中实现。

该算法使用卡尔曼滤波估计器根据移动物体过去的位置预测其位置。它通过更新卡尔曼状态向量来估计当前的位置,其中包括位置(x而且y),速度(Vx而且v),加速度(斧头而且)的运动物体。卡尔曼状态向量,间的,为持久变量。

%初始条件持久化x_est p_est if isempty(x_est) x_est = 0 (6,1);P_est = 0 (6,6);结束
间的初始化为空6 x1列向量,并在每次使用过滤器时更新。

卡尔曼滤波器使用运动定律来估计新状态:

X X 0 + V x d t Y Y 0 + V y d t V x V x 0 + 一个 x d t V y V y 0 + 一个 y d t

这些运动定律被捕捉在状态转换矩阵中一个,它是一个矩阵,包含的系数值xyVxVy一个x,一个y

%初始状态转换矩阵dt=1;A=[1 0 dt 0 0 0;…0 1 0 dt 0 0;…0 0 1 0 dt 0;…0 0 0 1 0 dt;…0 0 0 0 10;…0 0 0 0 0 1];

过滤过程

过滤过程分为两个阶段:

  • 预测状态和协方差

    卡尔曼滤波器使用先前估计的状态,间的,来预测当前状态,x_prd.预测状态和协方差计算为:

    %预测状态及协方差x_prd = A * x_est;p_prd = A * p_est * A' + Q;

  • 估计

    该滤波器还使用电流测量,z,预测状态,x_prd,以估计当前状态的更准确的近似值。估计状态和协方差计算为:

    %测量矩阵H = [1 0 0 0 0 0 0;0 1 0 0 0 0];Q =眼睛(6);R = 1000 *眼(2);
    %估计S = H * p_prd' * H' + R;B = H * p_prd';klm_gain = (S \ B)';%估计状态和协方差x_est = x_prd + klm_gain * (z - H * x_prd);p_est = p_prd - klm_gain * H * p_prd;计算估计的测量y = H * x_est;

参考

微积分,西蒙。自适应滤波理论.上马鞍河,新泽西州:Prentice-Hall, Inc., 1996。

教程文件

关于教程文件

本教程使用以下文件:

  • 金宝app本教程的每个步骤的Simulink模型文件。

  • 本教程每一步的MATLAB示例代码文件。

    在本教程中,您将使用调用包含卡尔曼滤波算法的MATLAB文件的Simulink模金宝app型。

  • 包含示例输入数据的mat文件。

  • 绘图的MATLAB文件。

文件位置

教程文件可以在以下文件夹中找到:docroot \工具箱\仿真软金宝app件\ \卡尔曼例子.要运行本教程,必须将这些文件复制到本地文件夹。有关说明,请参见本地复制文件

文件的名称和描述

类型 的名字 描述
MATLAB函数文件 ex_kalman01 一个标量卡尔曼滤波器的MATLAB基线实现。
ex_kalman02 原版算法适合代码生成。
ex_kalman03 卡尔曼滤波器的版本,适用于代码生成和使用与基于帧和基于包的输入。
ex_kalman04 禁用代码生成的内联。
金宝appSimulink模型文件 ex_kalman00 金宝app没有Simulink模型MATLAB函数块。
ex_kalman11 完整的Simuli金宝appnk模型MATLAB函数块为标量卡尔曼滤波器。
ex_kalman22 金宝app一个Simulink模型MATLAB函数块用于卡尔曼滤波器,接受固定大小(基于帧的)输入。
ex_kalman33 金宝app一个Simulink模型MATLAB函数块用于卡尔曼滤波器,接受可变大小(基于包的)输入。
ex_kalman44 金宝app调用Simulink模型ex_kalman04.m,它已禁用内联。
MATLAB数据文件 位置 包含算法使用的输入数据。
图文件 plot_trajectory 画出物体的轨迹和卡尔曼滤波估计的位置。

教程的步骤

本地复制文件

将教程文件复制到本地工作文件夹:

  1. 创建本地金宝搏官方网站文件夹,例如,c: 金宝app\模型、卡尔曼滤波、解决方案金宝搏官方网站

  2. 改为docroot \工具箱\仿真软金宝app件\例子文件夹中。在MATLAB命令行输入:

    Cd (fullfile(docroot, 'toolbox', 金宝app'simulink', 'examples'))

  3. 的内容卡尔曼子文件夹到您的本地金宝搏官方网站目录的完整路径名金宝搏官方网站文件夹:

    拷贝文件(“卡尔曼”、“金宝搏官方网站”)

    例如:

    拷贝文件(“卡尔曼”、“c: \仿真软件\卡尔金宝app曼\解决方案”)金宝搏官方网站

    你的金宝搏官方网站文件夹现在包含了本教程的完整解决方案集。金宝搏官方网站如果您不想为本教程中的每个任务执行步骤,您可以查看解决方案以查看代码的外观。金宝搏官方网站

  4. 创建本地工作文件夹,例如,c: 金宝app\模型、卡尔曼滤波、工作

  5. 从您的金宝搏官方网站文件夹到您的工作文件夹中。

    • ex_kalman01

    • ex_kalman00

    • 位置

    • plot_trajectory

    你的工作文件夹现在包含了开始本教程所需的所有文件。

设置C编译器

建立你的MATLAB函数Block需要一个受支持的编译器。金宝appMATLAB自动选择一个作为默认编译器。如果您的系统上安装了多个支持matlab的编译器,则可以金宝app使用墨西哥人设置命令。看到更改默认编译器

关于ex_kalman00模型

首先,检查ex_kalman00本教程提供的模型,以理解您试图使用卡尔曼滤波器解决的问题。

  1. 打开ex_kalman00在Simulink金宝app中的模型:

    1. 将MATLAB当前文件夹设置为包含本教程工作文件的文件夹。在MATLAB命令行输入:

      cd工作
      在哪里工作包含文件的文件夹的完整路径名称。

    2. 在MATLAB命令行输入:

      ex_kalman00

      该模型是一个不完整的模型,用于演示如何将MATLAB代码与Simulink集成。金宝app完整的模型是ex_kalman11,本教程也提供了。

模型回调函数。模型使用这个回调函数:

  • 从mat文件加载位置数据。

  • 属性的第二个输入,设置Index生成器块使用的数据选择器块。

查看此回调函数:

  1. 建模选项卡上,选择模型设置>模型属性

  2. 选择回调选项卡。

  3. 选择InitFcn模型的回调窗格。

    出现回调。

    加载position.mat;[R、C] =大小(位置);idx = (1: C) ';t = idx-1;

源块。该模型使用了两个控件的位置数据和标量索引选择器块。

选择器。该模型使用选择器块,该块选择其输入信号的元素,并根据其索引输入和它的索引输入生成输出信号指数的选择设置。通过改变该块的配置,可以生成不同大小的信号。

浏览选择器块设置,双击选择器块,查看功能块参数。

在这个模型中,指数的选择对于第一个端口是选择所有第二个端口是索引向量(端口).因为输入是a2 x 310位置矩阵,索引数据从1310,选择器Block只输出一个2 x1在每个采样时间输出。

MATLAB函数块。该模型使用MATLAB函数块来绘制物体的轨迹和卡尔曼滤波估计的位置。这个函数:

  • First声明数字持有,plot_trajectory函数作为外部函数,因为这些MATLAB可视化函数不支持代码生成。金宝app当调用不受支持的MATLAB函数时,必金宝app须将其声明为外部函数,以便MATLAB可以执行它,但不会尝试为其生成代码。

  • 创建一个图形窗口,并在模拟期间保持该图形窗口。否则,每个采样时间都会显示一个新的图形窗口。

  • 调用plot_trajectory函数,它绘制了物体的轨迹和卡尔曼滤波估计的位置。

模拟停止时间。模拟停止时间为309,因为过滤器的输入是一个包含310元素和Simulink使用金宝app从零开始的索引。

添加MATLAB函数块到您的模型

要自己修改模型和代码,请完成本节中的练习。否则,打开提供的模型ex_kalman11在你的金宝搏官方网站子文件夹查看修改后的模型。

对于本教程,您将添加MATLAB函数块到ex_kalman00.mdl随教程提供的模型。您必须从一个空的Simulink模型开始开发自己的测试平台。金宝app

添加MATLAB函数块。要添加MATLAB函数块到ex_kalman00模型:

  1. 开放ex_kalman00在仿真金宝app软件。

    ex_kalman00

  2. 添加一个MATLAB函数块到模型:

    1. 在MATLAB命令行中,键入slLibraryBrowser打开Simulink L金宝appibrary浏览器。

    2. 从Simulink库列表中,选择金宝app用户定义函数图书馆。

    3. 单击MATLAB函数块并将其拖到ex_kalman00模型。将该块放在所读的红色文本注释的上方在这里放置MATLAB函数块。

    4. 从模型中删除红色文本注释。

    5. 在当前文件夹中保存模型为ex_kalman11

      最佳实践-保存增量代码更新

打电话给你的MATLAB来自MATLAB函数块的代码。调用您的MATLAB代码从MATLAB函数布洛克:

  1. 双击MATLAB函数块,打开MATLAB函数块编辑器。

  2. 删除编辑器中显示的默认代码。

  3. 将以下代码复制到MATLAB函数块。

    函数y = kalman(u) %#编码原y = ex_kalman01(u);

  4. 保存模型。

连接MATLAB函数块输入和输出

  1. 连接MATLAB函数阻塞输入和输出,使您的模型看起来像这样。

  2. 保存模型。

模拟ex_kalman11模型

模拟模型:

  1. 2 .在Sim金宝appulink模型窗口中,单击运行

    当Si金宝appmulink运行模型时,它将物体的轨迹绘制为蓝色,卡尔曼滤波器估计的位置为绿色。最初,您可以看到估计位置与物体的实际位置收敛需要很短的时间。然后发生三次位置的突然变化——每次卡尔曼滤波器都在几次迭代后重新调整并跟踪对象。

  2. 模拟停止。

你已经证明了你的MATLAB算法在Simulink中工作。金宝app现在可以修改筛选器以接受固定大小的输入,如中所述修改过滤器以接受固定大小的输入

修改过滤器以接受固定大小的输入

到目前为止,在本教程中使用的过滤器使用了一个简单的批处理过程,每次接受一个输入,因此必须为每个输入重复调用该函数。在本教程的这一部分中,您将学习如何修改算法以接受固定大小的输入,这使得算法适合于基于帧的处理。然后修改模型,以提供固定大小的数据帧作为输入,并调用每次一帧传入数据的过滤器。

修改你的MATLAB代码。要自己修改代码,请完成本节中的练习。否则,打开提供的文件ex_kalman03.m在你的金宝搏官方网站子文件夹查看修改后的算法。

现在可以修改算法来处理包含多个输入的向量。您需要找到向量的长度,并依次为向量中的每个元素调用筛选器代码。的过滤器算法来实现这一点循环。

  1. 开放ex_kalman02.m在MATLAB编辑器中。在MATLAB命令行输入:

    编辑ex_kalman02.m

  2. 添加一个循环筛选器代码。

    1. 在评论之前:

      预测状态和协方差
      插入:
      我= 1:尺寸(z, 2)

    2. 后:

      计算估计的测量y = H * x_est;
      插入:
      结束

    3. 选择之间的代码语句和结束语句,右键单击打开上下文菜单并选择智能缩进缩进代码。

    你的过滤器代码现在应该是这样的:

    我= 1:尺寸(z, 2)%预测状态及协方差x_prd = A * x_est;p_prd = A * p_est * A' + Q;%估计S = H * p_prd' * H' + R;B = H * p_prd';klm_gain = (S \ B)';%估计状态和协方差x_est = x_prd + klm_gain * (z - H * x_prd);p_est = p_prd - klm_gain * H * p_prd;计算估计的测量y = H * x_est;结束

  3. 方法修改用于计算估计状态和协方差的行th输入元素z

    变化:

    x_est = x_prd + klm_gain * (z - H * x_prd);
    :
    X_est = x_prd + klm_gain * (z(1:2)- H * x_prd);

  4. 修改计算估计测量值的行,以将结果附加到th元素的输出y

    变化:

    y = H * x_est;
    :
    y(我):= H * x_est;

    右上方的代码分析器消息指示器变成橙色,表示代码分析器检测到警告。代码分析器用橙色强调违规代码,并在右侧放置一个橙色标记。

  5. 将指针移到橙色标记上可查看错误信息。

    代码分析器检测到这一点y必须在编写子脚本之前完全定义,并且不能通过在生成的代码中建立索引来增加变量。

  6. 要解决此警告,请为输出预分配内存y,与输入大小相同z.的前面添加此代码循环。

    %预分配输出信号:y= 0(大小(z));

    橙色标记消失,代码右上角的代码分析器消息指示器变成绿色,这表明您已经修复了代码分析器检测到的所有错误和警告。

    为什么要预分配输出?

  7. 将函数名更改为ex_kalman03并将文件另存为ex_kalman03.m在当前文件夹中。

ex_kalman03.m的内容

您已经准备好开始教程中的下一个任务,修改您的模型以调用更新的算法

修改您的模型以调用更新的算法。要自己修改模型,请完成本节中的练习。否则,打开提供的模型ex_kalman22.mdl在你的金宝搏官方网站子文件夹查看修改后的模型。

接下来,更新您的模型,以提供固定大小的数据帧和调用的输入ex_kalman03每次一帧传入数据。

  1. 开放ex_kalman11在Simulink金宝app中的模型。

    ex_kalman11

  2. 双击MATLAB函数块,打开MATLAB函数块编辑器。

  3. 替换调用的代码ex_kalman02用一个电话ex_kalman03

    函数y = kalman(u) %#编码原Y = ex_kalman03(u);

  4. 关闭编辑器。

  5. 修改InitFcn回调函数:

    1. 建模选项卡上,选择模型设置>模型属性

      打开“模型属性”对话框。

    2. 在此对话框中,选择回调选项卡。

    3. 选择InitFcn模型的回调窗格。

    4. 将现有的回调函数替换为:

      加载position.mat;[R、C] =大小(位置);FRAME_SIZE = 5;idx = (1: FRAME_SIZE: C) ';LEN =长度(idx);t = (1: LEN) 1;
      这个回调函数将帧大小设置为5,以及要递增的索引5

    5. 点击应用关闭“模型属性”对话框。

  6. 更新选择器块来使用正确的索引。

    1. 双击选择器块,查看功能块参数。

      打开“功能块参数”对话框。

    2. 设置第二个指数的选择起始索引(端口)

    3. 设置输出的大小对于第二个输入FRAME_SIZE,点击应用并关闭对话框。

    现在,指数的选择对于第一个端口是选择所有第二个端口是起始索引(端口).因为下标增量是5每次采样时间,输出大小为5,选择器块输出2 x5在每个采样时间输出。

  7. 将模型仿真停止时间更改为61.现在帧大小是5,因此模拟在五分之一的样本时间内完成。

    1. 在Simuli金宝appnk模型窗口中,在建模选项卡上,单击模型设置

    2. 在“配置参数”对话框的左侧窗格中,选择解算器

    3. 在右侧窗格中,设置停止时间61

    4. 点击应用并关闭对话框。

  8. 将模型另存为ex_kalman22.mdl

测试修改后的算法。模拟模型:

  1. 2 .在Sim金宝appulink模型窗口中,单击运行

    当Si金宝appmulink运行模型时,它将对象的轨迹绘制为蓝色,卡尔曼滤波器估计位置为绿色,就像之前使用批处理滤波器时一样。

  2. 模拟停止。

您已经证明了您的算法接受固定大小的信号。现在你已经为下一个任务做好了准备,使用过滤器接受可变大小的输入

使用过滤器接受可变大小的输入

在本部分教程中,您将学习如何在Simulink模型中指定可变大小的数据。金宝app然后用可变大小的输入测试卡尔曼滤波算法,看看该算法是否适合处理不同大小的数据包。有关在Simulink中使用可变大小数据的更多信息,请参见金宝app可变大小信号基础

更新模型以使用可变大小的输入。要自己修改模型,请完成本节中的练习。否则,打开提供的模型ex_kalman33.mdl在你的金宝搏官方网站子文件夹查看修改后的模型。

  1. 开放ex_kalman22.mdl在仿真金宝app软件。

    ex_kalman22

  2. 修改InitFcn回调函数:

    1. 建模选项卡上,选择模型设置>模型属性

      打开“模型属性”对话框。

    2. 选择回调选项卡。

    3. 选择InitFcn模型的回调窗格。

    4. 将现有的回调函数替换为:

      加载position.mat;Idx =[11;2 3;4 6;7 10;11 15;31 70;71 100;101 200;201 250;LEN =长度(idx);t = (0:1: LEN-1)”;
      此回调设置索引以生成11个不同大小的输入。它指定每个采样时间的开始和结束索引。第一个采样时间只使用第一个元素,第二次采样时间使用第二个和第三个元素,依此类推。最大的样本,101200,包含100个元素。

    5. 点击应用然后关闭模型属性对话框。

  3. 更新选择器块来使用正确的索引。

    1. 双击选择器块,查看功能块参数。

      打开“功能块参数”对话框。

    2. 设置第二个指数的选择开始和结束索引(端口),然后按应用并关闭对话框。

      这个设置意味着索引端口的输入在每个采样时间指定输入的开始和结束索引。因为索引输入在每个采样时间指定不同的开始和结束索引,所以选择器块在模拟过程中输出一个可变大小的信号。

  4. 使用“端口和数据管理器”设置MATLAB函数输入x和输出y作为可变大小的数据。

    1. 双击MATLAB函数块,打开MATLAB函数块编辑器。

    2. 从编辑器菜单中选择编辑数据

    3. 在Ports and Data Manager左窗格中,选择输入u

      端口和数据管理器显示有关的信息u在右侧窗格中。

    4. 一般选项卡,选择变量的大小复选框,然后单击应用

    5. 在左侧窗格中,选择输出y

    6. 一般标签:

      1. 设置大小y[100]来指定一个2-D矩阵的上界2对于第一维和One hundred.方法中指定的最大大小输入InitFcn回调。

      2. 选择变量的大小复选框。

      3. 点击应用

    7. 关闭“端口和数据管理器”。

  5. 现在对另一个做同样的事情MATLAB函数块。使用端口和数据管理器设置可视化块输入y而且z作为可变大小的数据。

    1. 双击可视化块,打开MATLAB函数块编辑器。

    2. 从编辑器菜单中选择编辑数据

    3. 在Ports and Data Manager左窗格中,选择输入y

    4. 一般选项卡,选择变量的大小复选框,然后单击应用

    5. 在左侧窗格中,选择输入z

    6. 一般选项卡,选择变量的大小复选框,然后单击应用

    7. 关闭“端口和数据管理器”。

  6. 将模型仿真停止时间更改为10.这一次,过滤器在每个采样时间处理11个不同大小的输入中的一个。

  7. 将模型另存为ex_kalman33.mdl

测试修改后的模型。模拟模型:

  1. 2 .在Sim金宝appulink模型窗口中,单击运行

    当Si金宝appmulink运行模型时,它将物体的轨迹绘制为蓝色,卡尔曼滤波器估计的位置为绿色。

    注意,信号线之间选择器块,跟踪和可视化块改变,以显示这些信号是可变大小的。

  2. 模拟停止。

您已经成功地创建了一个接受可变大小输入的算法。接下来,您将学习如何调试MATLAB函数块,如中所述调试MATLAB函数块

调试MATLAB函数块

您可以调试MATLAB函数就像你可以在MATLAB中调试函数一样。

  1. 双击MATLAB函数块,调用卡尔曼滤波器打开MATLAB函数块编辑器。

  2. 在编辑器中,单击行左边缘的破折号(-)字符:

    Y = kalman03(u);

    这一行的空白处会出现一个红色的小球,表示您已经设置了一个断点。

  3. 2 .在Sim金宝appulink模型窗口中,单击运行

    当执行达到断点时,模拟暂停,左侧空白中出现一个绿色小箭头。

  4. 将指针放在变量上u

    的价值u出现在指针旁边。

  5. 从MATLAB函数块编辑器菜单中,选择一步

    kalman03.m文件在编辑器中打开,您现在可以使用一步一步,走出

  6. 选择走出

    kalman03.m文件关闭,然后MATLAB函数块代码重新出现在编辑器中。

  7. 将指针放在输出变量上y

    您现在可以看到的价值y

  8. 单击红色小球以删除断点。

  9. 从MATLAB函数块编辑器菜单中,选择退出调试

  10. 关闭编辑器。

  11. 关闭图形窗口。

    现在你已经为下一个任务做好了准备,生成C代码

生成C代码

你已经证明了你的算法可以在Simulink中工作。金宝app接下来为您的模型生成C/ c++代码。代码生成需要金宝app仿真软件编码器

请注意

在生成代码之前,必须检查MATLAB代码是否适合代码生成。如果将MATLAB代码作为外部函数调用,则必须在生成代码之前删除外部调用。

  1. 重命名MATLAB函数跟踪.要重命名该块,双击注释MATLAB函数以下MATLAB函数将文本替换为跟踪

    的代码生成时MATLAB函数块,金宝app仿真软件编码器使用生成代码中的块的名称。使用一个有意义的名字是很好的习惯。

  2. 在生成代码之前,请确保金宝app仿真软件编码器创建代码生成报告。此HTML报告提供了对生成文件列表的轻松访问,其中包含用于生成代码的配置设置的摘要。

    1. 在Simuli金宝appnk模型窗口中,在建模选项卡上,单击模型设置

      打开“配置参数”对话框。

    2. 在“配置参数”对话框的左侧窗格中,选择报告代码生成

    3. 在右侧窗格中,选择创建代码生成报告而且自动打开报表

    4. 点击应用并关闭“配置参数”对话框。

    5. 保存您的模型。

  3. 为跟踪块生成代码:

    1. 右键单击跟踪块并选择C / c++代码>构建选定的子系统

    2. 为子系统构建代码窗口中,单击构建.有关更多信息,请参见为各个子系统生成代码和可执行文件(金宝app仿真软件编码器)

  4. Simu金宝applink软件将生成一个错误,通知您它不能将可变大小的信号记录为数组。您需要更改保存到MATLAB工作区的数据的格式。修改此格式:

    • 在Simuli金宝appnk模型窗口中,在建模选项卡上,单击模型设置

      打开“配置参数”对话框。

    • 在“配置参数”对话框的左侧窗格中,选择数据导入/导出并设置格式结构随时间变化

      记录的数据现在是一个具有两个字段的结构:一个时间字段和一个信号字段,使Simulink能够记录可变大小的信号。金宝app

    • 点击应用并关闭“配置参数”对话框。

    • 保存您的模型。

  5. 重复步骤3.来为跟踪块生成代码。

    金宝app仿真软件编码器软件为该块生成C代码并启动代码生成报告。

    有关使用代码生成报告的更多信息,请参见代码生成报告(金宝app仿真软件编码器)

  6. 在代码生成报告的左窗格中,单击Tracking.c链接查看生成的C代码。注意,在生成的代码中MATLAB函数块,跟踪的函数可能没有单独的函数代码ex_kalman03函数,因为函数内联默认启用。

  7. 修改你的过滤算法禁用内联:

    1. ex_kalman03.m,在函数声明后,添加:

      coder.inline('永远');

    2. 将函数名更改为ex_kalman04并将文件另存为ex_kalman04.m在当前文件夹中。

    3. 在你的ex_kalman33模型,双击跟踪块。

      打开MATLAB函数块编辑器。

    4. 修改对要调用的筛选算法的调用ex_kalman04

      函数y = kalman(u) %#编码原Y = ex_kalman04(u);

    5. 将模型另存为ex_kalman44.mdl

  8. 生成并检查C代码。

    1. 重复步骤3。

    2. 在代码生成报告的左窗格中,单击Tracking.c链接查看生成的C代码。

      属性的生成的C代码ex_kalman04函数。

      /*本地函数的正向声明*/ static void Tracking_ex_kalman04(const real_T z_data[620], const int32_T z_sizes[2], real_T y_data[620], int32_T y_sizes[2]);函数块:'/Tracking' */ static void Tracking_ex_kalman04(const real_T z_data[620], const int32_T 48 z_sizes[2], real_T y_data[620], int32_T y_sizes[2])

本教程中使用的最佳实践

最佳实践-保存增量代码更新

要记住的要点

  • 在修改MATLAB代码之前,请备份它。

  • 确定文件的命名约定,并经常保存临时版本。例如,本教程使用两位数字后缀来区分过滤器算法的不同版本。

  • 出于模拟目的,在生成代码之前,使用调用MATLAB代码coder.extrinsic检查您的算法是否适合在Simulink中使用。金宝app这种做法提供了以下好处:

    • 您不必使MATLAB代码适合代码生成。

    • 您可以在MATLAB中调试MATLAB代码,同时从Simulink调用它。金宝app

  • 创建一个金宝app仿真软件编码器代码生成报告。此HTML报告提供了对生成文件列表的轻松访问,其中包含用于生成代码的配置设置的摘要。

另请参阅

相关的例子

更多关于