ADC的一些小算法

限幅滤波法

#include <stdio.h>


char a = 5;//两次结果的预计最大偏差值

char vaule_num() //这是ADC的转换函数 
{
	char i;
	return i;
}


int main()
{
	char vaule,new_vaule;//设定两个值 分别接收第一次和第二次采集的数据
	vaule = vaule_num();//第一次采集的数据
    delay_ms(500)//延迟一会
	new_vaule = vaule_num();//第二次采集的数据

	if (new_vaule - vaule < a)//判断小于预计最大偏差值
	{
		return new_vaule;//小于则 返回新值
	}
   else
     {
        return vaule //否则返回老值
     }

	return 0;


}

算数平均数滤波法

#include <stdio.h>

char n = 5;//预计循环次数

char vaule_num()//这是ADC的转换函数 
{
	char i = 5;
	return i;
}


int main()
{
	char vaule=0,i=0,temp=0;//ADC采样值 循环值 平均数值
	for (i = 0; i < n; i++)
	{
		vaule += vaule_num();//累计相加
	}
	temp = vaule / n;//最终得出来的ADC算数平均数
	return 0;
}

递推平均滤波算法(简单来说就是 数组的算数平均值)

#include <stdio.h>

#define N   5//要保存的ADC数值个数
char vaule_buf[N] = { 0 };//存ADC数值的

char vaule_num()//这是ADC的转换函数 
{
	char i = 5;
	return i;
}


int main()
{
	char i = 0,count=0,sum=0;
	vaule_buf[i++] = vaule_num();//将ADC的值存入buf中
	if (i == N)
	{
		i = 0;
	}
	for (count = 0; count < N; count++)//做累加
	{
		sum += vaule_buf[count];
	}
	return sum / N;//返回算数平均数
}

中位值滤波法

#include <stdio.h>

#define N   9//采样次数 取奇数!

char vaule_num()//这是ADC的转换函数 
{
	char i = 5;
	return i;
}


int main()
{
	char vaule_buf[N] = { 0 };//存ADC数值的
	char count, i, j, temp;
	for (count = 0; count < N; count++)
	{
		vaule_buf[count] = vaule_num();//把ADC的值全部存在数组中
		delay_ms(50);
	}

	//利用冒泡排序 将ADC的数值进行从低到高的排序
	for (j = 0; j < N-1; j++)
	{
		for (i = 0; i < N-j; i++)
		{
			if (vaule_buf[i] > vaule_buf[i + 1]) 6 4
			{
				temp = vaule_buf[i];
				vaule_buf[i] = vaule_buf[i+1];
				vaule_buf[i+1] = temp;
			}
		}
	}


	return vaule_buf[(N - 1) / 2];//返回中位值

}

中位值平均滤波法

#include <stdio.h>

#define N   9//采样次数 取奇数!

char vaule_num()//这是ADC的转换函数 
{
	char i = 5;
	return i;
}


int main()
{
	char vaule_buf[N] = { 0 };//存ADC数值的
	char count, i, j, temp;
	for (count = 0; count < N; count++)
	{
		vaule_buf[count] = vaule_num();//把ADC的值全部存在数组中
		delay_ms(50);
	}

	//利用冒泡排序 将ADC的数值进行从低到高的排序
	for (j = 0; j < N-1; j++)
	{
		for (i = 0; i < N-j; i++)
		{
			if (vaule_buf[i] > vaule_buf[i + 1]) 6 4
			{
				temp = vaule_buf[i];
				vaule_buf[i] = vaule_buf[i+1];
				vaule_buf[i+1] = temp;
			}
		}
	}
	int sum = 0;//创建一个sum值
	
	for (count = 1; count < N - 1; count++)
	{
		sum += vaule_buf[count];//计算去掉一个最大值。去掉一个最小值后 数组中的平均值
	}
	
	return (sum/(N - 2));//返回 去掉一个最大值、去掉一个最小值后 数组中的平均值

}

加权递推平均滤波法(一般用不着)

一阶滞后滤波算法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值