[疑难问答] 加权递推平均滤波法

[复制链接]
lihuami 发表于 2025-7-12 11:40 | 显示全部楼层
权值的和必须等于1,以保证滤波结果的准确性。
updownq 发表于 2025-7-12 14:20 | 显示全部楼层
加权递推平均滤波法的计算复杂度较低,只需要保存前一次滤波结果,因此适合嵌入式系统等资源受限的环境。
jkl21 发表于 2025-7-18 10:32 | 显示全部楼层
适合消除脉冲噪声,但无法处理高斯噪声
youtome 发表于 2025-7-18 13:21 | 显示全部楼层
窗口越大,平滑效果越好,但响应速度越慢。
窗口越小,响应速度越快,但噪声抑制能力越弱。
robertesth 发表于 2025-7-18 14:21 | 显示全部楼层
根据噪声频率和系统响应需求,动态调整窗口大小和权重。
robincotton 发表于 2025-7-18 17:20 | 显示全部楼层
#include <stdio.h>

#define FILTER_WINDOW_SIZE 5
static const float weights[FILTER_WINDOW_SIZE] = {0.4, 0.3, 0.2, 0.08, 0.02};
static float history[FILTER_WINDOW_SIZE] = {0};
static uint8_t data_index = 0;

float WeightedMovingAverage(float new_sample) {
    history[data_index] = new_sample;
    data_index = (data_index + 1) % FILTER_WINDOW_SIZE;

    float filtered_value = 0;
    for (int i = 0; i < FILTER_WINDOW_SIZE; i++) {
        int idx = (data_index + i) % FILTER_WINDOW_SIZE;
        filtered_value += history[idx] * weights[i];
    }
    return filtered_value;
}

int main() {
    float x[] = {10, 12, 15, 13, 11};  // 采样值序列
    float y_prev = 0;  // 初始滤波输出值

    for (int i = 0; i < sizeof(x) / sizeof(x[0]); i++) {
        float y = WeightedMovingAverage(x[i]);
        printf("Input: %.2f, Output: %.2f\n", x[i], y);
    }
    return 0;
}
minzisc 发表于 2025-7-18 18:42 | 显示全部楼层
实现时,要注意数据类型的精度,避免因精度不足导致的误差。
eefas 发表于 2025-7-18 19:36 | 显示全部楼层
结合了加权平均和递推计算的思想,既能有效抑制噪声,又能减少计算量和内存占用
hudi008 发表于 2025-7-18 20:19 | 显示全部楼层
其简单性和低存储需求使其广泛应用于嵌入式系统
mickit 发表于 2025-7-18 20:58 | 显示全部楼层
加权递推平均滤波法适用于有较大纯滞后时间常数的对象和采样周期较短的系统。
10299823 发表于 2025-7-18 21:43 | 显示全部楼层
单次滤波计算时间小于采样间隔,避免数据丢失。
vivilyly 发表于 2025-7-19 10:33 | 显示全部楼层
通过合理选择权重系数和初始值,加权递推平均滤波法可以有效地平滑信号,提高系统的稳定性和准确性。
lihuami 发表于 2025-7-19 11:24 | 显示全部楼层
权重系数的选择对滤波效果至关重要。
bartonalfred 发表于 2025-7-19 12:27 | 显示全部楼层
与中位值滤波结合使用,提升抗干扰能力。
beacherblack 发表于 2025-7-19 12:55 | 显示全部楼层
可先用限幅滤波去除粗大误差,再用加权递推平均滤波
jtracy3 发表于 2025-7-19 14:17 | 显示全部楼层
加权递推平均滤波法是对递推平均滤波法的改进。其核心思想是在滤波过程中引入权系数,使越接近当前时刻的数据权重越大。
lihuami 发表于 2025-7-19 14:52 | 显示全部楼层
加权递推平均滤波实现简单,但不如卡尔曼滤波适应性强
benjaminka 发表于 2025-7-19 15:49 | 显示全部楼层
在嵌入式系统中,需注意浮点运算精度损失,建议使用高精度数据类型或固定点运算
iyoum 发表于 2025-7-19 19:14 | 显示全部楼层
可理解为:当前滤波值 = 新数据的影响 + 历史数据的影响。
当α接近 1 时:新数据权重高,滤波响应快(能快速跟踪信号变化),但抗干扰能力弱(对噪声敏感);
当α接近 0 时:历史数据权重高,滤波平滑性好(抗干扰能力强),但响应慢(对信号变化不敏感,可能产生滞后)。
bestwell 发表于 2025-7-19 20:08 | 显示全部楼层
该算法适用于有较大纯滞后时间常数的对象和采样周期较短的系统,例如工业控制、传感器数据采集等场景。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部