#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;
}
滑动平均值滤波
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- (1)、算数平均值法求权重 步骤: 判断矩阵按列求和,得到新矩阵a_axis_0_sum 把判断矩阵中的每一个数都...
- 从输入任意个整型数,统计其中的负数个数并求所有非负数的平均值,结果保留一位小数,如果没有非负数,则平均值为0 本题...