首页/文章/ 详情

GCKontrol新模块:M-Code及其应用案例卡尔曼滤波

2年前浏览4049

摘 要

 
本文介绍GCKontrol的M-code 模块及基于该模块实现了卡尔曼滤波工程。M-Code模块可导入m脚本文件,满足了用户对Matlab m文件的使用需求。                    



01


             

M-function简介


       
GCKontrol的M-Code模块满足了用户对Matlab m-function的使用需求。Matlab可以编写m文件,m-function脚本是m文件的一种,每一个m函数文件通常包含输入参数,输出参数,主要解决参数传递和函数调用的问题。        

       
m-function文件的基本格式:        
●function 输出参数列表=函数名(输入参数列表);          
函数帮助信息行(注释);          

函数体---是函数的功能实现部分。


       

02


         

M-Code介绍


       
用户在使用GCKontrol软件搭建工程时,可使用m语言来创建函数算法并应用于工程。并且对于之前Simulink模型中用到的大量m文件,也可以复用到GCKontrol工程,从而使工程迁移时,对模型的重构工作更加快捷、方便、高效。        

       
M-Code模块位于GCKontrol模型库的自定义库中,拖拽到画布中的M-Code模块没有输入、输出端口,双击或者右键属性,进入模块的属性设置页面,上传m脚本(脚本需要满足M-Code的模板格式),模块会根据m脚本中定义的输入输出,在模块中生成对应的端口,可用于与其他模块的连线,实现数据运算。        
       

       


       
需要注意的是,在第一次使用M-Code时,需要下载模板,然后通过“打开文件夹”按钮找到m文件,进行m脚本的编辑。如果模板内容发生变化(除函数体内实现部分),点击的“刷新”按钮,输入变量、输出变量会进行更新。        

       


       
通过M-Code模板可以看到,M-Code支持多输入、多输出变量,且输入输出可以为矢量或者矩阵,输出变量的维度需要用M-Code约定的语法%size进行指定,如下图。        

       


       
路径设置界面可以配置附加包含目录,当需要使用其他模板之外的m文件时,需要通过此界面进行配置,如下图所示,指定了C:\Test\Include路径作为附加包含目录,意味着这个目录下的所有*.m文件都可以被找到。目录可以是多个,如果写成一行,可以用英文分号分隔;也可以每个路径占一行,多个路径写多行,不需要分号分隔。        

       


       
下面将通过一个案例——卡尔曼滤波,来展示M-Code的主要功能。        
       

       

       

03


         

案例-卡尔曼滤波


       
在前期发布的《使用GCKontrol搭建卡尔曼滤波》文章中,我们已经讲解过卡尔曼滤波的应用领域和优势,本文将不再赘述。在之前文章中已经介绍了在GCKontrol中可以用模块堆积的方法搭建卡尔曼滤波算法,本文则将介绍用M-Code模块搭建的相同工程,以便更直观的感受M-Code模块的功能和优势。        

       
1、项目描述        

       
卡尔曼滤波是在时域上运用状态空间,递推得到的一种滤波算法,便于在计算机上实时实现,计算量和存储量小。该方法可处理多变量非平稳随机过程滤波问题,可处理时变系统滤波问题。例如飞机在飞行过程中,遇到的干扰通常是时变非平稳的噪声,此时运用卡尔曼滤波可有效去除干扰,得到较真实的状态估计数据。        

       


       
本示例中采用卡尔曼滤波估计火箭的高度,火箭上的机载高度表提供其高度信息,高度表提供的高度信息具有噪声,需要经过卡尔曼滤波去除干扰噪声,得到比较真实的火箭高度信息。        

       
2、基本假设        

       
加速度计不会感知重力加速度。如果加速度计放置在桌面上,它会输出1g的重力加速度;如果在自由落体的时候,其输出值为0。所以火箭的真实的加速度为加速度计的测量值减去重力加速度g,所以加速读计的测量值可以描述为:        
                         
◆               为加速度计的输出值          
◆               重力加速度,为                         

◆               加速度计的测量偏差

3、公式推导        

       
3.1状态矩阵        

       
转移方程的一般数学表达式如下:        
                         
其中:          
◆               在               步的预测值          
◆               在               步系统估计值          
◆               是控制控制量          
◆               是过程噪声          

