滤波算法 | 递推平均滤波法

本文介绍了一种基于队列的递推平均滤波算法,通过每次更新队列中的数据并计算新平均值来实现数据平滑处理。该算法适用于实时数据处理场景,能够有效减少噪声干扰。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本方法:采用队列作为测量数据存储器 , 设队列的长度为 N ,每进行一次测量 ,把测量结果放于队尾 ,而扔掉原来队首的一个数据 ,这样在队列中始终就有 N 最新的数据。当计算平均值时 ,只要把队列中的 N 个数据进行算数平均 ,就可得到新的算数平均值。这样每进行一次测量 ,就可得到一个新的算术平均值。

其程序如下所示:

#include <stdio.h>

// 定义滤波数据类型
typedef	int filter_type;
// 函数声明
filter_type filter(filter_type value_buf[], filter_type new_value, int num);
// 递推平均滤波函数
filter_type filter(filter_type value_buf[], filter_type new_value, int num)
{
	static int i;
	int count;
	filter_type sum = 0;

	value_buf[i++] = new_value;
	// 调试信息
	/*for (count=0; count<num; count++)
		printf("%d ", value_buf[count]);
        printf("\n");*/
	if (i == num)
		i = 0;
	for (count=0; count<num; count++)
		sum += value_buf[count];

	return (filter_type)(sum/num);
}
//打印测试
void main()
{
        int i;
	filter_type ave, val;
	filter_type a[5]= {1, 2, 3, 4, 5};

	val = 0;
	for(i=0; i<3; i++)
	{
		ave = filter(a, val, sizeof(a)/sizeof(filter_type));
		printf("%d\n", ave);
		val += 8;
	}
}




程序结果:

(0+2+3+4+5)/5 = 2.8;(0+8+3+4+5)/5 = 4;(0+8+16+4+5)/5 = 6.6;全部整型输出分别为2、4、6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式逍遥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值