c语言adc值滤波函数,ADC滤波处理的十种方法

1 //1.限幅滤波法(又称程序判断滤波法)2 /*3 * description: 根据经验判断,确定两次采样允许的最大偏差值(设为A),4 * 每次检测到新值时判断:新值和旧值差值如果超过A,5 * 则用旧值,否则用新值6 * advantage: 能够克服因偶然因素引起的脉冲干扰7 * disadvantage: 无法抑制那种周期性的干扰,...
摘要由CSDN通过智能技术生成

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

2 /*

3 * description: 根据经验判断,确定两次采样允许的最大偏差值(设为A),4 * 每次检测到新值时判断:新值和旧值差值如果超过A,5 * 则用旧值,否则用新值6 * advantage: 能够克服因偶然因素引起的脉冲干扰7 * disadvantage: 无法抑制那种周期性的干扰,平滑度差8 */

9 /*A值可根据实际情况调整10 value为有效值,new_value为当前采样值11 滤波程序返回有效的实际值*/

12 #define A 10

13

14 charvalue;15

16 charfilter()17 {18 charnew_value;19 new_value =get_ad();20 if ( ( new_value - value > A ) || ( value - new_value >A )21 returnvalue;22 returnnew_value;23

24 }25

26

27 //2.中位值滤波法

28 /*

29 * description: 连续采样N次(N取奇数),把N次采样值按大小排列,30 * 取中间值为本次有效值31 * advantage: 能够有效克服偶然因素引起的波动干扰,32 * 对温度、液位等变化缓慢的被测参数有良好的滤波效果33 * disadvantage: 对流量、速度等快速变化的参数不宜34 */

35 /*N值可根据实际情况调整36 排序采用冒泡法*/

37 #define N 11

38

39 charfilter()40 {41 charvalue_buf[N];42 charcount,i,j,temp;43 for (

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的ADC滤波算法的C语言实现: ``` #define SAMPLE_COUNT 10 // 采样点数 #define FILTER_FACTOR 0.2 // 滤波系数 int adc_values[SAMPLE_COUNT]; // 存储采样数据的数组 int filtered_value; // 存储滤波后的数据 // 采样函数,返回ADC读取的 int sample_adc() { // TODO: 实现ADC读取代码 } // 滤波函数,返回滤波后的 int filter_adc() { int i; int sum = 0; // 采样 for (i = 0; i < SAMPLE_COUNT; i++) { adc_values[i] = sample_adc(); sum += adc_values[i]; } // 滤波 filtered_value = sum / SAMPLE_COUNT; for (i = 0; i < SAMPLE_COUNT; i++) { filtered_value = FILTER_FACTOR * adc_values[i] + (1 - FILTER_FACTOR) * filtered_value; } return filtered_value; } int main() { int i; // 初始化数组 for (i = 0; i < SAMPLE_COUNT; i++) { adc_values[i] = 0; } // 循环采样并滤波 while (1) { filtered_value = filter_adc(); // TODO: 处理滤波后的数据 } return 0; } ``` 这个算法采用了移动平均滤波的思想,即每次采样一定数量的数据,然后对这些数据进行平均,得到一个平均。然后再将这个平均与上一次滤波后的进行加权平均,得到新的滤波后的。这个加权平均的系数就是滤波系数,一般取0.1~0.9之间的。 这个算法虽然简单,但是效果还是比较不错的,可以有效地去除噪声,得到稳定的ADC读数。当然,如果你需要更高效的滤波算法,可以考虑使用卡尔曼滤波、中滤波等更高级的算法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值