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

在常用的滤波算法中,加权递推平均滤波法是一种信号处理技术,旨在通过赋予不同时刻的数据不同的权重来改进递推平均滤波法,该方法可以使较新的数据具有更高的权重,以此提高系统对当前数据的灵敏度,同时牺牲部分信号平滑度。

image.png

1、加权递推平均滤波法的原理

加权递推平均滤波法是对传统递推平均滤波法的改进,通过在滤波过程中引入权系数,使得最新采样值对滤波结果的影响更大。权系数的选择通常遵循越接近当前时刻的数据权重越大的原则,从而提高了系统的灵敏度。然而,这也导致了信号平滑度的降低。

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

#include


#define N 12  // 数据缓冲区大小


// 权重系数数组,越新的数据权重越大

char code coe[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};

char code sum_coe = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12;


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

char get_ad() {

    // 这里应添加实际的AD采样代码

    // 为简化示例,使用随机数代替

    return rand() % 256;

}


// 模拟延迟函数

void delay() {

    // 实际的延迟实现(如使用定时器)

    // 为简化示例,使用空函数代替

}


// 加权递推平均滤波函数

char filter() {

    char count;

    char value_buf[N];  // 数据缓冲区

    int sum = 0;  // 加权求和结果


    // 获取最新N个AD采样值

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

        value_buf[count] = get_ad();

        delay();

    }


    // 计算加权求和

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

        sum += value_buf[count] * coe[count];

    }


    // 返回滤波结果(加权平均值)

    return (char)(sum / sum_coe);

}


int main() {

    // 测试滤波函数

    char filtered_value;

    for (int i = 0; i < 10; i++) {  // 运行10次以观察滤波效果

        filtered_value = filter();

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

    }

    return 0;

}


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

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

暂无评论