logo资料库

滤波算法大全.doc

第1页 / 共53页
第2页 / 共53页
第3页 / 共53页
第4页 / 共53页
第5页 / 共53页
第6页 / 共53页
第7页 / 共53页
第8页 / 共53页
资料共53页,剩余部分请下载后查看
十一大滤波算法程序大全
十一大滤波算法程序大全 1、限幅滤波法(又称程序判断滤波法) 2、中位值滤波法 3、算术平均滤波法 4、递推平均滤波法(又称滑动平均滤波法) 5、中位值平均滤波法(又称防脉冲干扰平均滤波法) 6、限幅平均滤波法 7、一阶滞后滤波法 8、加权递推平均滤波法 9、消抖滤波法 10、限幅消抖滤波法 11、卡尔曼滤波(非扩展卡尔曼), 程序默认对 int 类型数据进行滤波,如需要对其他类型进行滤 波,只需要把程序中所有 int 替换成 long、float 或者 double 即可。 1、限幅滤波法(又称程序判断滤波法) /* A、名称:限幅滤波法(又称程序判断滤波法) B、方法: 根据经验判断,确定两次采样允许的最大偏差值(设为 A), 每次检测到新值时判断:
如果本次值与上次值之差<=A,则本次值有效, 如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上 次值代替本次值。 C、优点: 能有效克服因偶然因素引起的脉冲干扰。 D、缺点: 无法抑制那种周期性的干扰。 平滑度差。 */ int Filter_Value; int Value; void setup() { Serial.begin(9600); // 初始化串口通信 randomSeed(analogRead(0)); // 产生随机种子 Value = 300; } void loop() { Filter_Value = Filter(); // 获得滤波器输出值
Value = Filter_Value; // 最近一次有效采样的值,该 变量为全局变量 Serial.println(Filter_Value); // 串口输出 delay(50); } // 用于随机产生一个 300 左右的当前值 int Get_AD() { return random(295, 305); } // 限幅滤波法(又称程序判断滤波法) #define FILTER_A 1 int Filter() { int NewValue; NewValue = Get_AD(); if(((NewValue - Value) > FILTER_A) || ((Value - NewValue) > FILTER_A)) return Value; else return NewValue; } 2、中位值滤波法
ARDUINO 代码复制打印 /* A、名称:中位值滤波法 B、方法: 连续采样 N 次(N 取奇数),把 N 次采样值按大小排列, 取中间值为本次有效值。 C、优点: 能有效克服因偶然因素引起的波动干扰; 对温度、液位的变化缓慢的被测参数有良好的滤波效果。 D、缺点: 对流量、速度等快速变化的参数不宜。 */ int Filter_Value; void setup() { Serial.begin(9600); // 初始化串口通信 randomSeed(analogRead(0)); // 产生随机种子 } void loop() { Filter_Value = Filter(); // 获得滤波器输出值 Serial.println(Filter_Value); // 串口输出
delay(50); } // 用于随机产生一个 300 左右的当前值 int Get_AD() { return random(295, 305); } // 中位值滤波法 #define FILTER_N 101 int Filter() { int filter_buf[FILTER_N]; int i, j; int filter_temp; for(i = 0; i < FILTER_N; i++) { filter_buf[i] = Get_AD(); delay(1); } // 采样值从小到大排列(冒泡法) for(j = 0; j < FILTER_N - 1; j++) { for(i = 0; i < FILTER_N - 1 - j; i++) { if(filter_buf[i] > filter_buf[i + 1]) { filter_temp = filter_buf[i]; filter_buf[i] = filter_buf[i + 1];
filter_buf[i + 1] = filter_temp; } } } return filter_buf[(FILTER_N - 1) / 2]; } /* A、名称:中位值滤波法 B、方法: 连续采样 N 次(N 取奇数),把 N 次采样值按大小排列, 取中间值为本次有效值。 C、优点: 能有效克服因偶然因素引起的波动干扰; 对温度、液位的变化缓慢的被测参数有良好的滤波效果。 D、缺点: 对流量、速度等快速变化的参数不宜。 */ int Filter_Value; void setup() { Serial.begin(9600); // 初始化串口通信 randomSeed(analogRead(0)); // 产生随机种子 }
void loop() { Filter_Value = Filter(); // 获得滤波器输出值 Serial.println(Filter_Value); // 串口输出 delay(50); } // 用于随机产生一个 300 左右的当前值 int Get_AD() { return random(295, 305); } // 中位值滤波法 #define FILTER_N 101 int Filter() { int filter_buf[FILTER_N]; int i, j; int filter_temp; for(i = 0; i < FILTER_N; i++) { filter_buf[i] = Get_AD(); delay(1); } // 采样值从小到大排列(冒泡法) for(j = 0; j < FILTER_N - 1; j++) { for(i = 0; i < FILTER_N - 1 - j; i++) {
if(filter_buf[i] > filter_buf[i + 1]) { filter_temp = filter_buf[i]; filter_buf[i] = filter_buf[i + 1]; filter_buf[i + 1] = filter_temp; } } } return filter_buf[(FILTER_N - 1) / 2]; } 3、算术平均滤波法 ARDUINO 代码复制打印 /* A、名称:算术平均滤波法 B、方法: 连续取 N 个采样值进行算术平均运算: N 值较大时:信号平滑度较高,但灵敏度较低; N 值较小时:信号平滑度较低,但灵敏度较高; N 值的选取:一般流量,N=12;压力:N=4。 C、优点: 适用于对一般具有随机干扰的信号进行滤波; 这种信号的特点是有一个平均值,信号在某一数值范围附近上下 波动。
分享到:
收藏