限幅滤波法
#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));//返回 去掉一个最大值、去掉一个最小值后 数组中的平均值
}
加权递推平均滤波法(一般用不着)
一阶滞后滤波算法