电动摄像机-多输入多输出(MIMO)非线性自回归系统辨识(NARX)——基于MATLAB

2023-10-27

目录

 

前言

1、输入输出的数据(测量数据序列)

2、非线性ARX(IDNLARX)模型-使用Wavenet(小波网络)的初步估计

3、非线性ARX模型-尝试更高阶

非线性ARX模型-调整非线性估计量的单位数

4、非线性ARX模型-尝试其他非线性估计器

5、具有混合非线性估计量的非线性ARX模型


前言

        本文出自 MATLAB2018A 的系统辨识 System Identification APP 中的 Example,因为自己在做这方面的课题,所以把这个例子简单做一下,包括翻译(Google 翻译,修改了部分问题)和自己的理解。

这个例子主要是用数据估计一种 MIMO 非线性黑盒系统的模型,工具箱提供了两种类型的非线性黑盒模型:NARX,Hammerstein-Wiener模型

1、输入输出的数据(测量数据序列)

        在此示例中将使用文件 'motorizedcamera.mat' 中保存的数据。 它包含从电动相机收集的188个数据样本,采样时间为0.02秒。 输入向量 u(t)由6个变量组成:固定在摄像机上的正交X-Y-Z坐标系中的3个平移速度分量[m / s],以及绕X-Y-Z轴[rad / s]的3个旋转速度分量。 输出向量y(t)包含2个变量:点的位置(以像素为单位),该点是摄像机在3D空间中固定点拍摄的图像。 我们创建一个IDDATA对象 z 来保存加载的数据:

黑盒系统辨识最初始的东西就是数据。这个例子的数据来自于一个电动相机的数据,可以理解为控制6个输入量(6输入)的组合来达到要求的2个目标(2输出)。

load motorizedcamera          % 加载例子中的数据(内置)
z = iddata(y, u, 0.02, 'Name', 'Motorized Camera', 'TimeUnit', 's');  %创建一个iddata对象

来看一下运行情况:

可以知道,输入 u(t) 是一个188行,6列的矩阵,每一列代表一个输入变量的采样序列;同样的,y(t) 是188行,2列,每一列代表一个输出采样序列。以上就是我们所需要的数据,一般是从实验得到的。

2、非线性ARX(IDNLARX)模型-使用Wavenet(小波网络)的初步估计

        让我们首先尝试非线性ARX模型。 需要选择两个重要元素:模型阶数和非线性估计量。 首先尝试简单的事情,让我们选择顺序[na nb nk] = [ones(2,2),ones(2,6),ones(2,6)]。 这意味着每个输出变量都由所有输出和输入变量预测,每个变量都延迟了1个样本。 通过使用矢量符号,可以以 model_output(t)= F(y(t-1),u(t-1))的形式编写模型。 让我们选择小波网络(wavenet)作为非线性估计器,从而矢量非线性函数F将由两个小波网络估计。 MATLAB的函数 nlarx 有助于估计非线性ARX模型。

        小波的方法通常用于多分辨率的分析(详细请自行了解)。

mw1 = nlarx(z, [ones(2,2), ones(2,6), ones(2,6)], wavenet);

通过将模拟输出与估计模型的输出与测量数据z中的输出进行比较,检查结果:

compare(z,mw1)

结果:

结果就是使用小波网络时的非线性自回归的辨识效果,两个图分别表示两个输出的结果;每一幅图中的两条曲线分别表示原始系统的输出和采用了NARX辨识后的输出曲线。这里面并没有表现出与输入之间的关系,只是这种辨识的想过说明。这里面小波网络的方式只是 nlarx 函数的一个参数,它还有一些其他的参数方法,可以自行查询help。

3、非线性ARX模型-尝试更高阶

        让我们看看能否通过更高的阶次做得更好。 请注意,在使用基函数展开表示非线性来辨识模型时,模型参数的数量可能会超过数据样本的数量。 在这种情况下,某些估计指标(例如噪声方差和最终预测误差(FPE))无法可靠地计算。 对于当前示例,我们将关闭警告以告知我们有关此限制的信息。

