⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 doc_filter_by_software_c_code_by_zhzzh18.txt

📁 1、限幅滤波法(又称程序判断滤波法) 2、中位值滤波法 3、算术平均滤波法 4、递推平均滤波法(又称滑动平均滤波法) 5、中位值平均滤波法(又称防脉冲干扰平均滤波法) 6、限幅平均滤波法
💻 TXT
字号:
#define get_ad() 10
extern void delay(void);
/*1、限副滤波
 A值可根据实际情况调整
value为有效值,new_value为当前采样值 
滤波程序返回有效的实际值 */

#define A 10
char value;
char filter()
{
	char new_value;
	new_value = get_ad();
	if ( ( new_value - value > A ) || ( value - new_value > A ) ) return value;
	else return new_value;

}

/*2、中位值滤波法
 N值可根据实际情况调整
排序采用冒泡法*/

#define N 11
char filter()
{
	char value_buf[N];
	char count,i,j,temp;
	for ( count=0;count<N;count++)
	{
		value_buf[count] = get_ad();
		delay();
	}
	for (j=0;j<N-1;j++)
	{
		for (i=0;i<N-j;i++)
		{
			if ( value_buf[i]>value_buf[i+1] )
			{
				temp = value_buf[i];
				value_buf[i] = value_buf[i+1]; 
				value_buf[i+1] = temp;
			}
		}
	}
return value_buf[(N-1)/2];
} 

/*3、算术平均滤波法*/

#define N 12
char filter()
{
	int sum = 0;
	char count;
	for ( count=0;count<N;count++)
	{
		sum+=get_ad();
		delay();
	}
	return (char)(sum/N);
}

/*4、递推平均滤波法(又称滑动平均滤波法)*/

#define N 12 
char value_buf[N];
char i=0;
char filter()
{
	char count;
	int sum=0;
	value_buf[i++]=get_ad();
	if (i == N) i=0;
	for ( count=0;count<N;count++)
	sum = value_buf[count];
	return (char)(sum/N);
}

/*5、中位值平均滤波法(又称防脉冲干扰平均滤波法)*/

#define N 12
char filter()
{
	char count,i,j,temp;
	char value_buf[N];
	int sum=0;
	for (count=0;count<N;count++)
	{
		value_buf[count] = get_ad();
		delay();
	}
	for (j=0;j<N-1;j++)
	{
		for (i=0;i<N-j;i++)
		{
			if ( value_buf[i]>value_buf[i+1] )
			{
				temp = value_buf[i];
				value_buf[i] = value_buf[i+1]; 
				value_buf[i+1] = temp;
			}
		}
	}
	for(count=1;count<N-1;count++)
	sum += value_buf[count];
	return (char)(sum/(N-2));
}

/*6、限幅平均滤波法

 
略 参考子程序1、3


7、一阶滞后滤波法
为加快程序处理速度假定基数为100,a=0~100 */

#define a 50
char value;
char filter()
{
	char new_value;
	new_value = get_ad();
	return (100-a)*value + a*new_value; 
}

/*
8、加权递推平均滤波法
 coe数组为加权系数表,存在程序存储区。*/

#define N 12
char coe[N] = {1,2,3,4,5,6,7,8,9,10,11,12};
char sum_coe = 1+2+3+4+5+6+7+8+9+10+11+12;
char filter()
{
	char count;
	char value_buf[N];
	int sum=0;
	for (count=0;count<N;count++)
	{
		value_buf[count] = get_ad();
		delay();
	}
	for (count=0;count<N;count++)
	sum += value_buf[count]*coe[count];
	return (char)(sum/sum_coe);
}


/*9、消抖滤波法*/
char value;
#define N 12
char filter()
{
	char count=0;
	char new_value;
	new_value = get_ad();
	while (value !=new_value);
	{
		count++;
		if (count>=N) return new_value;
		delay();
		new_value = get_ad();
	}
	return value; 
}

/*10、限幅消抖滤波法


略 参考子程序1、9 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -