10种简单的数值滤波方法

合集下载

(整理)几种滤波的经典算法.

(整理)几种滤波的经典算法.
MACS=*PdelIn;
OP2=1068; //FilterCoeff4[4];
MACS=*(PdelIn+1);
OP2=8; //FilterCoeff4[3];
MACS=*(PdelIn+2);
OP2=-2001;//FilterCoeff4[2];
MACS=*(PdelIn+3);
OP2=8; //FilterCoeff4[1];
}
8、加权递推平均滤波法
/* coe数组为加权系数表,存在程序存储区。*/
#define N 12
char code coe[N] = {1,2,3,4,5,6,7,8,9,10,11,12};
char code sum_coe = 1+2+3+4+5+6+7+8+9+10+11+12;
char filter()
if ( i == N ) i = 0;
for ( count=0;count<N,COUNT++)
sum = value_buf[count];
return (char)(sum/N);
}
5、中位值平均滤波法(又称防脉冲干扰平均滤波法)
/*
*/
#define N 12
char filter()
{
char count,i,j;
delay();
}
return (char)(sum/N);
}
4、递推平均滤波法(又称滑动平均滤波法)
/*
*/
#define N 12
char value_buf[N];

常用的八种数字滤波算法

常用的八种数字滤波算法

常用的8种数字滤波算法摘要:分析了采用数字滤波消除随机干扰的优点,详细论述了微机控制系统中常用的8种数字滤波算法,并讨论了各种数字滤波算法的适用范围。

关键词:数字滤波;控制系统;随机干扰;数字滤波算法1引言在微机控制系统的模拟输入信号中,一般均含有各种噪声和干扰,他们来自被测信号源本身、传感器、外界干扰等。

为了进行准确测量和控制,必须消除被测信号中的噪声和干扰。

噪声有2大类:一类为周期性的,其典型代表为50 Hz 的工频干扰,对于这类信号,采用积分时间等于20 ms整倍数的双积分A/D转换器,可有效地消除其影响;另一类为非周期的不规则随机信号,对于随机干扰,可以用数字滤波方法予以削弱或滤除。

所谓数字滤波,就是通过一定的计算或判断程序减少干扰信号在有用信号中的比重,因此他实际上是一个程序滤波。

数字滤波器克服了模拟滤波器的许多不足,他与模拟滤波器相比有以下优点:(1)数字滤波器是用软件实现的,不需要增加硬设备,因而可靠性高、稳定性好,不存在阻抗匹配问题。

(2)模拟滤波器通常是各通道专用,而数字滤波器则可多通道共享,从而降低了成本。

(3)数字滤波器可以对频率很低(如0.01 Hz)的信号进行滤波,而模拟滤波器由于受电容容量的限制,频率不可能太低。

(4)数字滤波器可以根据信号的不同,采用不同的滤波方法或滤波参数,具有灵活、方便、功能强的特点。

2 常用数字滤波算法数字滤波器是将一组输入数字序列进行一定的运算而转换成另一组输出数字序列的装置。

设数字滤波器的输入为X(n),输出为Y(n),则输入序列和输出序列之间的关系可用差分方程式表示为:其中:输入信号X(n)可以是模拟信号经采样和A/D变换后得到的数字序列,也可以是计算机的输出信号。

具有上述关系的数字滤波器的当前输出与现在的和过去的输入、过去的输出有关。

由这样的差分方程式组成的滤波器称为递归型数字滤波器。

如果将上述差分方程式中bK取0,则可得:说明输出只和现在的输入和过去的输入有关。

限幅平均滤波法计算公式

限幅平均滤波法计算公式

限幅平均滤波法计算公式限幅平均滤波法1. 什么是限幅平均滤波法?限幅平均滤波法是一种常用的信号滤波方法,它能够有效地平滑噪声干扰,提取出所需的有效信号。

该方法通过设置阈值,将信号中的异常值(噪声)排除掉,再对剩余数值进行平均,从而得到平滑后的信号。

