(Cascade extended state observer)级联ADRC的simulink仿真和程序---送给中国研究学者的精华版

news2024/11/15 17:59:40
在这里先声明一下,级联CESO由美国学者Rafal Madonski的论文
《Cascade extended state observer for active disturbance rejection control 
applications under measurement noise》提出,本人只是将他给的模型给中国学者研究,
模型适用于各个行业,以供参考。

(Cascade extended state observer)级联ADRC的simulink仿真和程序---送给中国研究学者的精华版

  • 一、论文介绍
  • 二、ADRC介绍
  • 三、simulink仿真介绍
    • 1:Reference signal(参考信号)
    • 2:Observer(观测器)
      • 单个三阶ESO
      • 2个级联3阶ESO
      • 3个级联3阶ESO
    • 3:Process disturbance(扰动信号)
    • 4:ADRC controller(ADRC控制器)
    • 5:Plant(研究模型)
  • 四、噪声
  • 五、仿真结果
    • 单个三阶ESO
    • 2个级联3阶ESO
    • 3个级联3阶ESO
  • 六、结论
  • 七、请大家仔细看程序含义
  • 希望大家可以关注一下啦,或者点点赞,又或者打赏几块钱让我开心一下,哈哈哈!

一、论文介绍

扩展状态观测器(ESO)在非线性系统反馈控制设计中起着重要作用。然而,当输出测量被不可忽略的高频噪声破坏时,它的高增益特性在工程实践中产生了挑战。这种噪声的存在限制了观测器的增益可以有多高,这迫使在状态估计的快速收敛和控制任务实现的质量之间进行权衡。在这项工作中,提出了一种新的观测器设计,以提高存在噪声时的估计性能。特别地,开发了一种独特的ESO级联组合,能够快速、准确地重构信号,同时避免了测量噪声的过度放大。作为自抗扰控制(ADRC)方案的一部分,验证了所引入的观测器结构的有效性。对新的观测器结构进行了数值验证和理论分析,结果表明该观测器结构在噪声衰减方面优于标准方案。
下面的框图是这篇论文的总体控制介绍:
在这里插入图片描述
plant是你的模型,controller是你的控制器,中间由多个ESO级联,state selector是观测状态量,z1,z2,z3.

二、ADRC介绍

在这里插入图片描述
这方面可以参考其他博主的文章和论文,不再介绍。

三、simulink仿真介绍

下面将对论文的simulink仿真模型介绍,同学们可以对比ADRC框图和论文的总体控制框图做对比。
在这里插入图片描述

大家可以看到总共包括5个部分:
在这里插入图片描述
1:Reference signal(参考信号)
2:Observer(观测器)
3:Process disturbance(扰动信号)
4:ADRC controller(ADRC控制器)
5:Plant(研究模型)

1:Reference signal(参考信号)

在这里插入图片描述
其中的step:
在这里插入图片描述
在这里插入图片描述

2:Observer(观测器)

在这里插入图片描述
观测器总共由三个部分,单个三阶ESO,2个级联3阶ESO,3个级联3阶ESO

单个三阶ESO

在这里插入图片描述
其中Interpreted MATLAB Fcn模块:
在这里插入图片描述
名字是esoObserver,输出维度为3维度。
其中esoObserver.m文件为:

function [ z_hat_p ] = esoObserver( input )
    
    b_hat = 1;
    w0 = 400;
    L = [3*w0, 3*w0^2, w0^3]';

    z_hat = input(1:3);
    y = input(4);
    u = input(5);

    Ao = [0 1 0;...
         0 0 1;...
         0 0 0];
    Bo = [0; -b_hat; 0];

    z_hat_p = Ao*z_hat + Bo*u + L*(y - z_hat(1));
end


2个级联3阶ESO

在这里插入图片描述
第一个是:
在这里插入图片描述
名字是newEsoObserverFirstStage,输出维度为3维度。
其中newEsoObserverFirstStage.m文件为:

function [ z_hat_p ] = newEsoObserverFirstStage( input )
    
    w01 = 460/4;
    b_hat = 1;
    L = [3*w01, 3*w01^2, w01^3]';

    z_hat = input(1:3);
    y = input(4);
    u = input(5);

    Ao = [0 1 0;...
         0 0 1;...
         0 0 0];
    Bo = [0; -b_hat; 0];

    z_hat_p = Ao*z_hat + Bo*u + L*(y - z_hat(1));
end


