全网最通俗易懂自抗扰控制(ADRC)设计与实例讲解,下载!!——文献理解与matlab&simulink实例设计(Active Disturbance Rejection Control)[通俗易懂]

全网最通俗易懂自抗扰控制(ADRC)设计与实例讲解,下载!!——文献理解与matlab&simulink实例设计(Active Disturbance Rejection Control)[通俗易懂]clc;clearall;closeall;%运行时间time=10;%仿真步长h=0.01;%时间定义t=0.01:h:time;%跟踪信号v0=zeros(1,time/h);fori=time/h/2+1:time/hv0(i)=1;endrand_noise=0.05*randn(1,time/h);%加入随机噪声vn=v0+rand_noise;%–…

大家好,又见面了,我是你们的朋友全栈君。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

clc;
clear all;
close all;
%运行时间
time = 10;
%仿真步长
h = 0.01;
%时间定义
t  =0.01 : h : time;
%跟踪信号
v0 = zeros( 1 , time/h);
for i = time/h/2+1 : time/h
v0(i) = 1;
end
rand_noise = 0.05 * randn(1 , time/h);
%加入随机噪声
vn = v0 + rand_noise;
%----------------------ADRC--------------------------%
%%
%--参数初始化--%
%跟踪微分器参数
r = 100;%r表示跟踪快慢
h0 = 5 * h;%h0代表信号平滑度(滤波效果)
v1_last = 0;
v2_last = 0;
v0_last = 0;
%扩张状态观测器参数
beta01 = 10;
beta02 = 200;
beta03 = 30;
alpha1 = 0.5;%文献里给了值,就别动了
alpha2 = 0.25;%文献里给了值,就别动了
delta = 0.0025;
b=1;
z1_last = 0;
z2_last = 0;
z3_last = 0;
%非线性误差反馈
nlsef_alpha1 = 0.7;
nlsef_alpha2  = 1;
%被控对象初始化
temp_y=[0.5 ; 0];
u_last= 0 ;
%%
%--ADRC正式开始--%
for k=1 : time/h
%第一轮迭代的处理
%两个参数分别为控制量和当前时间
parameter1 = u_last;
parameter2 = k * h;
tSpan=[0 h];
%利用龙格库塔法求解微分方程
[~,total_y] = ode45('plant',tSpan,temp_y,[],parameter1,parameter2);
%total_state里的元素都是龙格库塔一点点计算的结果,直接用最后一列,即计算结果即可
temp_y = total_y(length(total_y),:);
%记录下输出和输出的微分值
y(k) = temp_y(1);
dy(k) = temp_y(2);
%--跟踪微分器TD--%
v1(k) = v1_last + h * v2_last
v2(k) = v2_last + h * fst(v1_last - vn(k) , v2_last , r , h0);
%     v2(k) = v2_last + deltaT * fst(v1_last - v0(k) , v2_last , r , h0);
x3(k) = -v1_last^2;
v1_last = v1(k);
v2_last = v2(k);
%     v0_last = v0(k);
v0_last = vn(k);
%--扩张状态观测器ESO--%
e = z1_last - y(k);
z1(k) = z1_last + h * (z2_last - beta01 * e);
z2(k) = z2_last + h * (z3_last - beta02 * (fal(e , alpha1 , delta)) +b * u_last);
z3(k) = z3_last - h * beta03 * (fal(e , alpha2 , delta));
z1_last = z1(k);
z2_last = z2(k);
%--非线性误差反馈NLSEF--%
e1(k) = v1(k) - z1(k);
e2(k) = v2(k) - z2(k);
%使用非线性误差反馈,其实就是非线性的PID
u0(k) = beta01 * fal(e1(k) , nlsef_alpha1 , delta) + beta02 * fal(e2(k) , nlsef_alpha2 , delta);
u(k) = u0(k) - z3(k)/b;
u_last = u(k);
%     %%
%     %--可对比PD控制器--%
%     u(k) = kp * e1(k) + kd * e2(k);
%     u_last = u(k);
end
figure(1);
plot(t,u,'r');
figure(2);
subplot(311);
% plot(t,z1,'r',t,y,'k:',t,v0,'b','linewidth',2);
plot(t,z1,'r',t,y,'k:',t,vn,'b','linewidth',2);
xlabel('time(s)'),ylabel('z1,y');
legend('估计输出信号', '实际输出信号');    
subplot(312);
plot(t,z2,'r',t,dy,'k:','linewidth',2);
xlabel('time(s)'),ylabel('z2,dy');
legend('估计输出微分信号', '实际输出微分信号');    
subplot(313);
plot(t,z3,'r',t,x3,'k:','linewidth',2);
xlabel('time(s)'),ylabel('z3,x3');
legend('估计扰动', '实际扰动'); 
%%
%---------------------------函数部分-----------------------------%
%sat函数
function y=sat(a,d)
if abs(a)<=d
y=a/d;
else
y=sgn(a);
end
end
%符号函数
function y=sgn(x)
if x>0
y=1;
elseif x<0;
y=-1;
else 
y=0;
end
end
%fst函数
function fn=fst(x1,x2,r,h)
d=h*r;
d0=h*d;
y=x1+h*x2;
a0=sqrt(d^2+8*r*abs(y));
if abs(y)<=d0
a=x2+y/h;
else
a=x2+0.5*(a0-d)*sgn(y);
end
fn=-r*sat(a,d);
end
%fal函数
function y=fal(e,alpha,delta)
if abs(e)>delta
y=abs(e)^alpha*sign(e);
else
y=e/(delta^(1-alpha));
end
end
% %-----------------------------------------------------------------%

