滑动平均值滤波
作者:
浙南旧事 | 来源:发表于
2021-07-27 20:15 被阅读0次#define MAX_COUNT 16
static float buf[MAX_COUNT]; /* 数据缓冲区 */
static float sum; /* N个数据的算术和 */
static int cnt; /* 数据个数 */
static int pos; /* 缓冲区位置 */
/*
* 滑动平均值滤波。
* 每次新进来一个数据,就将最早进来的数据丢掉,然后计算包括新数据在内的N个数据的算术平均值。
*
* 每调用一次,就加入一个新数据,并得到当前的滤波值。
*/
float alg(float new_val)
{
/* 用一个减法,就做了"丢弃最旧的数据,加入最新的数据"这一操作 */
sum += (new_val - buf[pos]);
buf[pos] = new_val;
/* pos,cnt可能可以合在一起,但用两个变量,更清晰一些 */
// pos &= 0xf;
pos = (pos + 1) % MAX_COUNT;
/* 个数不足时,cnt是实际个数,个数足够时,cnt最多也只是MAX_COUNT */
//if (cnt < MAX_COUNT)
// cnt++;
cnt += (cnt < MAX_COUNT);
return sum / cnt;
}
本文标题:滑动平均值滤波
本文链接:https://www.haomeiwen.com/subject/izoomltx.html
网友评论