2. 计算公式主要的计算公式如下:if |Current_Value - Previous_Value| > Threshold:Filtered_Value = Previous_Valueelse:Filtered_Value = (Current_Value + (n-1)*Filtered_Val ue) / n其中,Current_Value为当前采样点的数值,Previous_Value 为上一个采样点的数值,Threshold为设定的阈值,Filtered_Value为滤波后的数值,n为采样点数。

3. 解释说明限幅平均滤波法的主要思想是:将当前采样点的数值与前一个采样点的数值进行比较,如果差值超过设定的阈值,说明该点可能受到噪声的干扰,因此将该点的数值替换为前一个采样点的数值。

如果差值未超过阈值,说明该点的数值较为稳定,将当前采样点的数值与过去的滤波样本进行平均处理,得到平滑后的数值。

例如,对以下数据进行限幅平均滤波法处理:采样点数: 1 2 3 4 5测量数值: 10 5 8 12 7阈值: 3滤波样本数: 3计算过程如下:•第一个采样点10不需要进行滤波,直接作为滤波结果。

•第二个采样点5与前一个采样点的差值为5,超过了设定的阈值3,因此将该点的数值替换为前一个采样点的数值10。

•第三个采样点8与前一个采样点的差值为2,未超过阈值,将该点的数值与前一个采样点的平均值进行滤波,得到滤波结果为(8+10)/ 2 = 9。

•第四个采样点12与前一个采样点的差值为4,未超过阈值,将该点的数值与过去两个采样点的平均值进行滤波,得到滤波结果为(12+9+10)/ 3 = 。

单片机数字滤波算法

单片机数字滤波算法

单片机主要作用是控制外围的器件,并实现一定的通信和数据处理。

但在某些特定场合,不可避免地要用到数学运算,尽管单片机并不擅长实现算法和进行复杂的运算。

下面主要是介绍如何用单片机实现数字滤波。

在单片机进行数据采集时,会遇到数据的随机误差,随机误差是由随机干扰引起的,其特点是在相同条件下测量同一量时,其大小和符号会现无规则的变化而无法预测,但多次测量的结果符合统计规律。

为克服随机干扰引起的误差,硬件上可采用滤波技术,软件上可采用软件算法实现数字滤波。

滤波算法往往是系统测控算法的一个重要组成部分,实时性很强。

1采用数字滤波算法克服随机干扰的误差具有以下优点:1.数字滤波无需其他的硬件成本,只用一个计算过程,可靠性高,不存在阻抗匹配问题。

尤其是数字滤波可以对频率很低的信号进行滤波,这是模拟滤波器做不到的。

2.数字滤波使用软件算法实现,多输入通道可共用一个滤波程序,降低系统开支。

3.只要适当改变滤波器的滤波程序或运算,就能方便地改变其滤波特性,这对于滤除低频干扰和随机信号会有较大的效果。

4.在单片机系统中常用的滤波算法有限幅滤波法、中值滤波法、算术平均滤波法、加权平均滤波法、滑动平均滤波等。

2限幅滤波算法该运算的过程中将两次相邻的采样相减,求出其增量,然后将增量的绝对值,与两次采样允许的最大差值A进行比较。

A的大小由被测对象的具体情况而定,如果小于或等于允许的最大差值,则本次采样有效;否则取上次采样值作为本次数据的样本。

算法的程序代码如下:#define A //允许的最大差值char data; //上一次的数据char filter(){char datanew; //新数据变量datanew=get_data(); //获得新数据变量if((datanew-data)>A||(data-datanew>A))return data;elsereturn datanew;}说明:限幅滤波法主要用于处理变化较为缓慢的数据,如温度、物体的位置等。

DSP几种滤波算法比较

DSP几种滤波算法比较

