|
相关连接: [匠人DIY旋转时钟 系列文章 (连载中…)]
//-------------------------------------------------------- // 项目: // 模块:滤波处理 // 说明: // 设计:程序匠人(版权所有,引用者请保留原作者姓名) //-------------------------------------------------------- /* 版本说明: filter.c 2008-2-10 15:36
*/ //--------------------------------------------------------
//-------------------------------------------------------- //插入文件包 //-------------------------------------------------------- #i nclude "common.h" //--------------------------------------------------------
//-------------------------------------------------------- //单字节递推中位值平均滤波 //功能: 1.将新采样值压入队列 // 2.将队列中数据减去最大值和最小值,然后求平均值(小数四舍五入) //入口: NEW_DATA =新采样值 // QUEUE =队列 // n =队列长度 //出口: =滤波结果(平均值) //-------------------------------------------------------- tU08 filter1(tU08 NEW_DATA,tU08 QUEUE[],tU08 n) { tU08 max; tU08 min; tU16 sum; tU08 i; QUEUE[0]=NEW_DATA; //新采样值入队列 max=QUEUE[0]; min=QUEUE[0]; sum=QUEUE[0];
for(i=n-1;i!=0;i--) { if ( QUEUE[i] > max ) max = QUEUE[i]; //比较并更新最大值 else if ( QUEUE[i] < min ) min = QUEUE[i]; //比较并更新最小值
sum = sum + QUEUE[i]; //追加到和值 QUEUE[i] = QUEUE[i-1]; //队列更新
} i = n - 2; sum = sum - max - min + i/2; sum = sum / i; //平均值=(和值-最大值-最小值+n/2)/(队列长度-2) //说明:+(n-2)/2的目的是为了四舍五入 return ((tU08) sum) ; }
//-------------------------------------------------------- // // THE END // // 版权所有:程序匠人(引用者请保留原作者姓名) // //--------------------------------------------------------
|