10种常用滤波算法特点及例程 您所在的位置:网站首页 简述滑动平均法的基本原理 10种常用滤波算法特点及例程

10种常用滤波算法特点及例程

2024-01-28 22:58| 来源: 网络整理| 查看: 265

文章目录 1. 限幅滤波法(1)原理(2)特点(3)例程 2. 中位值滤波法(1)原理(2)特点(3)例程 3. 算术平均滤波法(1)原理(2)说明(3)特点(4)例程 4. 递推平均滤波法(1)原理(2)特点(3)例程 5. 中位值平均滤波法(1)原理(2)特点(3)例程 6. 限幅平均滤波法(1)原理(2)特点(3)例程 7. 加权递推平均滤波法(1)原理(2)特点(3)例程 8. 消抖滤波法(1)原理(2)特点(3)例程 9. 限幅消抖滤波法(1)原理(2)特点(3)例程 10. 一阶滞后滤波法(1)原理(2)特点(3)例程

1. 限幅滤波法 (1)原理

通过给定的最大偏差值A来实现,如果本次值与上次差值 int filter_buf[FILTER_N]; int i, j; int filter_temp; for(i = 0; i for(i = 0; i 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. 算术平均滤波法 (1)原理

连续采用N个值进行算数平均运算

(2)说明

N值较大时:信号平滑度较高,但灵敏度较低;

N值较小时:信号平滑度较低,但灵敏度较高;

N值的选取:一般流量,N=12;压力:N=4

(3)特点 优点:适合对一般具有随机干扰的信号(即信号在某一数据范围附近上下波动)进行滤波缺点:不适合待测量变换较快或要求数据计算速度较快的实时控制,较浪费RAM (4)例程 int Filter_Value; // 算术平均滤波法 #define FILTER_N 12 int Filter() { int i; int filter_sum = 0; for(i = 0; i char count = 0; int sum = 0; value_buf[i++] = get_ad(); if(i == N) { i = 0; //先进先出 } for(count = 0; count char i = 0, j = 0, temp = 0; char value_buf[N]; int sum = 0; for(i = 0; i for(i = 0; i temp = value_buf[i]; value_buf[i] = value_buf[i + 1]; value_buf[i + 1] = temp; } } } for(i = 1; i 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; char sum_coe = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12; char filter(void) { char i = 0; char value_buf[N]; int sum = 0; for(i = 0; i sum += value_buf[i] * coe[i]; } return (char)(sum / sum_coe); } 8. 消抖滤波法 (1)原理 设置一个滤波计数器,将每次采样值与当前有效值比较;如果采样值=当前有效值,计数器清零;如果不相等,则计数器+1,并判断计数器是否溢出;如果计数器溢出,则将本次值替换当前有效值,并清零计数器; (2)特点 优点:对待测量缓慢变化的参数有较好滤波效果,可避免在临界值附近控制器的反复开关跳动或者显示器上数字抖动;缺点:不适于快速变化的参数测量,如果计数器溢出的采样恰好是干扰值,则会将干扰值当做有效值引入系统; (3)例程 #define N 12 char filter(void) { char i = 0; char new_value = 0, value = 0; new_value = get_ad(); while(value != new_value) { i++; if(i > N) { return new_value; } delay(); new_value = get_ad(); } return value; } 9. 限幅消抖滤波法 (1)原理

相当于“限幅滤波法”+“消抖滤波法”;

先限幅,后消抖。

(2)特点 优点:继承了“限幅”和“消抖”的优点,改进了“消抖滤波法”中的某些缺陷,避免将干扰值导入系统;缺点:不适合待测量变换快速的场合 (3)例程 int Filter_Value; int Value; // 限幅消抖滤波法 #define FILTER_A 1 #define FILTER_N 5 int i = 0; int Filter() { int NewValue; int new_value; NewValue = Get_AD(); if(((NewValue - Value) > FILTER_A) || ((Value - NewValue) > FILTER_A)) new_value = Value; else new_value = NewValue; if(Value != new_value) { i++; if(i > FILTER_N) { i = 0; Value = new_value; } } else i = 0; return Value; } 10. 一阶滞后滤波法 (1)原理

取 α = ( 0 , 1 ) α=(0,1) α=(0,1), f i l t e r d a t a = ( 1 − α ) 本 次 采 样 值 + α 上 次 滤 波 结 果 filter_{data} = (1-\alpha)本次采样值+\alpha 上次滤波结果 filterdata​=(1−α)本次采样值+α上次滤波结果

(2)特点 优点:对周期性干扰具有良好的抑制作用,适合波动频率较高的场合;缺点:有相位滞后,灵敏度低,滞后程度取决于α的值,不能消除滤波频率高于采样频率1/2的干扰信号 (3)例程 int Filter_Value; int Value; // 一阶滞后滤波法 #define FILTER_A 0.01 int Filter() { int NewValue; NewValue = Get_AD(); Value = (int)((float)NewValue * FILTER_A + (1.0 - FILTER_A) * (float)Value); return Value; }

本文转自临远科技-熊冰乎文​五大滤波算法原理、场景及实践及嵌入式基地乎文常见的滤波算法(C语言),侵权请联系



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有