#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;
}
滑动平均值滤波
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- (1)、算数平均值法求权重 步骤: 判断矩阵按列求和,得到新矩阵a_axis_0_sum 把判断矩阵中的每一个数都...
- 从输入任意个整型数,统计其中的负数个数并求所有非负数的平均值,结果保留一位小数,如果没有非负数,则平均值为0 本题...