在控制系统设计或者是工程应用中,我们往往需要用到某个信号的导数量(微分信息),微分-跟踪器的应用可以很好地解决这个问题。
- 经典TD, 参考文献[1]
matlab 代码实现:
clear
close all
r=1000;
h=0.0001;
x1(1)=0;
x2(1)=0;
ts=0.0001;
for k=1:100000
time(k)=ts*k;
u(k)=sin(time(k));
x1(k+1)=x1(k)+ts*x2(k);
x2(k+1)=x2(k)+ts*fst(x1(k),x2(k),u(k),r,h);
end
x1(end)=[];
x2(end)=[];
figure();
plot(time,x1,'b--',time,sin(time),'k-.','linewidth',2);
grid on
% ylim([-10 4])
xlabel('Time(sec)','FontName','Times New Roman','FontSize',12,'FontWeight','bold')
% ylabel('Tracking performance','FontName','Times New Roman','FontSize',12,'FontWeight','bold')
h = legend('$x_1$','$sin$');
set(h,'Interpreter','latex','fontsize',14,'FontName','Times New Roman','fontweight','bold')
set(gca,'FontWeight','bold','fontsize',14,'FontName','Times New Roman')
figure();
plot(time,x2,'b--',time,cos(time),'k-.','linewidth',2);
grid on
% ylim([-10 4])
xlabel('Time(sec)','FontName','Times New Roman','FontSize',12,'FontWeight','bold')
% ylabel('Tracking performance','FontName','Times New Roman','FontSize',12,'FontWeight','bold')
h = legend('$x_2$','$cos$');
set(h,'Interpreter','latex','fontsize',14,'FontName','Times New Roman','fontweight','bold')
set(gca,'FontWeight','bold','fontsize',14,'FontName','Times New Roman')
function y=fst(x1,x2,u,r,h)
deta=r*h;
deta0=deta*h;
y=x1-u+h*x2;
a0=sqrt(deta^2+8*r*abs(y));
if abs(y)<=deta0
a=x2+y/h;
else
a=x2+0.5*(a0-deta)*sign(y);
end
if abs(a)<=deta
y=-r*a/deta;
else
y=-r*sign(a);
end
跟踪效果展示:
- 快速高阶滑膜TD,参考文献[2]
两者对比:
- 高级滑模TD可以实现快速跟踪,收敛速度比经典TD法快。
- 经典TD法对所选取的采样时间“h”很敏感。如果采样时间大或者小都会影响最后的仿真效果,主要表现在是否有很大的超调、是否能够较快的跟踪。
[1]. 张海丽, 张宏立. 微分跟踪器的研究与应用[J]. 化工自动化及仪表, 2013, 40(4):474-477.
[2]. Arie Levant. Higher-order sliding modes, differentiation and output-feedback control[J]. International Journal of Control, 2003, 76(9-10):924-941.