分式加权移动平均滤波算法(Fractional Weighted Moving Average Filter)
注意:作者是初学者,代码和思路仅供参考!
这是一种简易的滤波算法,使用FIFO进行加权求平均值。
- 代码面向对象,支持计算多个滤波器
- 请注意,这种滤波算法有滞后性,实时性很差,仅适合温度检测等领域使用
- FWMA_Filter:库本体
- Project:示范用例,主控为CH32V203
该算法预先使用Python实现,然后移植到C语言上,下面是模拟的效果
下面的例子主控为CH32V203,配合CS1237读取数据,其他主控请参考修改。
- 设置队列长度
FWMA_LEN
- 调用
FWMA_Init
函数,设置存储地址和参数 - 如果需要使用完整的滤波器,请调用
FWMA_filter
函数 - 如果仅使用中值滤波,请调用
FWMA_median
函数
有以下几种参数:
- FWMA_LEN:队列长度(默认为5)
- pres:上次结果权
- af:衰减系数
- data_min:数据范围最小值
- data_max:数据范围最大值
上次结果权,控制前一次计算结果对当前计算结果的影响程度,值越大,前一次计算结果对当前结果的影响越大,反应越慢,数据越平滑。
衰减系数,数值越小,输出结果更敏感于新数据的变化,但对噪声的去除效果可能会降低。较小的衰减系数适用于需要更快响应的实时应用。
FWMA_InitTypeDef FWMA_InitStruct;
FWMA_InitStruct.data_max = 2.5;
FWMA_InitStruct.data_min = 0;
FWMA_InitStruct.pres = 1;
FWMA_InitStruct.af = 2;
FWMA_t FWMA_s;
double FWMA_fifo[FWMA_LEN] = {0};
double FWMA_buf[3] = {0};
FWMA_Init(&FWMA_s, FWMA_fifo, FWMA_buf, &FWMA_InitStruct);