第1种方法限幅滤波法(又称程序判断滤波法)A 方法根据经验判断,确定两次采样允许的最大偏差值(设为A)每次检测到新值时判断:如果本次值与上次值之差<=A,则本次值有效如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值B优点能有效克服因偶然因素引起的脉冲干扰C 缺点无法抑制那种周期性的干扰平滑度差第2种方法中位值滤波法A方法连续采样N次(N取奇数)把N次采样值按大小排列取中间值为本次有效值B优点能有效克服因偶然因素引起的波动干扰对温度、液位的变化缓慢的被测参数有良好的滤波效果C缺点对流量、速度等快速变化的参数不宜第3种方法算术平均滤波法A方法连续取N个采样值进行算术平均运算N值较大时:信号平滑度较高,但灵敏度较低N值较小时:信号平滑度较低,但灵敏度较高N值的选取:一般流量,N=12;压力:N=4B优点适用于对一般具有随机干扰的信号进行滤波这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动C缺点对于测量速度较慢或要求数据计算速度较快的实时控制不适用比较浪费RAM第4种方法递推平均滤波法(又称滑动平均滤波法)A方法把连续取N个采样值看成一个队列队列的长度固定为N每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据.(先进先出原则)把队列中的N个数据进行算术平均运算,就可获得新的滤波结果N值的选取:流量,N=12;压力:N=4;液面,N=4~12;温度,N=1~4B优点对周期性干扰有良好的抑制作用,平滑度高适用于高频振荡的系统C缺点灵敏度低对偶然出现的脉冲性干扰的抑制作用较差不易消除由于脉冲干扰所引起的采样值偏差不适用于脉冲干扰比较严重的场合比较浪费RAM第5种方法中位值平均滤波法(又称防脉冲干扰平均滤波法)A方法相当于“中位值滤波法”+“算术平均滤波法”连续采样N个数据,去掉一个最大值和一个最小值然后计算N-2个数据的算术平均值N值的选取:3~14B优点融合了两种滤波法的优点对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差C缺点测量速度较慢,和算术平均滤波法一样比较浪费RAM第6种方法限幅平均滤波法相当于“限幅滤波法”+“递推平均滤波法” 每次采样到的新数据先进行限幅处理再送入队列进行递推平均滤波处理B 优点融合了两种滤波法的优点对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差C 缺点比较浪费RAM第7种方法一阶滞后滤波法A方法取a=0~1本次滤波结果=(1-a)*本次采样值+a*上次滤波结果B优点对周期性干扰具有良好的抑制作用适用于波动频率较高的场合C缺点相位滞后,灵敏度低滞后程度取决于a值大小不能消除滤波频率高于采样频率的1/2的干扰信号第8种方法加权递推平均滤波法A方法是对递推平均滤波法的改进,即不同时刻的数据加以不同的权通常是,越接近现时刻的资料,权取得越大给予新采样值的权系数越大,则灵敏度越高,但信号平滑度越低B优点适用于有较大纯滞后时间常数的对象和采样周期较短的系统C缺点对于纯滞后时间常数较小,采样周期较长,变化缓慢的信号不能迅速反应系统当前所受干扰的严重程度,滤波效果差第9种方法消抖滤波法A方法设置一个滤波计数器将每次采样值与当前有效值比较:如果采样值=当前有效值,则计数器清零如果采样值<>当前有效值,则计数器+1,并判断计数器是否>=上限N(溢出)如果计数器溢出,则将本次值替换当前有效值,并清计数器B优点对于变化缓慢的被测参数有较好的滤波效果,可避免在临界值附近控制器的反复开/关跳动或显示器上数值抖动C缺点对于快速变化的参数不宜如果在计数器溢出的那一次采样到的值恰好是干扰值,则会将干扰值当作有效值导入系统第10种方法限幅消抖滤波法A方法相当于“限幅滤波法”+“消抖滤波法”先限幅后消抖B优点继承了“限幅”和“消抖”的优点改进了“消抖滤波法”中的某些缺陷,避免将干扰值导入系统C缺点对于快速变化的参数不宜第11种方法IIR数字滤波器A方法确定信号带宽,滤之。

