算术平均滤波法
算术平均滤波法
A方法: 连续取N个采样值进行算术平均运算,N值较大时:信号平滑度较高,但灵敏度较低;N值较小时:信号平滑度较低,但灵敏度较高。N值的选取:一般流量,N=12;压力:N=4。
B优点: 适用于对一般具有随机干扰的信号进行滤波,这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动。
C缺点:
对于测量速度较慢或要求数据计算速度较快的实时控制不适用,比较浪费RAM 。 无需每次求一编所有的和,减去第一个数据加上新数据
入门stm32用的ADC采集,就是用算术平均滤波先采集20次求平均。
————————————————
版权声明:本文为优快云博主「静思心远」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/zhiyuan2021/article/details/109157029
递推平均滤波法(又称滑动平均滤波法)
A、方法:
把连续取 N 个采样值看成一个队列
队列的长度固定为 N
每次采样到一个新数据放入队尾, 并扔掉原来队首的一次数据.(先进先出原则)
把队列中的 N 个数据进行算术平均运算, 就可获得新的滤波结果
N 值的选取:流量,N=12;压力:N=4;液面,N=4~~12;温度,N=1~4
B、优点:
对周期性干扰有良好的抑制作用,平滑度高
适用于高频振荡的系统
C、缺点:
灵敏度低
对偶然出现的脉冲性干扰的抑制作用较差
不易消除由于脉冲干扰所引起的采样值偏差
不适用于脉冲干扰比较严重的场合
比较浪费 RAM
一阶滞后滤波法
A、方法:
取 a=0~1
本次滤波结果 =(1-a)* 本次采样值 + a * 上次滤波结果
a的取值范围是不大于1的分数。其他人的文章a设置成100,我觉得不对会溢出,且不会逼近采样值。谁验证了可以在评论告诉我能否a为100。
B、优点:
对周期性干扰具有良好的抑制作用
适用于波动频率较高的场合 C、缺点:
相位滞后,灵敏度低
滞后程度取决于 a 值大小
不能消除滤波频率高于采样频率的 1/2 的干扰信号
————————————————
版权声明:本文为优快云博主「炒番茄蛋的厨子」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/qq_40862304/article/details/115182152
「静思心远」的原创文章一阶滞后滤波的写法:
#define FIRST_LAG_PROPORTION 0.4
float first_order_lag_filter( float new_value)
{
static float first_order_value , first_order_last_value;
first_order_value = first_order_last_value;
first_order_last_value = new_value;
return (1 - FIRST_LAG_PROPORTION) * first_order_value + FIRST_LAG_PROPORTION * new_value;
}
我用的写法1:这个写法与如上原理接近,但晦涩难懂。可以看写法二
/*采集的ADC都存在ad【5】数组里面,a=0.9,1-a=0.1*/
static u16 ad5_average=0;static u32 sum[6];
sum[5] += ad[5];//采集到就累加到
ad5_average = sum[5]*0.1; //每次都采样和的0.1
sum[5] -= ad5_average;//采样和的0.9,再累加到采样和
假设ad[5]采集到的都为100,a
数学公式分析:
得到如上公式:RBi=RBi-10.9+1000.1,分析为递增,并且有限。这利用到高数分析。假设i为无穷时,极限为A:A=A*0.9+10得到 A为100,也就是RBi极限值为100,也就是逼近极限值。
我的写法二:是按照原理的标准写的,没有多余。
/*采集的ADC都存在ad【5】数组里面,a=0.9,1-a=0.1*/
static u16 now_filter_num=0;
const float a=0.9;
now_filter_num=(1-a)*ad[5] + 0.9*now_filter_num;//now_filter_num每次都会作为之前的滤波值来运算。
数学公式分析:设RBi为本次滤波值为RBi,上次的滤波值RBi-1。
得到如上公式:RBi=RBi-10.9+1000.1,分析为递增,并且有限。这利用到高数分析。假设i为无穷时,极限为A:A=A*0.9+10得到 A为100,也就是RBi极限值为100,也就是逼近极限值。