假设从8位AD读取数据(如果是高位AD,数据类型可定义为int),子程序为();
1. 子限制过滤
/* 可以根据实际情况调整一个值
value为有效值,为当前采样值
过滤例程返回有效的实际值*/
# 10
字符值;
字符()
字符;
= ();
if ( ( - 值 > A ) || ( 值 - > A )
价值;
;
2、中值滤波法
/* N值可以根据实际情况调整
使用冒泡法排序*/
#N 11
字符()
字符[N];
字符数,i,j,temp;
对于(计数=0;计数{
[计数] = ();
延迟();
对于 (j=0;j {
对于 (i=0;i {
如果 ([i]>[i+1] )
温度=[i];
[i] = [i+1];
[i+1] = 温度;
[(N-1)/2];
3、算术平均滤波法
/*
*/
#N12
字符()
整数总和=0;
对于(计数=0;计数{
总和 + = ();
延迟();
(字符)(总和/N);
4、递归平均滤波法(也称滑动平均滤波法)
/*
*/
#N12
字符[N];
字符 i = 0;
字符()
字符数;
整数总和=0;
[i++] = ();
如果 ( i == N ) i = 0;
for (计数=0;计数总和=[计数];
(字符)(总和/N);
5、中值平均滤波法(又称抗脉冲干扰平均滤波法)
/*
*/
#N12
字符()
字符数,i,j;
字符[N];
整数总和=0;
对于(计数=0;计数{
[计数] = ();
延迟();
对于 (j=0;j {
对于 (i=0;i {
如果 ([i]>[i+1] )
温度=[i];
[i] = [i+1];
[i+1] = 温度;
for(count=1;计数总和+=值[计数];
(字符)(总和/(N-2));
6、极限平均滤波法
/*
*/
请参考子程序1和3。
7. 一阶滞后滤波方法
/* 为了加快程序处理速度,假设底数为100,a=0~100 */
# 50
字符值;
字符()
字符;
= ();
(100-a)*值+a*;
8.加权递归平均滤波方法
/* coe数组是加权系数表,存在于程序存储区中。 */
#N12
字符代码 coe[N] = {1,2,3,4,5,6,7,8,9,10,11,12};
字符代码 = 1+2+3+4+5+6+7+8+9+10+11+12;
字符()
字符数;
字符[N];
整数总和=0;
对于(计数=0,计数{
[计数] = ();
延迟();
for (count=0,count sum += [count]*coe[count];
(字符)(总和/);
9. 防跳过滤法
#N12
字符()
字符数=0;
字符;
= ();
而(值!=);
计数++;
如果(计数>=N);
延迟();
= ();
价值;
10. 限制去抖滤波方法
/*
*/