"十种经典滤波方式-C语言" 本文将对十种经典滤波方式-C语言进行详细的解析和介绍,从滤波算法到代码实现,旨在提供一个有价值的参考借鉴资源。 1. 限幅滤波算法 限幅滤波算法是一种简单且有效的滤波方式。其原理是根据经验判断,确定两次采样允许的最大偏差值(设定为 A),每次检测到新值时判断:如果本次值与上次值之差 <= A,则本次值有效,如果本次值与上次值之差 > A,则本次值无效,放弃本次值,用上次值代替本次值。 优点:能有效克服因偶然因素引起的脉冲干扰。 缺点:无法抑制那种周期性的干扰,平滑度差。 代码实现: ```cpp #define A 10 char value; char filter() { char new_value; new_value = get_ad(); if ( ( new_value - value > A ) || ( value - new_value > A ) ) return value; return new_value; } ``` 2. 中位值滤波法 中位值滤波法是一种基于统计学的滤波方式。其原理是连续采样 N 次(N 取奇数),把 N 次采样值按大小排列,取中间值为本次有效值。 优点:能有效克服因偶然因素引起的波动干扰,对温度、液位的变化缓慢的被测参数有良好的滤波效果。 缺点:对流量、速度等快速变化的参数不宜。 代码实现: ```cpp #define N 11 char filter() { char value_buf[N]; char count, i, j, temp; for ( count = 0; count < N; count++) { value_buf[count] = get_ad(); delay(); } for ( j = 0; j < N - 1; j++) { for ( i = 0; i < N - j; i++) { if ( value_buf[i] > value_buf[i + 1] ) { temp = value_buf[i]; value_buf[i] = value_buf[i + 1]; value_buf[i + 1] = temp; } } } return value_buf[(N - 1) / 2]; } ``` 3. 算术平均滤波 算术平均滤波是一种简单且有效的滤波方式。其原理是连续取 N 个采样值进行平均运算,N 值较大时:信号平滑度较高,但灵敏度较低;N 值较小时:信号平滑度较低,但灵敏度较高。 优点:适应于对一般具有随机干扰的信号进行滤波,这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动。 缺点:对于测量速度较慢或要求数据计算速度较快的实时控制并不适用,比较浪费 RAM。 代码实现: ```cpp #define N 12 char filter() { int sum = 0; for ( count = 0; count < N; count++) { sum += get_ad(); delay(); } return (char)(sum / N); } ``` 4. 递推平均滤波(滑动平均滤波法) 递推平均滤波是一种基于队列的滤波方式。其原理是把连续取 N 个采样值看成一个队列,队列的长度固定为 N,每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据(先进先出)。把队列中的 N 个数据进行算术平均运算,就可获得新的滤波结果。 优点:对周期性干扰有良好的抑制作用,平滑度高,适应于高频振荡的系统。 缺点:灵敏度低,对偶然出现的脉冲性干扰的抑制作用较差,不易消除由于脉冲干扰所引起打的采样值偏差,不适用于脉冲干扰比较严重的场合,浪费 RAM。 代码实现: ```cpp #define N 12 char value_buf[N]; char i = 0; char filter() { char count; int sum = 0; value_buf[i++] = get_ad(); if ( i == N ) i = 0; for ( count = 0; count < N; count++) { sum += value_buf[count]; } return (char)(sum / N); } ``` 这十种经典滤波方式-C语言提供了一个有价值的参考借鉴资源,旨在帮助开发者更好地理解和应用滤波算法。
剩余8页未读,继续阅读
- 粉丝: 7
- 资源: 34
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- cTrader指标:Variety Period clock control panel:品种周期时钟控制面板
- cTrader指标:Variety Period time switching panel:品种周期时间切换面板
- 字符串遗传算法-excited-JS-plus1S.zippython
- 附件文件下载安装啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
- sdram verilog 代码
- GNOME-Dia-Diagram-Editor-0.97.1-1-Win32-Zip-2010-02-07.tar.gz
- 80删除有序数组中的重复项 II.zip
- 79单词搜索.zip(算法)
- GNOME-Dia-Diagram-Editor-Shapes-Repository-20130624.tar.gz
- GNOME-Dia-Diagram-Editor-0.97.3-13.1-Linux(rpm)-2024-09-13.zip