ADRC最优综合函数fhan函数测试
fhan函数是ADRC的跟踪微分控制器的核心函数,使得状态变量可以快速跟踪上系统输入。
本例中,设理想输入v=sin(t);用状态变量x1跟踪输入,x2跟踪输入的导数dv,设计matlab程序以及仿真结果如下所示:
fhan函数定义:
function fh=fhan(x1,x2,r0,h0)
d=r0*h0*h0;
a0=h0*x2;
y=x1+a0;
a1=sqrt(d*(d+8*abs(y)));
a2=a0+sign(y)*(a1-d)/2;
sy=(sign(y+d)-sign(y-d))/2;
a=(a0+y-a2)*sy+a2;
sa=(sign(a+d)-sign(a-d))/2;
fh=-r0*(a/d-sign(a))*sa-r0*sign(a);
fhan函数验证fhan_test.m
clc
clear all
close all
%最速综合函数fhan函数测试以及验证结果
h=0.001;
h0=10*h;
r0=20;
num=1;
den=[1 1 1];
[A,B,C,D]=tf2ss(num,den);
tend=10;
t=0:h:tend;
v=sin(t);
dv=cos(t);
x1=zeros(tend/h,1);
x2=zeros(tend/h,1);
for k=1:1:tend/h
fh=fhan((x1(k)-v(k)),x2(k),r0,h0);
x1(k+1)=x1(k)+h*x2(k);
x2(k+1)=x2(k)+h*fh;
end
%%
figure(1)
plot(t,v,'r--',t,x1,'b-','linewidth',2)
xlabel("时间t/s")
ylabel("v,x1")
legend("v","x1")
grid on
figure(2)
plot(t,dv,'r--',t,x2,'b-','linewidth',2)
xlabel("时间t/s")
ylabel("dv,x2")
legend("dv","x2")
grid on
%%
figure(3)
x11=x1';
plot(t,v-x1','r-','linewidth',2)
axis([0,10,-1,1])
仿真结果图
误差曲线如图所示:
结果验证
该函数实现了x1快速无超调地跟踪输入信号v,而x2作为v的近似微分,跟踪过程的微分信号。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)