1 / 11
文档名称:

数字滤波算法.doc

格式:doc   页数:11页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

数字滤波算法.doc

上传人:875845154 2016/6/18 文件大小:0 KB

下载得到文件列表

数字滤波算法.doc

相关文档

文档介绍

文档介绍:几种简单的数字滤波假定从 8位 AD 中读取数据(如果是更高位的 AD 可定义数据类型为 int ), 子程序为 get_ad(); 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; 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; 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; 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[count]; return (char)(sum/(N-2)); }6 、限幅平均滤波法/* */略参考子程序 1、37 、一阶滞后滤波法/* 为加快程序处理速度假定基数为 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 code coe[N] = {1,2,3,4,5,6,7,8,9,10,11,12}; char code 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_c