在这里插入图片描述

%%
%系统方程----------------可以尝试多种龙格库塔的写法,把这个函数搞清楚,先照写
function dy = PlantModel(t,y,flag,p1,p2)
%第一个参数:控制量
u=p1;
%第二个参数:当前时间
time=p2;
%初始化2*1的向量
dy=zeros(2,1);
%方程
dy(1)=y(2);
dy(2)=-y(1)^2+u;
end

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

%--参数初始化--%
h = 0.01;
%跟踪微分器参数
r = 100;%r表示跟踪快慢
h0 = 5 * h;%h0代表信号平滑度(滤波效果)
v1_last = 0;
v2_last = 0;
v0_last = 0;
%扩张状态观测器参数
beta01 = 100;
beta02 = 200;
beta03 = 300;
alpha1 = 0.5;%文献里给了值,就别动了
alpha2 = 0.25;%文献里给了值,就别动了
delta = 0.0025;
b=1;
z1_last = 0;
z2_last = 0;
z3_last = 0;
%非线性误差反馈
nlsef_alpha1 = 0.7;
nlsef_alpha2  = 0.95;

在这里插入图片描述

%sat函数
function y=sat(a,d)
if abs(a)<=d
y=a/d;
else
y=sgn(a);
end
end

在这里插入图片描述

%符号函数
function y=sgn(x)
if x>0
y=1;
elseif x<0;
y=-1;
else 
y=0;
end
end

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
鉴于有相当多的人问我要ADRC的simulink文件,我就直接丢一个百度云盘的链接啦,点个赞再走嘻嘻!

链接:https://pan.baidu.com/s/1d5x1jIekg-NVAIixeWeHIg
提取码:nfgg
复制这段内容后打开百度网盘手机App,操作更方便哦

作于:
2020-11-7
9:29

修改于:
2020-12-4
1:09
修改内容:添加ADRC的simulink下载链接。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/144242.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • prototype.js的系列文章——关于prototype.js

    prototype.js的系列文章——关于prototype.js 很早就知道prototype.js是一个javascript的工具函数库,平时的开发中使用频率也非常的高,但是,由于工作时间问题,一直都没有静下心来研究学习一下,最近又萌发了系统学习prototype.js的念头,刚好手头比较闲,就决定边学习边将学习心得记录下来,以和更多的同仁交流分享。关于prototype.js如果你曾经使用过prototype.js,那么,本系列文章希望能够给你提供

  • linux安装p12,用命令行安装mobileprovision和p12证书

    linux安装p12,用命令行安装mobileprovision和p12证书我这边使用python来编写的,基本达到了最大化程度的解耦,其他人或者其他地方都可以直接使用。先创建installMobileProfile.py#!/usr/bin/python#-*-coding:UTF-8-*-importsysimportcommandsimportosparamsCount=len(sys.argv)if(paramsCount!=5):prin…

  • oracle字段精度修改,oracle number类型增加精度

    oracle字段精度修改,oracle number类型增加精度oracle迁移到sqlserver时,报错-如下图,查找原因,发现是因为有些表number类型没有设精度导致的,解决方法如下,修改表结构加上精度,加上之后就可以了。考虑到有些表有多个字段没有设精度,所以采取以下方式实现。–split函数createorreplacetypetype_splitastableofvarchar2(4000);/createorreplace…

  • idea全局搜索找不到问题

    idea全局搜索找不到问题今天在使用idea全局搜索的时候,发生了存在关键字,但搜索不到的问题这里,解决方法:清楚缓存[File]-&gt;[InvalidateCaches]除此之外,查阅其他资料,发现jdk不生效也可用次方法解决。如果帮助到你,麻烦点个赞~十分感谢…

  • windows下OpenCV安装教程(小白教程)

    windows下OpenCV安装教程(小白教程)OpenCV介绍OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和MacOS操作系统上。它轻量级而且高效——由一系列C函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV目前主要用C++语言开发,它的主要接口也是C++语言封装,但是依然保留了大量的C语言接口。该库也有大量的Python、Javaand

  • 电驴服务器图标显示叉叉,2012年6月最新电驴服务器列表及设置方法

    电驴服务器图标显示叉叉,2012年6月最新电驴服务器列表及设置方法最新的电驴服务器,使用电骡的朋友都很熟悉了,将下载文件解压到X:\eMule\config目录下(config目录位置需视实际情况定,请参考:http://emulefans.com/shared-usage/),重启eMule即可完成更新。由于网络环境不佳,需要不开迷惑协议才可以顺利连接某些大型ed2k服务器。(万不得已的情况下才需要,比如实在无法连接服务器)转自:http://www.qvo…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号