论坛元老
 
- 积分
- 3347
- 金钱
- 3347
- 注册时间
- 2013-4-10
- 在线时间
- 333 小时
|
发表于 2016-4-25 15:24:40
|
显示全部楼层
/********************************************************************************************
函数名:GlideValueFilter() 8次递推(滑动)平均滤波法+一阶滞后滤波法
调 用:x=GlideValueFilter()
参 数:当前ADC转换的结果值
返回值:滤波后的ADC采样值
说 明: Datah[]当前函数用来保存数据的数组,属于全局变量
Value 前一次采样的结果(全局变量)
一阶滞后滤波系数取128
Radc 本次采样的新数据
/*******************************************************************************************/
void GlideValueFilter(void)
{
unsigned int NEW_DATA,result;
unsigned char k;
ADC_Dat[8] = GetADCResult(0); //采样数据,放到数组的最高位
NEW_DATA = 0;
for(k = 0; k < 8; k++)
{
ADC_Dat[k]=ADC_Dat[k+1];//所有数据左移,低位去掉
NEW_DATA += ADC_Dat[k]; //求和
}
NEW_DATA = NEW_DATA/8;//求平均值
k = 200;//设备权重,A/D采样滤波系数
if(NEW_DATA < OLD_DATA) // 如果新采样值小于前次采样值
{
result = OLD_DATA - NEW_DATA;
result *= k;
result += 128; //+128是为了四舍五入
result /=256;
OLD_DATA -= result;
}
else{
if(NEW_DATA > OLD_DATA) // 如果新采样值大于前次采样值
{
result = NEW_DATA - OLD_DATA;
result *= k;
result += 128; //+128是为了四舍五入
result /=256;
OLD_DATA += result;
}
}
} |
|