中位值平均滤波法

中位值平均滤波法

中位值平均滤波法中位值平均滤波法是一种数字信号处理方法,通常用于去除信号中的噪声。

该方法将一组数据(例如一个信号的采样值)进行排序,然后选取其中位数作为新的数值。

该方法相对于简单平均滤波法和加权平均滤波法来说,对于突然出现的噪声有更好的抑制效果。

一、简介中位值平均滤波法是一种数字信号处理方法,通常用于去除信号中的噪声。

该方法通过将一组数据进行排序,并选取其中位数作为新的数值来实现。

二、原理中位值平均滤波法的原理比较简单,其基本步骤如下:1. 将一组数据进行排序;2. 选取其中位数作为新的数值。

在这个过程中,我们需要确定选择哪个位置上的元素作为中位数。

通常情况下,我们会选择第 n/2 个元素作为中位数(其中 n 表示数据集合大小)。

如果 n 是偶数,则可以选择第 n/2 和 (n/2)+1 个元素之间的平均值作为中位数。

三、优点相对于简单平均滤波法和加权平均滤波法来说,中位值平均滤波法的优点主要包括以下几个方面:1. 对于突然出现的噪声有更好的抑制效果;2. 不需要知道信号的统计特性,适用于各种类型的信号;3. 适用于离散数据,不需要对数据进行连续化处理。

四、缺点中位值平均滤波法相对于其他滤波方法也存在一些缺点,主要包括以下几个方面:1. 算法复杂度较高,需要进行排序操作;2. 无法处理周期性噪声;3. 对于信号中存在多个峰值的情况,可能会导致滤波结果失真。

五、应用中位值平均滤波法在实际应用中被广泛使用。

例如,在传感器信号处理、音频信号处理、图像处理等领域都有着重要的应用。

六、总结中位值平均滤波法是一种常见的数字信号处理方法,其优点包括对突然出现的噪声有更好的抑制效果、不需要知道信号统计特性以及适用于离散数据等。

但是该方法也存在一些缺点,如算法复杂度较高、无法处理周期性噪声等。

在实际应用中,我们需要根据具体情况选择合适的滤波方法来处理信号中的噪声。

plc中值滤波编程实例

plc中值滤波编程实例

plc中值滤波编程实例PLC中值滤波编程实例在工业自动化领域中,PLC(可编程逻辑控制器)被广泛应用于控制和监测系统。

其中,值滤波是一种常用的信号处理方法,用于去除噪声和异常值,提高系统的稳定性和可靠性。

本文将通过一个编程实例,介绍如何在PLC中实现值滤波。

让我们以一个简单的温度传感器为例,来说明值滤波的应用。

在工业过程中,温度传感器通常会受到环境噪声和其他干扰因素的影响,导致测量值出现波动或异常值。

为了获取更加稳定和可靠的温度数值,我们可以使用值滤波方法。

在PLC编程中,我们可以通过以下步骤来实现值滤波:1. 读取传感器信号:首先,PLC需要读取温度传感器的模拟信号。

这可以通过模拟输入模块来实现,例如使用PLC的模拟输入卡来连接传感器并读取模拟信号。

2. 设定滤波窗口大小:滤波窗口大小是值滤波的一个重要参数,用于确定参与计算的数据点数量。

窗口大小越大,滤波效果越平滑,但响应时间也会延迟。

根据实际应用需求,我们可以根据经验或实验来选择合适的窗口大小。

3. 数据存储和更新:PLC需要创建一个数据存储区来保存滤波窗口中的数据。

可以使用数组或队列等数据结构来实现,每次读取到新的传感器数据时,将其存储在数据存储区中,并更新滤波窗口。

4. 值滤波计算:根据滤波窗口中的数据,PLC可以进行值滤波计算。