第二个是:
在这里插入图片描述
名字是newEsoObserverSecondStage,输出维度为3维度。
其中newEsoObserverSecondStage.m文件为:

function [ z_hat2_p ] = newEsoObserverSecondStage( input )
    
    alpha = 2;
    w01 = 460/4;
    w02 = alpha*w01;
    b_hat = 1;
    L = [3*w02, 3*w02^2, w02^3]';

    z_hat2 = input(1:3);
    z_hat = input(4:6);
    u = input(7);

    Ao = [0 1 0;...
         0 0 1;...
         0 0 0];
    Bo = [0; -b_hat; 0];

    z_hat2_p = Ao*z_hat2 + Bo*u - Bo*1/b_hat*z_hat(3) + L*(z_hat(1) - z_hat2(1));
end


第三个是:
在这里插入图片描述
名字是extendedStateSelectorN2,输出维度为3维度。
其中extendedStateSelectorN2.m文件为:

function [z_hat] = extendedStateSelectorN2(input)

z_hat_1 = input(1:3);
z_hat_2 = input(4:6);

z_hat = [z_hat_2(1:2); z_hat_1(3)+z_hat_2(3)];
end


3个级联3阶ESO

在这里插入图片描述
第一个是:
在这里插入图片描述
名字是newEsoObserverFirstStage,输出维度为3维度。
其中newEsoObserverFirstStage.m文件为:

function [ z_hat_p ] = newEsoObserverFirstStage( input )
    
    w01 = 460/4;
    b_hat = 1;
    L = [3*w01, 3*w01^2, w01^3]';

    z_hat = input(1:3);
    y = input(4);
    u = input(5);

    Ao = [0 1 0;...
         0 0 1;...
         0 0 0];
    Bo = [0; -b_hat; 0];

    z_hat_p = Ao*z_hat + Bo*u + L*(y - z_hat(1));
end


第二个是:
在这里插入图片描述
名字是newEsoObserverSecondStage,输出维度为3维度。
其中newEsoObserverSecondStage.m文件为:

function [ z_hat2_p ] = newEsoObserverSecondStage( input )
    
    alpha = 2;
    w01 = 460/4;
    w02 = alpha*w01;
    b_hat = 1;
    L = [3*w02, 3*w02^2, w02^3]';

    z_hat2 = input(1:3);
    z_hat = input(4:6);
    u = input(7);

    Ao = [0 1 0;...
         0 0 1;...
         0 0 0];
    Bo = [0; -b_hat; 0];

    z_hat2_p = Ao*z_hat2 + Bo*u - Bo*1/b_hat*z_hat(3) + L*(z_hat(1) - z_hat2(1));
end


第三个:
在这里插入图片描述
名字是newEsoObserverThirdStage,输出维度为3维度。
其中newEsoObserverThirdStage.m文件为:

function [ z_hat3_p ] = newEsoObserverThirdStage( input )
    
    alpha = 2;
    w01 = 460/4;
    w02 = alpha*w01;
    w03 = alpha*w02;
    b_hat = 1;
    L = [3*w03, 3*w03^2, w03^3]';

    z_hat3 = input(1:3);
    z_hat = input(4:6);
    z_hat2 = input(7:9);
    u = input(10);

    Ao = [0 1 0;...
         0 0 1;...
         0 0 0];
    Bo = [0; -b_hat; 0];

    z_hat3_p = Ao*z_hat3 + Bo*u - Bo*1/b_hat*(z_hat(3)+z_hat2(3)) + L*(z_hat2(1) - z_hat3(1));
end


第四个:
在这里插入图片描述
名字是extendedStateSelectorN3,输出维度为3维度。
其中extendedStateSelectorN3.m文件为:

function [z_hat] = extendedStateSelectorN3(input)

z_hat_1 = input(1:3);
z_hat_2 = input(4:6);
z_hat_3 = input(7:9);

z_hat = [z_hat_3(1:2); z_hat_1(3)+z_hat_2(3)+z_hat_3(3)];
end


3:Process disturbance(扰动信号)

在这里插入图片描述
名字是processDisturbanceGenerator,输出维度为3维度。
其中processDisturbanceGenerator.m文件为:

哦,突然发现代码不见了,改天我重新写一份吧,不好意思啦

4:ADRC controller(ADRC控制器)

在这里插入图片描述
名字是adrc,输出维度为1维度。
其中adrc.m文件为:

