一。限幅滤波

方法:确定数据偏差的最大值MAX;求每次采样数据与上一次数据之差,若<=MAX则有效,若无效,则用上一次数据代替此次数据。

适用:有脉冲干扰的情形,无法抑制周期性干扰,平滑度差。

代码

二。限幅平均滤波

方法:每次通过的数据先限幅滤波后再使用;取平均值。

适用:消除脉冲干扰,随机干扰,占用RAM资源较多。

 

代码

三。中位值滤波

方法:连续采样N次,按大小排列;取中间值。

适用:克服波动干扰,对变化缓慢的参数比较良好,不适用于速度变化快的参数。

代码

四。中位值平均滤波

方法:采样N个值,去掉最大最小,计算平均值。

适用:克服波动干扰(中位),随机误差(平均),脉冲干扰(限幅)。占用RAM资源较多。

代码

五。算术平均滤波

方法:连续采样取平均值。

适用:采样数量较大时平滑度高、灵敏度低;数量少时平滑度低、灵敏度高。适用于存在随机干扰的情况,占用RAM资源较多。

代码

六。递推平均滤波

方法:取N个值,形成队列,先进先出,取平均值。

适用:随机干扰的系统,占用RAM较多。

 

七。加权平均递推滤波

方法:对不同时刻采样的数据加以不同的权重,如越新的数据权重越大,这样灵敏度比较高,但平滑度低。

适用:如果以后进数据权重较大,那么适用于滞后系统、采样周期短系统,对变化慢的信号不能迅速反应。

代码

 

八。一阶滞后滤波(低通滤波)

方法:在本次采样数据和上次数据之间分配不同的信任度(信任度从0到1),也可以是观测数据和你理论计算数据之间分配不同的信任度。

适用:适用于干扰频率较高的场合,但灵敏度低,相位滞后。

代码

九。限幅消抖滤波

方法:对采样的数据先进行限幅。将采样值和当前值比较,若采样值=当前值,则计数器清零,若采样值不等于当前值,则计数器加一。最终若计数器溢出,则用采样值替换当前值,计数器清零。

适用:适用于变化慢的数据,不适用于变化快的数据,避免脉冲干扰(限幅)。

代码

十。卡尔曼滤波        卡尔曼滤波的思路就是调整Q和R的参数值(和PID类似)

适用系统:线性高斯系统(将噪声的分布看成正态分布)。

方法:在理论计算值和观测值之间分配信任度(信任度A从0到1)。

          用上一次的最优结果得到理论计算的当前值,同时使用观测值修正当前值,得到最优结果。

我们把用上一次的最优结果得到理论计算的当前值的过程用状态方程来表示:

其中Wk为状态方程噪声(如环境的随机干扰,场面粗糙程度等),满足正态分布:

我们把使用观测值修正当前值的过程用观测方程来表示:

其中Vk为观测方程噪声(传感器返回的噪声),满足正态分布:

卡尔曼滤波的思路就是调整Q和R的参数值(和PID类似),从而让最终结果变得很好。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