◆               是状态转移矩阵

系统状态             的定义如下:        

               


其中:

◆               是火箭在第               时间步的高度

◆               是火箭在第               时间步的速度

得到状态转移方程如下:        
                         

上式中:

                         
                         
                         
3.2协方差矩阵        

       
协方差矩阵一般数学表达式如下:        

               


式中:          
◆                 是当前协方差矩阵的预测值          
◆                 是               步的估计的协方差矩阵          
◆                 上一小节中的状态转移矩阵          

◆                 过程噪声矩阵

             矩阵的数学表达式如下:        

               


矩阵中对角线元素为估计值的方差:          
◆                 为高度估计的方差          
◆                 为速度估计的方差          

◆ 非对角线上的元素为协方差

3.3过程噪声矩阵        

       
假设的噪声模型的是离散的,每个时间段的噪声都不相同,但是在时间段之间是恒定的。对于一个加速度为定值的模型,其过程噪声矩阵如下:        

               

在示例工程中Q矩阵如下所示:        

               


其中:          
◆               为有效的测量时间间隔          

◆               为加速度计测量值的随机偏差

在本例中则有:        

           

3.4观测矩阵        


观测矩阵的一般数学表达式为:        

               


式中:          
◆                为测量值          
◆                系统的真实状态矩阵          
◆                随机噪声矩阵          

◆                观测矩阵

测量结果只为我们提供了火箭的高度:        

               


               


               


式中               是一个               矩阵,               是一个               矩阵,所以H矩阵的维度为               。


               

3.5测量偏差        

       
测量值的协方差矩阵为:        

               

上式中,下标               代表测量值的不确定性。为了简化,这里假设偏差为恒值:               。        

       
3.6卡尔曼增益        

               


式中:          
◆                是卡尔曼增益          
◆                根据前一步的偏差矩阵估计的当前步的偏差矩阵          
◆                观测矩阵          

◆                测量噪声矩阵

3.7状态矩阵更新        

       
状态矩阵更新公式如下:        

               

3.8协方差矩阵更新        

       
协方差矩阵更新公式如下:        

               

式中:          
◆                当前步长下的协方差矩阵          
◆                距               步的协方差矩阵估计的当前步长的协方差矩阵          
◆                卡尔曼增益          
◆                观测矩阵          

◆                测量的误差矩阵

4、模型示例        

       
4.1模型参数        

       
在上面完成了卡尔曼滤波的方程推导,本节以火箭高度为示例进行的具体的计算。火箭配备了一个提供高度测量的高度计和一个作为控制输入的加速度计。        
■ 时间步长:                         
■ 火箭的加速度:                         
■ 高度测量标准偏差:                         

■ 加速度测量标准偏差:               

转移矩阵F:        

               

控制矩阵G:        

               

过程噪声矩阵Q:        

               

测量误差矩阵R:        

               

单元矩阵I:        

               

观测矩阵H:        

               

4.2模型架构        

       
模型架构如下图所示:        

       

       

       
M-Code内部算法,如下图所示:        

       

       

       
在模块堆积的卡尔曼滤波模型中,四个模块(虚拟子系统)分别为:状态矩阵、协方差矩阵、增益矩阵、状态矩阵,这四个模块均使用模块搭建算法,模块多,连线繁杂,容易出错,且查错成本高。而M-Code模块可以把上述的变量和算法在m脚本里进行定义和编辑,然后生成一个模块应用于工程当中,完美规避了上述问题,也使工程界面更加整洁(见下图)。        

       

       

       
4.3仿真结果展示        

       


       
M-Code搭建的卡尔曼滤波工程,与模块堆积的卡尔曼滤波的结果一致        

       

       

04


         

总结


       
通过上述案例,可以很直观地感受到在GCKontrol 系统设计与仿真软件中,M-Code模块操作简单且易于上手。M-Code模块不仅能够满足用户在平台迁移过程中对Simulink模型中m脚本的复用需求,减少模型重构产生的不必要的工作量,还能解决在复杂算法的应用场景中,模块堆积算法繁琐和工程体量大的问题。        
来源:世冠科技
汽车Simulink电机控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2022-10-09
最近编辑:2年前
世冠科技
国内领先的系统仿真工业软件和数...
获赞 25粉丝 17文章 142课程 1
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