C++实现一维数组的移动均值滤波

C++实现一维数组的移动均值滤波(Moving Average Filter)

移动平均滤波是一种简单的滤波方法,其核心思想是用数据序列中的若干个连续数据的平均值来代替该范围内的原始数据。这样可以减少噪声的影响,同时保留数据的趋势。
移动平均滤波的步骤如下:

  1. 确定滤波窗口大小,即要取多少个数据进行平均;
  2. 将窗口对准数据序列的第一个数据点,计算该窗口内数据的平均值,并将该平均值放置于窗口中心的位置;
  3. 移动窗口,计算下一个数据点的平均值,重复步骤2。

C++完整代码为:

#include<iostream>
#include <iomanip>
#include<math.h>

using namespace std;

int main() 
{
	int i = 0, j = 0;
	double temp = 0.0;
	double data[] = {1, 2.2, 3, 4, 5.1, 6, 7, 8, 8.9, 10,
	11, 12, 13.2, 14, 15, 16, 17.1, 17.9, 19, 20};
	double data_temp[] = {1, 2.2, 3, 4, 5.1, 6, 7, 8, 8.9, 10,
	11, 12, 13.2, 14, 15, 16, 17.1, 17.9, 19, 20};
	int size = sizeof(data)/sizeof(data[0]);
	
	// 移动平均滤波 
	int kill = 3;
	int Num = 1;
	
	for (i=(kill-1)/2; i<(size-(kill-1)/2); i++)
	{
		Num = 1;
		temp = data[i]; 
		for(j=1; j<=(kill/2); j++)
		{
			temp += data_temp[i+j];
			temp += data_temp[i-j];
			Num += 2;
		}
		data[i] = temp / Num;
	}

	for(i=0; i<(kill-1)/2; i++)
	{
		temp = 0;
		Num = 0;
		for(j=0; j<i+1; j++)
		{
			temp += data_temp[j];
			Num++;
		}
		data[i] = temp/Num;
	}

	for(i=(size-(kill-1)/2); i<size; i++)
	{
		temp = 0;
		Num = 0;
		for(j=0; j<size-i+1; j++)
		{
			temp += data_temp[i+j];
			Num ++;
		}
		data[i] = temp/(Num-1);
	}

	for(i=0; i<size; i++)
		cout << data[i] << endl;
	return 0; 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值