×

AD采样滤波方法和示例程序

消耗积分:1 | 格式:doc | 大小:60KB | 2014-07-25

zhushidi147

分享资料个

软件滤波

10 种AD 采样的软件滤波方法和示例程序

假定从8 位AD 中读取数据(如果是更高位的AD 可定义数据类型为int),子程序为get_ad();

1、限幅滤波法(又称程序判断滤波法)

A、方法:

根据经验判断,确定两次采样允许的最大偏差值(设为A)

每次检测到新值时判断:

如果本次值与上次值之差《=A,则本次值有效

如果本次值与上次值之差》A,则本次值无效,放弃本次值,用上次值代替本次值

B、优点:

能有效克服因偶然因素引起的脉冲干扰

C、缺点

无法抑制那种周期性的干扰

平滑度差

【限副滤波】

/* 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、中位值滤波法

A、方法:

连续采样N 次(N 取奇数)

把N 次采样值按大小排列

取中间值为本次有效值

B、优点:

能有效克服因偶然因素引起的波动干扰

对温度、液位的变化缓慢的被测参数有良好的滤波效果

C、缺点:

对流量、速度等快速变化的参数不宜

【中位值滤波法】

/* 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》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];

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !