在这里先声明一下,级联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的值:
六、结论
这下就把所有的模块都介绍完了,我希望大家不要轻易问我要模型,自己搭建,不会的在评论区下面留言,我一天之内会解答