(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
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
Vue级联选择器使用v-model来实现双向数据绑定。v-model指令在内部使用了value和input事件,使得父组件能够通过v-model来控制子组件的值,并且子组件的值的变化也可以反馈给父组件。 在级联选择器的父组件中,你可以使用v-model来绑定一个变量,这个变量将会被用来存储当前所选的值。例如: ```html <template> <div> <cascade-selector v-model="selectedValue"></cascade-selector> </div> </template> <script> import CascadeSelector from './CascadeSelector.vue'; export default { components: { CascadeSelector }, data() { return { selectedValue: '' }; } } </script> ``` 在子组件CascadeSelector中,你可以使用props接收父组件传递的值,并在选择发生变化时,通过$emit('input', value)来触发父组件的input事件,从而更新父组件的数据。例如: ```html <template> <div> <select v-model="selected" @change="handleChange"> <option value="">请选择</option> <option v-for="item in options" :value="item.value" :key="item.value">{{ item.label }}</option> </select> </div> </template> <script> export default { props: ['value'], data() { return { selected: '' }; }, computed: { options() { // 返回级联选择器的选项数据 } }, mounted() { // 初始化选中值 this.selected = this.value; }, methods: { handleChange() { this.$emit('input', this.selected); } } } </script> ``` 这样,父组件和子组件之间就建立了双向数据绑定,父组件中的selectedValue会随着子组件的选择发生变化而更新。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值