线性跟踪微分器介绍:
线性跟踪微分器出自自抗扰控制ADRC,线性跟踪微分器有两个作用,一是可以用来滤波,而是可以用来求取输入的微分。这里有一篇文章可以推荐看看:
https://blog.csdn.net/qq_35007540/article/details/87909764
这里我想再次根据此微分器的定义来重新编写验证一下。
以线性TD为例,连续系统的状态空间形式为
其中
是滤波后的输入,而
为滤波后输入的微分。
将其转化为传递函数形式为
显然线性TD的本质其实就是一个阻尼比为1的标准二阶系统,并且没有任何零点。事实上,线性TD的推导与理解过程非常简单,对于一个标准的二阶系统,将其写成状态空间的形式,其中的两个状态就分别对应为滤波后的输入以及滤波后输入的微分。线性跟踪微分器的本质是两个一阶惯性环节
对应程序编写时的推导
上图是以位移-速度-加速度的概念来带入微分器的公式,以便于理解
Matlab验证:
%*************************************************************************%
%计算全阶观测器矩阵L的参数
%**********************************************************************%
clc;
clear;
%定义一个数组存储时间
Ts = 0.0001; % 离散周期0.01秒
FinalT = 1; %终止时间
t = Ts : Ts : FinalT; % 1k
y = zeros(1,(FinalT / Ts)); %位移
y1_Real = zeros(1,(FinalT / Ts)); %位移
y2_Real = zeros(1,(FinalT / Ts)); %位移
x = zeros(1,(FinalT / Ts)); %位移
x_temp = 0;
v_temp = 0;
a_temp = 0;
v = zeros(1,(FinalT / Ts)); %速度
a = zeros(1,(FinalT / Ts)); %加速度
r = 100.5;
%计算 y = t^2 的图像
for i = 1 : 1 : (FinalT / Ts)
y(i) = t(i) * t(i) * t(i);
y1_Real(i) = 3 * t(i) * t(i);
y2_Real(i) = 6 * t(i);
a_temp = - r * r * (x_temp - y(i)) - 2 * r * v_temp;
v_temp = v_temp + a_temp * Ts;
x_temp = x_temp + v_temp * Ts;
x_temp - y(i) = ((x_temp - y(i)) > M_PI)?(x_temp - y(i) - M_TWO_PI): x_temp - y(i)
x_temp - y(i) = ((x_temp - y(i)) < -M_PI)?(x_temp - y(i) +M_TWO_PI): x_temp - y(i)
if a_temp > 20
a_temp = 20;
end
if a_temp < -20
a_temp = -20;
end
if v_temp > 20
v_temp = 20;
end
if v_temp < -20
v_temp = -20;
end
x(i) = x_temp;
a(i) = a_temp;
v(i) = v_temp;
end
subplot(2,3,1),plot(t,y); %函数图像
grid on;
title("y = t^3 图像");
subplot(2,3,2),plot(t,y1_Real); %函数图像
grid on;
title("y1_Real 图像");
subplot(2,3,3),plot(t,y2_Real); %函数图像
grid on;
title("y2_Real 图像");
subplot(2,3,4),plot(t,x); %函数图像
grid on;
title("y图像");
subplot(2,3,5),plot(t,v); %函数图像
grid on;
title("v图像");
subplot(2,3,6),plot(t,a); %函数图像
grid on;
title("a图像");
上图中,上半部分是真实的 y=t^3 函数的图像,以及其微分与二次微分图像,下图是使用线性跟踪微分器求解出来的其微分与二次微分图像。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)