最简单的值滤波方法是中值滤波,即取滤波窗口中所有数据的中间值作为滤波结果。

这可以通过将数据排序并取中间值来实现。

5. 输出滤波结果:最后,PLC将滤波结果输出到控制系统中,用于后续的控制和监测操作。

可以通过模拟输出模块将滤波结果转换为模拟信号输出,或者通过数字输出模块将滤波结果转换为数字信号输出。

以上是一个基本的值滤波编程实例,在实际应用中,还可以根据需要进行优化和改进。

例如,可以使用加权平均滤波等其他滤波算法,根据不同的应用场景来选择合适的滤波方法。

还需要考虑滤波窗口的更新频率、滤波结果的精度和响应时间等因素。

(完整版)经典滤波算法及C语言程序

(完整版)经典滤波算法及C语言程序

经典的滤波算法(转)1、限幅滤波法(又称程序判断滤波法)A、方法:根据经验判断,确定两次采样允许的最大偏差值(设为A)每次检测到新值时判断:如果本次值与上次值之差<=A,则本次值有效如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值B、优点:能有效克服因偶然因素引起的脉冲干扰C、缺点无法抑制那种周期性的干扰平滑度差2、中位值滤波法A、方法:连续采样N次(N取奇数)把N次采样值按大小排列取中间值为本次有效值B、优点:能有效克服因偶然因素引起的波动干扰对温度、液位的变化缓慢的被测参数有良好的滤波效果C、缺点:对流量、速度等快速变化的参数不宜3、算术平均滤波法A、方法:连续取N个采样值进行算术平均运算N值较大时:信号平滑度较高,但灵敏度较低N值较小时:信号平滑度较低,但灵敏度较高N值的选取:一般流量,N=12;压力:N=4B、优点:适用于对一般具有随机干扰的信号进行滤波这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动C、缺点:对于测量速度较慢或要求数据计算速度较快的实时控制不适用比较浪费RAM递推平均滤波法对偶然出现的脉冲性干扰的抑制作用较差4、递推平均滤波法(又称滑动平均滤波法)A、方法:把连续取N个采样值看成一个队列队列的长度固定为N每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据.(先进先出原则)把队列中的N个数据进行算术平均运算,就可获得新的滤波结果N值的选取:流量,N=12;压力:N=4;液面,N=4~12;温度,N=1~4B、优点:对周期性干扰有良好的抑制作用,平滑度高适用于高频振荡的系统C、缺点:灵敏度低对偶然出现的脉冲性干扰的抑制作用较差不易消除由于脉冲干扰所引起的采样值偏差不适用于脉冲干扰比较严重的场合比较浪费RAM5、中位值平均滤波法(又称防脉冲干扰平均滤波法)A、方法:相当于“中位值滤波法”+“算术平均滤波法”连续采样N个数据,去掉一个最大值和一个最小值然后计算N-2个数据的算术平均值N值的选取:3~14B、优点:融合了两种滤波法的优点对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差C、缺点:测量速度较慢,和算术平均滤波法一样比较浪费RAM6、限幅平均滤波法A、方法:相当于“限幅滤波法”+“递推平均滤波法”每次采样到的新数据先进行限幅处理,再送入队列进行递推平均滤波处理B、优点:融合了两种滤波法的优点对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差C、缺点:比较浪费RAM7、一阶滞后滤波法A、方法:取a=0~1本次滤波结果=(1-a)*本次采样值+a*上次滤波结果B、优点:对周期性干扰具有良好的抑制作用适用于波动频率较高的场合C、缺点:相位滞后,灵敏度低滞后程度取决于a值大小不能消除滤波频率高于采样频率的1/2的干扰信号8、加权递推平均滤波法A、方法:是对递推平均滤波法的改进,即不同时刻的数据加以不同的权通常是,越接近现时刻的数据,权取得越大。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机利用软件抗干扰的几种滤波方法1、限幅滤波法(又称程序判断滤波法)A、方法:根据经验判断,确定两次采样允许的最大偏差值(设为A),每次检测到新值时判断:如果本次值与上次值之差<=A,则本次值有效;如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值。

