1 数字滤波设计原理
这里有很多种数字滤波方法,我们见选用其中几种来进行设计,如中值滤波、算术平均滤波、加权平均滤波等等。所以下面我将详细介绍它们。
1.1 中值滤波
中位值滤波是先对某一参数连续采样N次(一般N取奇数),然后把N次采样值按从小到大排列,取中间值为本次采样值。
该滤波方法实际上是一种排序方法,我在此采用的是冒泡法排序。由于在冒泡法排序中,每出现一次前者数据大于后者数据,就要进行二者数据的交换。
该算法的样例子程序如下:
#define N 11 //N值可根据实际情况调整
char filter()
{
char value_buf[];
char count,i,j,k,temp;
for(count=0;count value_buf[count]=get_data(); delay(); } for(i=0;i k=i; for(j=i+1;j value_buf[k]=value_buf[i]; value_buf[i]=temp; } return value_buf[(N-1)/2]; } 中位值滤波能有效地克服偶然因素引起的波动或采样器不稳定引起的误码等脉冲干扰。对温度、液位等缓慢变化的被测参数采用此算法能收到良好的滤波效果,但对于流量、压力等快速变化的数据,不宜采用中位值滤波。 1.2 算术平均滤波 算术平均滤波法适用于对一般的具有随机干扰的信号进行滤波。这种信号的特点是信号本身在某一数值范围附近上下波动,如测量流量、液位时经常遇到这种情况。算术平均滤波法是要按输入的N 个采样数据,寻找这样一个Y,使得Y 与各个采样值之间的偏差的平方和最小。 具体实现此算法的子程序如下: #define N 12 char filter() { int count; int sum=0; for(count=0;count sum+=get_ad(); delay(); } return (char)(sum/N); } 算术平均滤波适用于对一般具有随机干扰的信号进行滤波。这种信号的特点是有一个平均值,信号在某一数值范围附近做上下波动,在这种情况下仅取一个采样值做依据显然是不准确的。算术平均滤波对信号的平滑程序完全取决于N,当N较大时,平滑度高,但灵敏度低;当N较小时,平滑度低,但灵敏度高,应视具体情况选取N,以便既少占用计算时间,又达到最好的效果。 1.3 加权平均滤波 在算术平均滤波和移动平均滤波中,N次采样值在输出结果中的权重是均等的,取1/N。用这样的滤波算法,对于时变信号会引入滞后,N值越大,滞后越严重。为了增加新采样数据在移动平均中的权重,以提高系统对当前采样值中所受干扰的灵敏度,可采用加权平均滤波,它是移动平均滤波算法的改进。 加权平均滤波是对连续N次采样值分别乘上不同的加权系统之后再求累加和,加权系统一般先小后大,以突出后面若干采样的效果,加强系统对参数变化趋势的辨识。各个加权系统均为小于1的小数,且满足总和等于1的约束条件。这样,加权运算之后的累加和即为有效采样值。 为方便计算,可取各加权系数均为整数,且总和为256,加权运算后的累加和除以256,即舍去低字节后便是有效采样值。具体的样例子程序如下: //code数组为加权系统表,存在ROM区。 #define N 12 char code jq[N]={1,2,3,4,5,6,7,8,9,10,11,12}; char code sum_jp=1+2+3+4+5+6+7+8+9+10+11+12; char filter_5() { char count; char value_buf[N]; int sum=0; for(count=0;count value_buf[count]=get_data(); delay(); } for(count=0;count return (char)(sum/sum_jq); } 1.4 中位值平均滤波 它相当于是“中位值滤波法”和“算术平均滤波法”的结合。它连续采样N个数据,然后去掉一个最大值和一个最小值,最后计算N-2个数据的算术平均值。一般N值的选取:3-14。 具体算法程序如下: #define N 12 char filter() { char count,i,j; char value_buf[N]; int sum=0; for (count=0;count value_buf[count] = get_ad(); delay(); } for (j=0;j for (i=0;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; } } } for(count=1;count return (char)(sum/(N-2)); } 这种滤波方法兼容了移动平均滤波算法和中位值滤波算法的优点,所以无论对缓慢变化的信号,还是对快速变化的信号,都能取得较好的滤波效果。 1.5 限幅滤波 限幅滤波的基本原理是把两次相邻时刻(n和n-1)的采样值Yn和Yn-1相减,求出其差值,以绝对值表示,然后将这个差值与两次采样允许的最大偏差值ΔY比较,如果两次采样值的差值超过了允许的最大偏差值ΔY,则认为发生了随机干扰,并认为最后一次采样值Yn非法,应予剔除。剔除Yn后,可用Yn-1代替Yn;若未超过允许的最大偏差值范围,则认为本次采样值有效。可用如下公式表示: |Yn-Yn-1|≤ΔY;则Yn有效 |Yn-Yn-1|>ΔY;则Yn-1有效 此算法的样例子程序如下: #define A 10 //A值可根据实际情况调整 char data; //上一次的数据 char filter_1() { char datanew; //新数据变量 datanew=get_data(); //获得新数据 //滤波算法 if ((datanew-data>A)||(data-datanew>A) return data; return datanew; } 该算法主要用于处理变化比较缓慢的数据,如温度、物体的位置等。使用时关键在于最大偏差值的Δy的选择,通常可根据经验获得,也可按照输出参数可能的最大变化速度Vmax及采样周期T来决定ΔY的值,即ΔY=VmaxT。
上一篇:单片机常用滤波算法
下一篇:10种软件滤波方法的及示例程序
推荐阅读最新更新时间:2024-11-09 10:46
设计资源 培训 开发板 精华推荐
- 紧凑型开发套件,带有STM32F407VG和两个mikroBUS插座,用于单击板连接。
- 使用 Infineon Technologies AG 的 OMR9608SF 的参考设计
- 基于 ESP32的32路舵机机器人驱动板
- DC2118A,用于 LTC4040 5Vin、2A 单节锂离子/LiFePO4 降压电池充电器的演示板,具有 2.5A 升压备用电源管理器
- LTC1662IMS8 超低功耗、双 10 位 DAC 在 MSOP 中的典型应用
- BM-70-PICTAIL、BM70 蓝牙 PICtail/PICtail Plus 板旨在模拟 BM70 BLE 模块的功能
- SCV431B 低压精密可调并联稳压器的典型应用
- 使用 ON Semiconductor 的 NCV70522DQ004G 的参考设计
- LTC3256EMSE 高效双路输出电源的典型应用电路
- DC2380A-B,基于 LTC7851EUHH 双路输出、4 相电压模式降压控制器的演示板,7V = VIN = 14V,Vout1 = 1.8V @ 60A,Vout3 = 1.2V @ 60A
- 下载MPS汽车电机控制技术干货,赢【Keep体脂秤、自动洗手机套装、小米保温杯】,开启汽车技术进阶之旅!
- ST工业峰会开启报名中!(10月29日,深圳)
- 3.5\"嵌入式主板给力开团 仅售599元包邮!
- EEWorld Datasheet 伴你同行!快来领取200芯积分福利啦~
- 泰克MDO系列:1招搞定6大仪器,轻松穿越模拟、数字、频域测量
- 看视频答题,玩转幸运大抽奖:Littelfuse汽车电子电路保护知多少
- 有奖直播:AC/DC 在 ATX 及 Server 电源解決方案及应用 报名开始啦!
- 物联网年中大考:无线连接技术知多少?
- 下载有礼|西北模电王《新概念模拟电路》全五册
- 已结束|Maxim IO-Link通信协议设计方案详解,5大优势助你轻松联网!