function [u] = adrc(input)
    
    b_hat = 1;
    K = [2^2 2*2];

    z_hat = input(1:3);

    u = 1/b_hat*(z_hat(3)+K*z_hat(1:2));
end

5:Plant(研究模型)

在这里插入图片描述
其中Interpreted MATLAB Fcn模块:
在这里插入图片描述
名字是transferFunctionTimeVarying,输出维度为3维度。
其中transferFunctionTimeVarying.m文件为:

function [ out ] = transferFunctionTimeVarying( input )
    
    A = [0 1;...
    -1 -2];
    C = [1 0];

    x = input(1:2);
    u = input(3);
    t = input(4);
    
    B =[0  (1+0.2*tanh((t-2)))/(abs(x(1))+1)]';

    xp = A*x+B*u;

    out = xp;
end


四、噪声

在这里插入图片描述

五、仿真结果

单个三阶ESO

参考值和估计值:
在这里插入图片描述
u的值:
在这里插入图片描述

2个级联3阶ESO

参考值和估计值:
在这里插入图片描述
u的值:
在这里插入图片描述

3个级联3阶ESO

参考值和估计值:
在这里插入图片描述
u的值:
在这里插入图片描述

六、结论

这下就把所有的模块都介绍完了,我希望大家不要轻易问我要模型,自己搭建,不会的在评论区下面留言,我一天之内会解答

七、请大家仔细看程序含义

希望大家可以关注一下啦,或者点点赞,又或者打赏几块钱让我开心一下,哈哈哈!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/57858.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

做了几年“斜杠青年”,我在ZStack立志做国产云计算的研发

在浅黑科技《ZStack:这群做云的人有点“轴”》一文中,作者史中提到,这是一篇国产云计算佼佼者ZStack的创业史,文中记录了因为热爱而聚集起来的最早一批ZStacker,他们生活没有退路,但热爱未有止息。 实际上…

概率论与数理统计_第1章_几何概型

1 定义 若一个试验具有下列两个特征: (1)试验的所有可能结果是无限多个, 且全体结果可以用一个有度量的几何区域 Ω 来表示; (2)每个可能结果 都相同概率可能发生, 则该试验称为几何…

Pytorch:Torch数据类型学习整理与记录

文章目录前言一、Tensor数据类型简介Tensor数据类型是什么?Tensor数据类型有哪些指定调用的API生成相关数据类型dtype属性指定Tensor内置的简单数据类型二、Tensor数据类型的基本使用Tensor初始化基于list列表和nparrayTensor相关API基于指定Tensor类型进行初始化基于Randn生成…

postgres源码解析40 表创建执行全流程梳理--4

本文讲解非系统表的创建逻辑&#xff08;[<fontcolor0000dd>普通表和索引表]&#xff09;&#xff0c;其入口函数为heap_create&#xff0c;内部公共接口函数为RelationBuildLocalRelation和RelationCreateStorage相关知识回顾见&#xff1a; postgres源码解析38 表创建执…

Mac M1使用UTM安装centos7 x86_64虚拟机

一、环境说明 1. 宿主机环境 macbook m1 pro 16G 2. UTM版本 UTM是基于QEMU的系统模拟器和虚拟机主机&#xff0c;适用于iOS和macOS。 UTM is a full featured system emulator and virtual machine host for iOS and macOS. It is based off of QEMU. 最新版下载地址&…

带你玩转序列模型之NLP与词嵌入(二)

目录 一.Word2Vec 二.负采样 三.GloVe词向量 四.情绪分类 五.词嵌入除偏 一.Word2Vec 在上个视频中你已经见到了如何学习一个神经语言模型来得到更好的词嵌入&#xff0c;在本视频中你会见到 Word2Vec算法&#xff0c;这是一种简单而且计算时更加高效的方式来学习这种类…

用于 Python 降维的主成分分析

减少预测模型的输入变量数称为降维。 较少的输入变量可以产生更简单的预测模型&#xff0c;该模型在对新数据进行预测时可能具有更好的性能。 也许机器学习中最流行的降维技术是主成分分析&#xff0c;简称PCA。这是一种来自线性代数领域的技术&#xff0c;可用作数据准备技术…

耗时大半个月收整全套「Java架构进阶pdf」

花了我大半个月时间收整了全套的「Java架构进阶pdf」&#xff0c;这一波下来&#xff0c;刷完你就会知道&#xff0c;真真香啊&#xff0c;我的心血果然&#xff0c;没白费&#xff01; 请注意&#xff1a;关于全套的「Java架构进阶pdf」&#xff0c;我会从面试-筑基-框架-分布…

