一阶滤波的概念
在MPC或者一些其它控制器中会经常使用到一阶滤波,一阶滤波可以提高控制的品质。
例如我们在使用PID控制时:
1.首先可以对PID的设定值(目标值)进行一阶滤波,使其控制过程柔化,避免阶跃的设定值使得系统控制作用过于激进,导致产生超调。
2.其次我们可以对系统的测量值(反馈值)进行一阶滤波,避免测量噪声或者测量波动导致控制器作用过于频繁。
一阶系统的传递函数
这里的就是时间常数,这个系统的阶跃响应长这样(假设这里的时间常数为
=10 )
简单的说,四倍左右的时间常数就是系统的稳定时间(setting time,系统的输出为收敛值的98%),对应上面例子, =10 的系统的稳定时间大约为40秒左右。
有了基本的概念后,这个一阶滤波其实就是把当前值看作一阶对象阶跃响应的起点(零点),把期望值看作是阶跃响应的稳态值。
具体而言,如果要做的是测量值滤波(降噪),在每一采样时间,滤波值可以表示为
其中 为滤波值,
为实测值,这也可以理解作是在数据融合的过程,将之前的滤波值和当前的测量值进行融合,从而起到滤波的作用,送给控制器的
而不再是
了。再举个例子,比如上一时刻的滤波值为0,当前时刻的实测值为1,期望的滤波时间常数为10,采样时间为1,则当前时刻的滤波值为
所以,测量值做一阶滤波其实就是在上一时刻滤波值和当前测量值构造的阶跃响应上往前走1步。比如对连续200s的噪声滤波一下看看效果
y = rand(200,1);
y_f = zeros(200,1);
for i = 1:200
if i == 1
y_f(i) = y(i);
else
y_f(i) = exp(-1/10)*y_f(i-1) + (1- exp(-1/10))*y(i);
end
end
plot(y)
hold on
plot(y_f)
legend('实测值','滤波值')
接下来再来看看一阶滤波用来做设定值的柔化的效果,设定值柔化在MPC的实际应用很常见,因为MPC的目标函数中是包含预测输出与设定值的偏差项的,因此可以直接将整条柔化轨迹放进目标函数中去。
举个例子,在当前时刻进行设定值切换,比如从0变到10,一个较大的设定值变化会导致MPC的误差项很大,此时控制器会计算出较大的控制作用来降低这个输出偏差,这样往往会造成系统的超调。
因此可以将阶跃的设定值变成一条柔化轨迹送入MPC去跟踪,也就是构造当前测量值(滤波值)到设定值的一阶曲线
这里的时间常数 就可以理解为你期望的这个设定值跟踪快慢,比如时间常数为10,就是希望40s左右能够跟踪到设定值。然后将柔化轨迹
(注意这是个向量)送给MPC跟踪,而不是直接用
⋅1 送给MPC。从上面的示意图也可以看到,没有柔化轨迹的二次惩罚(绿色部分)是很大的,柔化后就变小了,也能够让控制作用更加地温柔。