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


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

    一、论文介绍

    扩展状态观测器(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
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    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
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    第二个是:
    在这里插入图片描述
    名字是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
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    第三个是:
    在这里插入图片描述
    名字是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
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    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
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    第二个是:
    在这里插入图片描述
    名字是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
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    第三个:
    在这里插入图片描述
    名字是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
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    第四个:
    在这里插入图片描述
    名字是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
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3:Process disturbance(扰动信号)

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

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

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    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
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    四、噪声

    在这里插入图片描述

    五、仿真结果

    单个三阶ESO

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

    2个级联3阶ESO

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

    3个级联3阶ESO

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

    六、结论

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

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

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

  • 相关阅读:
    ssm日常项目中问题集合
    火山引擎ByteHouse联合Apache Airflow,让数据管理更加高效
    【Uniapp小程序】自定义导航栏uni-nav-bar滚动渐变色
    渗透测试-xss的三种类型讲解
    基于SSH的医院在线挂号系统设计与实现
    RocketMq消息中间件测试实战-消息重复如何测试
    【Shell脚本 6】日常巡检脚本-1
    zookeeper 常见问题处理
    Java注解详解和自定义注解实战,用代码讲解
    你会自动化测试吗?不要再自欺欺人了
  • 原文地址:https://blog.csdn.net/weixin_44312889/article/details/128164437