jonas222 发表于 2024-12-22 22:00

一阶低通滤波

1、算法介绍一阶滤波算法是比较常用的滤波算法:Y(n)=a*X(n)+(1-a)*Y(n-1)其中,X为输入值,Y为滤波后得输出值,a为0~1之间的滤波系数。一阶滤波相当于是将新的采样值与上次的滤波结果计算一个加权平均值。a的取值决定了算法的灵敏度,a越大,新采集的值占的权重越大,算法越灵敏,但平顺性差;相反,a越小,新采集的值占的权重越小,灵敏度差,但平顺性好。2、C语言实现方法。 公式:        Y(n)=a*X(n)+(1-a)*Y(n-1)整理后得:Y(n)=Y(n-1)+a*(X(n)-Y(n-1))
       
float low_pass_filter(float value)       
{       
static float out_last = 0; //上一次滤波值       
float out;       
       
/***************** 如果第一次进入,则给 out_last 赋值 ******************/       
static char fisrt_flag = 1;       
if (fisrt_flag == 1)       
{       
    fisrt_flag = 0;       
    out_last = value;       
}       
       
/*************************** 一阶滤波 *********************************/       
3、效果如下图。
Y(n)=a*X(n)+(1-a)*Y(n-1)
原始曲线:
https://i-blog.csdnimg.cn/blog_migrate/085450d81e6ffe8113900d499894015d.png
滤波系数0.05
https://i-blog.csdnimg.cn/blog_migrate/4353fe86def9e49a774d5d385e7d7e18.png

lemonboard 发表于 2024-12-23 14:12

虽然帖子没有全部显示出来,但感觉使用了float类型之后,是不是普通的MCU就不能胜任了啊
页: [1]
查看完整版本: 一阶低通滤波