B、优点:能有效克服因偶然因素引起的脉冲干扰。

C、缺点无法抑制那种周期性的干扰,平滑度差。

2、中位值滤波法A、方法:连续采样N次(N取奇数),把N次采样值按大小排列,取中间值为本次有效值。

B、优点:能有效克服因偶然因素引起的波动干扰,对温度、液位的变化缓慢的被测参数有良好的滤波效果。

C、缺点:对流量、速度等快速变化的参数不宜。

3、算术平均滤波法A、方法:连续取N个采样值进行算术平均运算,N值较大时:信号平滑度较高,但灵敏度较低;N值较小时:信号平滑度较低,但灵敏度较高;N值的选取:一般流量,N=12;压力:N=4。

B、优点:适用于对一般具有随机干扰的信号进行滤波,这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动。

C、缺点:对于测量速度较慢或要求数据计算速度较快的实时控制不适用,比较浪费RAM。

4、递推平均滤波法(又称滑动平均滤波法)。

A、方法:把连续取N个采样值看成一个队列,队列的长度固定为N,每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据.(先进先出原则),把队列中的N个数据进行算术平均运算,就可获得新的滤波结果。

N值的选取:流量,N=12;压力:N=4;液面,N=4~12;温度,N=1~4。

B、优点:对周期性干扰有良好的抑制作用,平滑度高,适用于高频振荡的系统C、缺点:灵敏度低,对偶然出现的脉冲性干扰的抑制作用较差,不易消除由于脉冲干扰所引起的采样值偏差,不适用于脉冲干扰比较严重的场合,比较浪费RAM。

5、中位值平均滤波法(又称防脉冲干扰平均滤波法)A、方法:相当于“中位值滤波法”+“算术平均滤波法”,连续采样N个数据,去掉一个最大值和一个最小值,然后计算N-2个数据的算术平均值,N值的选取:3~14,B、优点:融合了两种滤波法的优点,对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差。

C、缺点:测量速度较慢,和算术平均滤波法一样,比较浪费RAM。

6、限幅平均滤波法A、方法:相当于“限幅滤波法”+“递推平均滤波法”,每次采样到的新数据先进行限幅处理,再送入队列进行递推平均滤波处理B、优点:融合了两种滤波法的优点,对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差。

C、缺点:比较浪费RAM。

7、一阶滞后滤波法A、方法:取a=0~1,本次滤波结果=(1-a)*本次采样值+a*上次滤波结果。

B、优点:对周期性干扰具有良好的抑制作用,适用于波动频率较高的场合。

C、缺点:相位滞后,灵敏度低,滞后程度取决于a值大小,不能消除滤波频率高于采样频率的1/2的干扰信号。

8、加权递推平均滤波法A、方法:是对递推平均滤波法的改进,即不同时刻的数据加以不同的权,通常是,越接近现时刻的数据,权取得越大。

给予新采样值的权系数越大,则灵敏度越高,但信号平滑度越低。

B、优点:适用于有较大纯滞后时间常数的对象,和采样周期较短的系统。

C、缺点:对于纯滞后时间常数较小,采样周期较长,变化缓慢的信号,不能迅速反应系统当前所受干扰的严重程度,滤波效果差9、消抖滤波法A、方法:设置一个滤波计数器,将每次采样值与当前有效值比较:如果采样值=当前有效值,则计数器清零;如果采样值<>当前有效值,则计数器+1,并判断计数器是否>=上限N(溢出);如果计数器溢出,则将本次值替换当前有效值,并清计数器。

B、优点:对于变化缓慢的被测参数有较好的滤波效果,可避免在临界值附近控制器的反复开/关跳动或显示器上数值抖动。

