加权平均算法

/*
void Weighting(uint32_t *Priary_Data,uint16_t Deal_Long,uint16_t Weight_Long,uint16_t Grade,float *Filter_Data)
定义:加权-滤波-阈值曲线
参数:
//Priary_Data---输入--原始ADC数据
//Deal_Long-----输入--数据个数
//Weight_Long---输入--滤波处理长度最大为9,如果想输出原函数,配置Weight_Long=0
//Grade---------输入--滤波数据处理等级--处理层数,写0时也是一层
//up_thre_data--输入--阈值设置
//Filter_Data---输出--滤波数据
//Compare_Data--输出--参与波形比较
//Thre_Data-----输出--阈值曲线
返回值:无
*/
#include "lock.h"
void Weighting(uint32_t *Priary_Data,uint16_t Deal_Long,uint16_t Weight_Long,uint16_t Grade,float *Filter_Data)
{
	uint16_t i=0;
	float temp_f=0.0f;
	uint32_t data_long=0;
	uint16_t Addr_Star=0,Addr_Stop=0;
	uint16_t G=0;
	uint16_t m=0;
	for(i=0;i<Deal_Long;i++)
	{
		for(G=0;G<Grade;G++)               //第G层 G=0~Grade-1
		{	
			if(i<(Weight_Long-G))            
				Addr_Star=0;		               //第G层从Weight_Long-G位开始就能走完一遍了
			else 
			{
				if(Weight_Long<G) 
					Addr_Star=i-(Weight_Long-G);	
				else 
					Addr_Star=i;
			}
			
			if(i>=(Deal_Long-Weight_Long+G)) 
				Addr_Stop=Deal_Long-1;
			else 
			{
				if(Weight_Long>=G) 
					Addr_Stop=i+Weight_Long-G;	
				else 
					Addr_Stop=i;
			}
			
			for(m=Addr_Star;m<=Addr_Stop;m++) //求起始点和终止点的和
			{
				
				temp_f+=(float)LSB_32(Priary_Data[m]);	
				data_long++;
			}
		}
		Filter_Data[i]=temp_f/(float)data_long;   //滤波值
		temp_f=0.0f;
		data_long=0;			
	}

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

孙八瓶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值