2018-01-1822:20:53
网上的限幅滤波教程,明显他是设置了一个初始量,明显满足不了动态哦的限幅滤波,即传感器传来数据,这边把高波过滤掉的效果下一篇就是我的代码----加密文档
1 /* 2 A、名称:限幅滤波法(又称程序判断滤波法) 3 B、方法: 4 根据经验判断,确定两次采样允许的最大偏差值(设为A), 5 每次检测到新值时判断: 6 如果本次值与上次值之差<=A,则本次值有效, 7 如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值。 8 C、优点: 9 能有效克服因偶然因素引起的脉冲干扰。 10 D、缺点: 11 无法抑制那种周期性的干扰。 12 平滑度差。 13 E、整理:shenhaiyu 2013-11-01 14 */ 15 16 int Filter_Value; 17 int Value; 18 19 void setup() { 20 Serial.begin(9600); // 初始化串口通信 21 randomSeed(analogRead(0)); // 产生随机种子 22 Value = 300; 23 } 24 25 void loop() { 26 Filter_Value = Filter(); // 获得滤波器输出值 27 Value = Filter_Value; // 最近一次有效采样的值,该变量为全局变量 28 Serial.println(Filter_Value); // 串口输出 29 delay(50); 30 } 31 32 // 用于随机产生一个300左右的当前值 33 int Get_AD() { 34 return random(295, 305); 35 } 36 37 // 限幅滤波法(又称程序判断滤波法) 38 #define FILTER_A 1 39 int Filter() { 40 int NewValue; 41 NewValue = Get_AD(); 42 if(((NewValue - Value) > FILTER_A) || ((Value - NewValue) > FILTER_A)) 43 return Value; 44 else 45 return NewValue; 46 }