凡亿教育-婷婷
凡事用心,一起进步
打开APP
公司名片
凡亿专栏 | 递推平均滤波法是什么?(附源代码)
递推平均滤波法是什么?(附源代码)

在常用滤波算法中。递推平均滤波法(也叫做滑动平均滤波法)是一种常用的信号处理技术,用于平滑数据序列中的随机波动,特别适合周期性干扰的抑制。该方法通过将最新采集的数据与先前数据结合,并计算其平均值,以此获得较为稳定的滤波结果。

image.png

1、递推平均滤波法是什么?

递推平均滤波法的核心思想是使用一个固定长度的队列存储连续N个采样值。每次新数据到来时,将其放入队尾,并移除队首的旧数据。通过对队列中的所有数据进行算术平均运算,得到滤波结果。

2、递推平均滤波法的示例代码

#include


#define N 12

char value_buf[N];

char i = 0;


// 模拟获取AD采样值的函数

char get_ad() {

    // 此处应替换为实际的AD采样代码

    static char value = 0;

    value++;  // 模拟数据变化

    return value % 256;  // 模拟返回0-255之间的值

}


// 递推平均滤波函数

char filter() {

    char count;

    int sum = 0;

    

    // 获取新数据并更新队列

    value_buf[i++] = get_ad();

    if (i == N) {

        i = 0;

    }

    

    // 计算队列中数据的和

    for (count = 0; count < N; count++) {

        sum += value_buf[count];

    }

    

    // 返回平均值

    return (char)(sum / N);

}


int main() {

    char filtered_value;

    

    // 模拟连续采样并滤波

    for (int j = 0; j < 100; j++) {

        filtered_value = filter();

        printf("Filtered Value: %d\n", filtered_value);

    }

    

    return 0;

}

3、递推平均滤波法代码解析

定义与初始化:

#define N 12:定义队列长度N为12。

char value_buf[N]:声明存储采样值的队列。

char i = 0:初始化队列索引。

模拟AD采样:

char get_ad():模拟获取AD采样值的函数,每次调用返回递增的模拟值。

递推平均滤波:

char filter():实现递推平均滤波的函数。

value_buf[i++] = get_ad():将新数据放入队尾,并更新索引。

if (i == N) i = 0:当索引达到队列长度时,重置为0实现循环队列。

for (count = 0; count < N; count++) sum += value_buf[count]:计算队列中所有数据的和。

return (char)(sum / N):返回平均值作为滤波结果。

主程序:

在main()函数中,模拟连续采样并调用filter()函数进行滤波,打印滤波结果。


本文凡亿教育原创文章,转载请注明来源!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。
相关阅读
进入分区查看更多精彩内容>
精彩评论

暂无评论