韩京清老师所写的《自抗扰控制技术》中,介绍了跟踪微分器的设计过程,下面就把数学原理和代码来详细记录跟踪微分器的设计过程。
跟踪微分器的作用就是从被噪声污染的信号中合理的提取微分信号。
(1)一般的跟踪微分器
传统的微分信号是用如下的微分环节来得到的:

传统微分器

所得到的结果如下图:
在这里插入图片描述

下面是代码的实现过程,对正弦信号求微分:

clear all;
h=0.001;
T=0.001;
time = 20;
N = time/T;
n=0:N-1;
x = sin(n*T);

for k=1:1:N
    xDelay(1)=0;
    
    y(k) = (x(k)-xDelay(k))/T;
    xDelay(k+1) = xDelay(k) + h*(x(k)-xDelay(k))/T;
end
plot(n*T,x,n*T,y);

得到的结果如下:
在这里插入图片描述

改进的跟踪微分器

其所对应的仿真图如下所示。
改进的跟踪微分器仿真图

下面是代码:

clear all;
h=0.001;
T=0.001;
tau1=0.01;
tau2=0.02;
time = 20;
N = time/T;
n=0:N-1;
x = sin(n*T);

for k=1:1:N
    x1(1) = 0;
    x2(1) = 0;
    x1(k+1) = x1(k)+h*x2(k);
    x2(k+1) = x2(k)-h*((x1(k)-x(k))/tau1/tau2+(tau1+tau2)*x2(k)/tau1/tau2);
    y(k) = x2(k);
end
plot(n*T,x,n*T,y);

实现的结果如下图:
在这里插入图片描述
如果对这两个微分器分别加上噪声的话,再来比较谁的微分效果更好,代码如下:

clear all;
h=0.001;
T=0.001;
tau1=0.01;
tau2=0.02;
time = 20;
N = time/T;
n=0:N-1;
x = sin(n*T);
noise=-1+2*rand(1,N);% add noise[-1,1]
x = x+0.01*noise;% gain is 0.01

for k=1:1:N
    x1(1) = 0;
    x2(1) = 0;
    x1(k+1) = x1(k)+h*x2(k);
    x2(k+1) = x2(k)-h*((x1(k)-x(k))/tau1/tau2+(tau1+tau2)*x2(k)/tau1/tau2);
    y(k) = x2(k);
end
plot(n*T,x,n*T,y);

仿真图如下:
在这里插入图片描述

而传统的微分器的效果如下:
在这里插入图片描述

两者的对比已经非常明显了。(我也不清楚怎么差别这么大,是噪声幅度太大了吗)