C、缺点:对于快速变化的参数不宜,如果在计数器溢出的那一次采样到的值恰好是干扰值,则会将干扰值当作有效值导入系统。

10、限幅消抖滤波法A、方法:相当于“限幅滤波法”+“消抖滤波法”,先限幅,后消抖。

B、优点:继承了“限幅”和“消抖”的优点,改进了“消抖滤波法”中的某些缺陷,避免将干扰值导入系统。

C、缺点:对于快速变化的参数不宜。

参考程序,假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad();1、限副滤波/* A值可根据实际情况调整value为有效值,new_value为当前采样值滤波程序返回有效的实际值 */ #define A 10char 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值可根据实际情况调整排序采用冒泡法*/#define N 11char 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>value_buf[i+1] ){temp = value_buf;value_buf = value_buf[i+1];value_buf[i+1] = temp;}}}return value_buf[(N-1)/2];}3、算术平均滤波法/**/#define N 12char filter(){int sum = 0;for ( count=0;count<N;count++){sum + = get_ad();return (char)(sum/N);}4、递推平均滤波法(又称滑动平均滤波法)/**/#define N 12char 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);}楼主的滑动滤波法不对,应该是:#define N 12char value_buf[N];char i=0;int sum=0;char filter(){char Temp_Value;Temp_Value = get_ad();sum += value_buf[i] - Temp_Value;value_buf[i++] = Temp_Value;if ( i == N ) i = 0;return (char)(sum/N);}//注意 value_buf全部初始化为第一次采集的值!!5、中位值平均滤波法(又称防脉冲干扰平均滤波法)/**/#define N 12char filter(){char count,i,j;char value_buf[N];int sum=0;for (count=0;count<N;count++){value_buf[count] = get_ad();for (j=0;j<N-1;j++){for (i=0;i<N-j;i++){if ( value_buf>value_buf[i+1] ){temp = value_buf;value_buf = value_buf[i+1];value_buf[i+1] = temp;}}}for(count=1;count<N-1;count++)sum += value[count];return (char)(sum/(N-2));}中位值滤波,为什么要排序?简单的东西,复杂化了。

中位值无非就是去掉最大最小值而已,排序太麻烦了。

贴上我自己的做法,给大家参考u16 GetTheMiddleValue(u16 *Pointer,u8 Length){u8 i;u32 temp32 = 0;u16 MaxVal = 0x0000;u16 MinVal = 0xffff;if ( Length>2 ){for ( i=0;i<Length;i++ ){if ( Pointer[i]> MaxVal){MaxVal = Pointer[i];}if ( Pointer[i]<MinVal ){MinVal = Pointer[i];}temp32 += Pointer[i];}temp32 = (temp32-MaxVal-MinVal)/(Length-2);}else{for ( i=0;i<Length;i++ ){temp32 += Pointer[i];}temp32 = temp32/Length;}return (u16)temp32;}6、限幅平均滤波法/**/略参考子程序1、37、一阶滞后滤波法/* 为加快程序处理速度假定基数为100,a=0~100 */#define a 50char value;char filter(){char new_value;new_value = get_ad();return (100-a)*value + a*new_value;}8、加权递推平均滤波法/* coe数组为加权系数表,存在程序存储区。

*/#define N 12char code coe[N] = {1,2,3,4,5,6,7,8,9,10,11,12};char code sum_coe = 1+2+3+4+5+6+7+8+9+10+11+12;char filter(){char count;char value_buf[N];int sum=0;for (count=0,count<N;count++){value_buf[count] = get_ad();delay();}for (count=0,count<N;count++)sum += value_buf[count]*coe[count];return (char)(sum/sum_coe);}9、消抖滤波法#define N 12char filter(){char count=0;char new_value;new_value = get_ad();while (value !=new_value);{count++;if (count>=N) return new_value;delay();new_value = get_ad();}return value;}10、限幅消抖滤波法/**/略参考子程序1、9。

相关文档
最新文档