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

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

一、论文介绍

扩展状态观测器(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的值:
在这里插入图片描述

六、结论

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

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

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

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值