跳到主要内容
版本:1.10.19_build_2024.5.22.17.56

滤波器

一、背景

如果接收到的报文没有经过滤波处理,波动性很强,直接将报文值解析赋值给相应Tag,会直接导致显示效果不佳例如指针跳动频繁的问题。滤波器工具可以较好的解决这个问题。

滤波器中引入了阻尼算法,阻尼算法是一种常见运动模型,实现类似机械仪表的视觉效果。IDE的滤波器支持一阶阻尼、二阶阻尼和线性阻尼算法。

二、原理

2.1 阻尼算法原理

输出量不会随着输入量立即变化,而是经过特定时间逐渐到达新值,例如指针在输入信号变化的时候不会立即转动到输入信号值处,而是有一个逐步移动到位置的过程,这样一来如果输入信号来回跳跃波动,则指针可以保持稳定。

2.2一阶阻尼算法

算法的输入输出模型如下图示:

根据上一次实际值Xaold(上一时刻显示值)和输入值Xe,以及参数k,计算出当前时刻应该显示的值Xa。 输出结果的曲线如下,k值越大,逼近的越慢:

2.3二阶阻尼算法

二阶阻尼是做了2次一阶阻尼算法的操作,两个参数k可单独设置。算法输入输出模型如下:

输出结果的曲线如下,二阶阻尼的渐变过程比一阶阻尼更平滑:

2.4线性阻尼算法

线性阻尼的运动模型很简单,就是一个线性的过程,每次逼近的步长和一次逼近的周期都可以调整,实现逼近速度的调整。线性阻尼实用性强,而且一二阶阻尼的末端都是用线性阻尼替代。

三、滤波器参数设置

滤波器中有三种阻尼算法可选。在属性栏变量标签下点击添加滤波器,弹出滤波器设置窗。

3.1一阶阻尼(PT1)

一阶阻尼的后端定义如下,其中有些是系统参数不需要用户设置:

在ide界面需要用户设置的参数包括以下

mK - K 阻尼参数,是大于1的整数。用于调整阻尼运动的速度。

mThreshold - Threshold 阈值,由于一阶阻尼算法后端斜率过小,逼近很慢,所以后段直接用线性阻尼替代,当前值和目标值的差小于阈值时,系统自动用线性阻尼代替一阶阻尼。如果发现最后无法逼近,比如目标车速值为80,但是滤波后最终结果只能到75就上不去了,那么可以尝试将阈值调整至大于5。

mStep - Step 后段线性阻尼的step,代表线性的斜率,一般为1,但是为了满足如转速8000这种数量级的参数,例如从6000-8000,可能需要每次自增10加快速度,mStep就需要设置成10。

mDelayMax - Delay 计数器上限,也代表后段线性的斜率,为了解决mStep设置成1也过快的需求,例如需要从10增加至15,每8次运算才加1,则mStep设置成1,mDelayMax设置成8。

Frequence: 阻尼滤波频率,即每秒对该值连续滤波多少次。

Duration: 阻尼滤波时长,单位ms。

3.2二阶阻尼(PT2)

二阶阻尼的后端定义:

在ide界面需要用户设置的参数包括以下:

mK1 - K1 阻尼参数,大于1的整数。用于调整阻尼运动的速度。

mK2 - K2 阻尼参数,大于1的整数。用于调整阻尼运动的速度。

mThreshold - Threshold 阈值,与一阶阻尼类似,在算法后端斜率过小,逼近很慢,当前值和目标值的差小于阈值时用线性阻尼代替。

mStep - Step 后段线性阻尼的step,代表线性的斜率,一般为1,但是为了满足如转速8000这种数量级的参数,例如从6000-8000,可能需要每次自增10加快速度,mStep就需要设置成10。

mDelayMax - Delay 计数器上限,也代表后段线性的斜率,为了解决mStep设置成1也过快的需求,例如需要从10增加至15,每8次运算才加1,则mStep设置成1,mDelayMax设置成8。

Frequence: 阻尼滤波频率,即每秒对该值连续滤波多少次。

Duration: 阻尼滤波时长,单位ms。

3.3线性阻尼(Linear)

线性阻尼的后端定义:

在ide界面需要用户设置的参数包括以下:

mStep - Step 线性阻尼的step,代表线性的斜率,一般为1,但是为了满足如转速8000这种数量级的参数,例如从6000-8000,可能需要每次自增10加快速度,mStep就需要设置成10。

mDelayMax - Delay 计数器上限,代表线性的斜率,为了解决mStep设置成1也过快的需求,例如需要从10增加至15,每8次运算才加1,则mStep设置成1,mDelayMax设置成8。

Frequence: 阻尼滤波频率,即每秒对该值连续滤波多少次。

Duration: 阻尼滤波时长,单位ms。

四、滤波器应用举例

我们以最常用的线性阻尼为例,对滤波器进行如下参数设置:

选择一个变量,启用寄存器,启用滤波器。

为直观显示,将变量与数字、进度条控件绑定。在调试界面,修改变量值,可以看到数字和进度条从初始值逐渐变化到输入值。

当前参数设置下,滤波器只能实现初始值和目标值在50以内的滤波,如果初始值为0,目标值为100,则滤波器只能逼近到50,这时就需要对滤波器参数进行修改,实现预期显示效果。