【Android App】实战项目之仿微信的视频通话(附源码和演示 超详细必看)

需要源码请点赞关注收藏后评论区留言私信~~~ 虽然手机出现许多年了&#xff0c;它具备的功能也越来越丰富&#xff0c;但是最基本的通话功能几乎没有变化。从前使用固定电话的时候&#xff0c;通话就是听声音&#xff1b;如今使用最新的智能手机&#xff0c;通话仍旧是听声音。…

无刷三相直流电机电动工具驱动方案设计

电动工具是一种工具&#xff0c;其致动通过附加的动力源和机构比仅其他手工劳动与使用手工工具&#xff0c;电动工具用于工业、建筑、花园、做饭、清洁等家务劳动&#xff0c;以及在房子周围用于驱动&#xff08;紧固件&#xff09;、钻孔、切割、成型、打磨、研磨、布线、抛光…

【微服务】Java agent 使用详解

一、前言 于一个即将上线的应用来说&#xff0c;系统监控是必不可少的&#xff0c;为什么需要监控呢&#xff1f;应用是跑在服务器上的&#xff0c;应用在运行过程中会发生各自意想不到的问题&#xff0c;像大家熟知的OOM&#xff0c;mysql故障&#xff0c;服务器宕机&#xff…

cubeIDE开发,基于已有的STM32CubeMX (.ioc)创建工程文件

一、STM32Cube 生态系统 可以在其官网查看&#xff0c;支持中文。 STM32Cube - Discover the STM32Cube Ecosystem - STMicroelectronics ​ 截取官网的STM32Cube家族的软件工具描述&#xff1a; 【1】STM32CubeMX, 面向任意STM32设备的配置工具。这款简单易用的图形用户界面为…

ubuntu根目录清理

0.防范于未然&#xff08;就像给window电脑清理垃圾&#xff09; 清理ubuntu用不上的东西的常用命令 # 系统自带清理命令 sudo apt-get autoclean sudo apt-get clean sudo apt-get autoremove# 查看目录占用空间 sudo du -cks * | sort -rn | head -10 sudo du --max-depth1…

[附源码]计算机毕业设计JAVA血库管理系统

[附源码]计算机毕业设计JAVA血库管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Ma…

Effective C++条款24:若所有参数皆需类型转换,请为此采用non-member函数

Effective C条款24&#xff1a;若所有参数皆需类型转换&#xff0c;请为此采用non-member函数&#xff08;Declare non-member functions when type conversions should apply to all parameters&#xff09;条款24&#xff1a;若所有参数皆需类型转换&#xff0c;请为此采用no…

Swift基础语法 - 枚举

枚举的基本用法 定义&#xff1a;枚举简单的说也是一种数据类型&#xff0c;只不过是这种数据类型只包含自定义的特定数据&#xff0c;它是一组有共同特性的数据的集合。 enum Direction {case northcase southcase eastcase west }enum Direction {case north,south,east,we…

数理统计笔记10:回归分析

引言 数理统计笔记的第10篇介绍了回归分析&#xff0c;从相关关系开始介绍&#xff0c;然后介绍回归分析&#xff0c;主要介绍了一元回归模型和多元回归模型&#xff0c;并对其中的原理和检验进行了叙述&#xff0c;最后简单介绍了一下可以化为线性回归模型的非线性回归模型。 …

【Gradle-5】Gradle常用命令与参数

1、前言 Gradle的命令有很多&#xff0c;熟悉常用命令之后&#xff0c;在日常开发中&#xff0c;不仅可以提升效率&#xff0c;也可以辅助我们快速定位并解决编译问题&#xff1b;而且某些情况下命令行(CLI)与按钮执行的编译结果是不一样的&#xff0c;比如构建时要传参(-P)&a…

大学生环保主题网页制作 环境网页设计模板 学生静态网页作业成品 dreamweaver保护地球环境HTML网站制作

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

【电商项目实战】上传头像(详细篇)

&#x1f341;博客主页&#xff1a;&#x1f449;不会压弯的小飞侠 ✨欢迎关注&#xff1a;&#x1f449;点赞&#x1f44d;收藏⭐留言✒ ✨系列专栏&#xff1a;&#x1f449;SpringBoot电商项目实战 ✨学习社区&#xff1a; &#x1f449;不会压弯的小飞侠 ✨知足上进&#x…