点击上方“嵌入式基地”,选择“置顶/星标公众号”
福利干货,第一时间送达!
说明:
假设从8位AD中读取数据(若是更高位的AD,可将数据类型定义为int)
子程序为get_ad()
以下代码可 左右滑动
一、限幅滤波法
优点:
能有效克服因偶然因素引起的脉冲干扰。
缺点:
无法抑制那种周期性的干扰,且平滑度差。
/*
1、限幅滤波
A值可根据实际情况调整
value为有效值,new_value为当前采样值
滤波程序返回有效的实际值
*/
#define A 10
char valuechar filter(void) {
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(void) {
char value_buf[N];
char i, j, temp;
for(i = 0; i value_buf[i] = get_ad();
delay();
}
for(j = 0; j 1; j++) {
for(i = 0; i if(value_buf[i] > value_buf[i + 1]) {
temp = value_buf[i];
value_buf[i] = value_buf[i + 1];
value_buf[i +