ws = warning('off','Ident:estimation:NparGTNsamp');  % 关闭警告
mw2 = nlarx(z, [ones(2,2), 2*ones(2,6), ones(2,6)], wavenet);      % nb 参数乘2
compare(z,mw2)

结果

第二个模型mw2很好。 因此,让我们在以下示例中保留对模型阶次的选择:

nanbnk = [ones(2,2), 2*ones(2,6), ones(2,6)];

估计算法已自动选择了两个小波网络估计器的单位数(子波)。 这些数字显示在下面。 注意缩写“ nl” =“Nonlinearity”和“ num” =“ NumberOfUnits”。

mw2.Nonlinearity(1).NumberOfUnits % 属性的全称Nonlinearity,NumberOfUnits
mw2.nl(2).num                     % MATLAB中可以使用的属性缩写 nl,num

非线性ARX模型-调整非线性估计量的单位数

       可以显式指定WAVENET估计器中的单位数,而不是由估计算法自动选择:

mw3 = nlarx(z, nanbnk, [wavenet('num',10); wavenet('num',5)]);  % 在选择方法时设置参数

4、非线性ARX模型-尝试其他非线性估计器

         在WAVENET估计器的位置,也可以使用其他非线性估计器。 让我们尝试TREEPARTITION估算器。

mt1 = nlarx(z, nanbnk, 'treepartition');

在上面的调用中,我们使用字符向量(“ treepartition”)代替对象来指定非线性估计量。 但是,这仅在将非线性与默认属性值一起使用时才有效。 在以下示例中,调用树分区对象构造函数以直接创建非线性估计器对象。

mt2 = nlarx(z, nanbnk, treepartition);

也可以使用SIGMOIDNET估计器。 可以使用NLARXOPTIONS命令指定诸如最大迭代(MaxIterations)和迭代显示之类的估计选项。

opt = nlarxOptions('Display','on');
opt.SearchOptions.MaxIterations = 2;
ms1 = nlarx(z, nanbnk, 'sigmoidnet', opt);

5、具有混合非线性估计量的非线性ARX模型

        在同一模型中的不同输出通道上可以使用不同的非线性估计器。 假设我们要使用树分区非线性估计器来预测第一输出,并使用小波网络来预测第二输出。 模型估计如下所示。 现在,第三个输入参数(非线性)是两个不同的非线性估计器对象的数组。

mtw = nlarx(z, nanbnk, [treepartition; wavenet]);

可以通过选择LINEAR估计器来指示输出通道中是否没有非线性。 以下示例表示,在model_output(t)= F(y(t-1),u(t-1),u(t-2))中,函数F由线性分量和非线性分量组成( SIGMOIDNET)。

opt.Display = 'off'; % do not show estimation progress anymore
mls = nlarx(z, nanbnk, [linear; sigmoidnet('NumberOfUnits',5)], opt);
% no nonlinearity on first output

检查估计结果

可以在同一COMPARE命令中比较各种模型。

compare(z, mw2, ms1, mls)

函数PLOT可用于查看各种模型的非线性响应。

plot(mt1,mtw,ms1,mls)

请注意,曲线图右侧的控制面板允许选择回归器和进行配置。

可以使用与线性模型相同的方法,在估计的模型上使用其他功能,例如RESID,PREDICT和PE。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

电动摄像机-多输入多输出(MIMO)非线性自回归系统辨识(NARX)——基于MATLAB 的相关文章

  • 如何通用地减少子集平均值的计算?

    Edit 由于似乎没有人阅读此链接的原始问题 因此让我在这里介绍一下它的概要 正如其他人所问的 最初的问题是 给定大量值 总和将超过数据类型的值Double那么如何计算这些值的平均值呢 有几个答案说要按集合计算 比如取50个和50个数字 计
  • 在 MATLAB 中定义其他中缀运算符

    有没有办法在 MATLAB 中定义额外的中缀运算符 具体来说 我想定义两个中缀运算符 gt and lt gt 这些符号是理想的 但如果需要 它可以是单个字符 它调用函数implies and iff以同样的方式 calls and and
  • 优化 MATLAB 代码(嵌套 for 循环计算相似度矩阵)

    我正在 MATLAB 中基于欧几里德距离计算相似度矩阵 我的代码如下 for i 1 N M N is the size of the matrix x for whose elements I am computing similarit
  • 定义自定义 Mupad 程序的一般相对搜索路径

    假设我有一个 mupad 笔记本myMupadNotebook mn在路径上 C projectFolder ABC abc 它调用程序MyMupadProcedure mu它位于 C DEF GHI 现在我有一个 Matlab 脚本mai
  • 使用C标准数学库精确计算标准正态分布的CDF

    标准 C 数学库不提供计算标准正态分布 CDF 的函数 normcdf 然而 它确实提供了密切相关的函数 误差函数 erf 和互补误差函数 erfc 计算 CDF 的最快方法通常是通过误差函数 使用预定义常量 M SQRT1 2 来表示 d
  • 在Matlab中选择图像上的像素时,索引指的是什么?

    当在Matlab中查看图像的单个像素时 该索引指的是什么 X Y 指的是像素的坐标 RGB 指的是颜色 但是关于索引是什么有什么想法吗 为了澄清一下 当我在 Matlab 中查看图形并使用数据光标选择一个点时 显示的三行是 X Y 指数 R
  • 如何获取MATLAB句柄对象的ID?

    当我尝试使用时出现问题MATLAB 句柄对象 http www mathworks com help techdoc ref handle html作为关键值MATLAB 容器 Map http www mathworks com help
  • 垂直子图的单一颜色条

    我想让下面的 MATLAB 图有一个沿着两个子图延伸的颜色条 像这样的事情 使用图形编辑器手动完成 Note 这与提出的问题不同here https stackoverflow com questions 39950229 matlab t
  • 将数据提示堆栈放在轴标签顶部,并在轴位置发生更改后更新轴标签

    此问题仅适用于 unix matlab Windows 用户将无法重现该问题 我在尝试创建位于 y 轴标签顶部的数据提示时遇到问题 下图很能说明问题 正如您所看到的 在 ylabel 附近创建的数据提示将到达 ylabel 文本的底部 而期
  • 如何为已编译的 MATLAB 创建安装程序并要求用户接受我们的许可条款?

    我正在 MATLAB 中编写程序分发给 Windows 用户 我使用 MATLAB 编译器和 MATLAB r2014a 版本来创建程序 我可以使用 MATLAB 应用程序编译器创建 Windows 安装程序 并且它的工作效果可以接受 但是
  • 在Matlab中对字符进行分组并形成矩阵

    我有 26 个字符 A 到 Z 我将 4 个字符组合在一起 并用空格分隔以下 4 个字符 如下所示 abcd efgh ijkl mnop qrst uvwx yz 我的Matlab编码如下 str abcdefghijklmnopqrst
  • 数学 - 映射数字

    如何将 a 和 b 之间的数字线性映射到 c 和 d 之间 也就是说 我希望 2 到 6 之间的数字映射到 10 到 20 之间的数字 但我需要广义的情况 我的脑子炸了 如果您的数字 X 位于 A 和 B 之间 并且您希望 Y 位于 C 和
  • 如何使用Matlab将数据保存到Excel表格中?

    我想将数据以表格形式保存在 Excel 工作表中 它应该看起来像 Name Age R no Gpa Adnan 24 18 3 55 Ahmad 22 12 3 44 Usman 23 22 3 00 每次当我执行我的文件时类数据 m 下
  • 这个按位运算如何检查 2 的幂?

    我正在看一些应该很简单的代码 但我的数学在这里严重失败 下面是一个使用以下条件检查数字是否为 2 的幂的条件 if num 1 num num 1 make num pow of 2 我的问题是 如何在 num 和 num 1 之间使用按位
  • 如何在Matlab中打印带有千位分隔符的整数?

    我想使用逗号作为千位分隔符将数字转换为字符串 就像是 x 120501231 21 str sprintf 0 0f x 但随着效果 str 120 501 231 21 如果内置fprintf sprintf做不到 我想可以使用正则表达式
  • 在球体边缘绘制点

    因此 来自 Flash 背景的我对一些简单的 2D 三角函数有很好的理解 在带有 I 圆的二维中 我知道使用给定角度和半径将项目放置在边缘上的数学 x cos a r y sin a r 现在 如果我在 3d 空间中有一个点 我知道球体的半
  • MATLAB 编译器与 MATLAB 编码器

    两者有什么区别 据我了解 MATLAB Compiler将MATLAB代码包装成 exe文件 这样就可以在不安装MATLAB的情况下使用它 并且只需要MCR 除此之外 MATLAB Builder NE 还可以用于生成与 Net 框架一起使
  • 以 2 为底的矩阵对数

    Logm 取矩阵对数 并且log2 取矩阵每个元素以 2 为底的对数 我正在尝试计算冯 诺依曼熵 它涉及以 2 为底的矩阵对数 我该怎么做呢 如果将 以 2 为底 的矩阵指数定义为B expm log 2 A 或者如果您类似地通过特征分解直
  • Matlab:3D 堆积条形图

    我正在尝试创建一个 3D 堆积条形图 如这个问题所示 Matlab 中的 3D 堆叠条形图 https stackoverflow com questions 13156133 3d stacked bars in matlab 5D 然而
  • python:查找围绕某个 GPS 位置的圆的 GPS 坐标的优雅方法

    我有一组以十进制表示的 GPS 坐标 并且我正在寻找一种方法来查找每个位置周围半径可变的圆中的坐标 这是一个例子 http green and energy com downloads test circle html我需要什么 这是一个圆

随机推荐

  • 正交试验设计例题及答案_正交矩阵求解

    我对题的难度进行划分 满难度是 难度中包含 计算难度和 思路难度 满难度各 难度评测是以我初见题目视角写出的标准 比较主观 另外 考试时的解答时间的长短也需要考虑 毕竟有些东西复习多了见过了 或者看过答案了就不难了 假如每颗 代表20分 我
  • ubuntu:关闭某个进程

    参考 http blog csdn net chen861201 article details 6980677 ps aux grep xxx 程序名称 kill xxx 某个PID
  • ganglia监控hadoop 容器节点

    hadoop容器运行参考上篇博客 http blog csdn net wenwenxiong article details 78973755 参看网址 https gist github com ameizi 0c77e3dbb13de
  • (二十五)admin-boot项目之集成消息队列Rabbitmq

    目录 项目地址 https gitee com springzb admin boot 如果觉得不错 给个 star 简介 这是一个基础的企业级基础后端脚手架项目 主要由springboot为基础搭建 后期整合一些基础插件例如 redis
  • java 动态线程池_线程池的参数动态调整

    经典面试题 这次的文章还是绕回了我写的第三篇原创文章 有的线程它死了 于是它变成一道面试题 中留下的几个问题 哎 兜兜转转 走走停停 天道好轮回 苍天饶过谁 在这篇文章中我主要回答上面抛出的这个问题 你这几个参数的值怎么来的呀 要回答这个问
  • OpenGL2 spec releases at the SIGGRAPH2004

    发信人 chsoft 珍惜光华 善待光华 信区 Graphics标 题 OpenGL2 spec releases at the SIGGRAPH2004发信站 日月光华 2004年08月11日13 22 06 星期三 站内信件 SIGGR
  • 编译busybox有这个提示,是怎么回事

    我编译busybox有这个提示 是怎么回事 有人知道吗 分类 海思论坛 https www ebaina com questions 100000031827
  • DC-DC直流斩波---BUCK降压斩波电路

    降压斩波电路 Buck Chopper 的原理图及工作波形 该电路使用一个全控型器件V 图中为IGBT 也可使用其他器件 若采用晶闸管 需设置使晶闸管关断的辅助电路 图5 1中 为在V关断时给负载中电感电流提供通道 设置了续流二极管VD 斩
  • Linux 文件权限

    一 文件权限 Linux系统中的每个文件和目录都有访问许可权限 用他来确定谁能通过何种方式对文件和目录进行访问和操作 文件或目录的访问权限分为只读 只写和可执行三种 Linux文件权限一共10位长度 分成四段 第一段1位 表示文件类型 d表
  • glGetString(GL_VERSION)、 glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max)为何老是得不到正确的值

    今天碰到了的问题如下 在程序里调用 printf s r n glGetString GL VERSION 总是输出 null glGetIntegerv GL MAX TEXTURE SIZE max 得不到max的值 答 在MFC情况下
  • @RefreshScope注解处理

    spring启动时会调用ClassPathBeanDefinitionScanner java类中的doScan 对包路径下的所有class进行扫描 获取bean的定义 同时对bean的 RefreshScope Scope的父类 进行处理
  • JSP基础_0700_HelloWorld 全局变量和局部变量

    本文讨论jsp中生成的servlet代码中全局变量和局部变量的问题 请看下面一段代码
  • tar包安装

    在Linux操作系统中 常用的软件包一共有两种 rpm包 相当于Windows中的exe软件包 tar gz包 未编译的源码包 软件的编译需要使用gcc编译器 Linux安装 开发工具 gt gcc gcc c tar包解压 基本语法 ta
  • WIN7&WIN10共享打印机0x000000709错误解决方法

    这两天连续碰到709错误 打印机安装正常 共享正常 但通过 ip 打印机名添加共享时就709错误 开始以为是printspooler服务的问题 但试过故障依旧 也检查了共享设置 密码共享是关闭的 guest用户是开启的 为什么呢 最终发现了
  • numpy ndarray 打印格式化

    1 ndarray打印省略问题 np set printoptions threshold np inf 2 ndarray打印换行限制 加上下面这句代码 输出时打印不换行 np set printoptions linewidth 400
  • 用Servlet结合c3p0连接池等写一个简单的注册登录

    首先 给一张截图 上面图是我的整体内容 1 先进入工具类 代码如下 package com qf util import javax sql DataSource import com mchange v2 c3p0 ComboPooled
  • oracle体验实验,Oracle实验三

    1 实验目的 1 掌握表的创建与管理 2 掌握索引的创建与管理 3 掌握视图的创建与管理 4 掌握序列的创建与应用 2 实验环境 Win10 以及Oracle 11g 3 实验要求 1 为图书销售系统创建表 2 在图书销售系统适当表的适当列
  • 机器学习案例6:基于SVM的数字识别

    案例6 基于SVM的数字识别 为什么写本博客 前人种树 后人乘凉 希望自己的学习笔记可以帮助到需要的人 需要的基础 懂不懂原理不重要 本系列的目标是使用python实现机器学习 必须会的东西 python基础 numpy pandas ma
  • 在word中插入显示在同一行的两张图片(且各自带有题注)

    http blog csdn net xiao xia article details 46699271 先将两张图片均导入word中 位置设置为 嵌入文本行中 调整t图片大小使得两图片刚好可以呈现在同一行 如果图片不需要题注 或者两图片共
  • 电动摄像机-多输入多输出(MIMO)非线性自回归系统辨识(NARX)——基于MATLAB

    目录 前言 1 输入输出的数据 测量数据序列 2 非线性ARX IDNLARX 模型 使用Wavenet 小波网络 的初步估计 3 非线性ARX模型 尝试更高阶 非线性ARX模型 调整非线性估计量的单位数 4 非线性ARX模型 尝试其他非线