打印

一种滤波方法(类似跳水记分),最近问滤波的网友多,置顶

[复制链接]
7277|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
兰天白云|  楼主 | 2007-5-8 08:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
方法:采集到一组数据,去掉一个最大值,去掉一个最小值
      最后平均得分=???
这种滤波有一个好处,抗干扰很强
以下是例子(对整型数组滤波,共4个数据):
//p-----指向数组首地址
unsigned int lvboi(unsigned int *p)
{unsigned char i;
 unsigned int max,min;
 unsigned long x;
 max=*p;
 min=*p;
 i=3;
 x=*p;
 do
  {p++;
   if((*p)>=max)
    {max=*p;}
   if((*p)<min)
    {min=*p;}
   x=x+(*p);
   i--;
  } 
 while(i);
 x=x-max-min;
 x=x/2;
 for(i=3;i>0;i--)  //这部分可不看
  {p--;
   *(p+1)=*p;
  } 
 return(x);   
来自 2楼
yewuyi| | 2007-5-9 08:42 | 只看该作者

一阶滞后滤波法

    1、方法:
        取a=0~1
        本次滤波结果=(1-a)*本次采样值+a*上次滤波结果
    2、优点:
        对周期性干扰具有良好的抑制作用
        适用于波动频率较高的场合
    3、缺点:
       相位滞后,灵敏度低
       滞后程度取决于a值大小,a值越小,滞后程度越低,但滤波效果也降低
       不能消除滤波频率高于采样频率的1/2的干扰信号,结合前面的求均值采样,那么采样频率可以适当提高,如果采样频率适当,还可起到陷波器的作用,如在一些应用中滤50HZ的工频干扰。


在应用中,还应该注意要解决设备启动时,显示值与真实值之间需要较长时间才能平衡的问题,很多客户不大接受这个现象,俺一般是在设备启动后,单执行一次均值滤波,得到结果后,从第二个周期开始才执行一阶滞后滤波。

使用特权

评论回复
板凳
yewuyi| | 2007-5-8 10:48 | 只看该作者

要想抗干扰更强……

在这个基础上再加入一阶滞后滤波,滤波一般都是以时间做代价的,对于纯滞后的系统测量,加入一阶滞后滤波效果将会非常非常的好……

使用特权

评论回复
地板
兰天白云|  楼主 | 2007-5-8 21:02 | 只看该作者

本人对一阶滞后滤波理解不够

能不能举了例子?

使用特权

评论回复
5
xieyuanbin| | 2007-5-9 08:58 | 只看该作者

有点意思了.

欢迎继续讨论.
在要求高速测量,实时处理数据的场合,一般采用移动窗口平均法,不舍去任何数据,在某一时段计算前几次的平均值,一般次数为2的N次方,然后再跟以前的平均值求一次平均.

使用特权

评论回复
6
yewuyi| | 2007-5-9 11:28 | 只看该作者

呵呵,老谢也来点实际经验

如果用一阶滤波的话在高速测量,实时处理数据的场合:
1:解决设备上电时的问题
2:不能再结合均值处理了,因为均值处理本身就已经造成采集滞后,如果再加上一阶滤波,那就完蛋了。
俺一般如果要求滞后<1s,那么基本上肯定不用一阶滤波了,一阶滤波用在象热电偶信号采集上效果不错,信号很弱,很容易被干扰,温度滞后性一般都是10S级以上,呵呵,非常合适。

高速测量,实时处理数据场合,一般还得在硬件上多下功夫才好……

使用特权

评论回复
7
兰天白云|  楼主 | 2007-5-9 20:07 | 只看该作者

热电偶信号,有时也很快

从室温升到500度只有60秒,不大多数是非常慢的


一阶滞后滤波法 

    1、方法:
        取a=0~1
        本次滤波结果=(1-a)*本次采样值+a*上次滤波结果
如果不用浮点数且a很小或很大,会出现数据停止不动的情况 
 

使用特权

评论回复
8
yewuyi| | 2007-5-10 08:33 | 只看该作者

如果不用浮点数且a很小或很大,会出现数据停止不动的情况

数据到达稳定态以后才会出现停止不动的情况,这不就是我们追求的‘稳定’吗?


::热电偶信号,有时也很快从室温升到500度只有60秒!

热电偶信号的均值加一阶滤波处理,一般到不了1S时间。

而且不需要用浮点,转成定点就可以,a的取值原则是可以随便给,但对于MCU来说,一般都向2这个数字靠…… 
 

使用特权

评论回复
9
兰天白云|  楼主 | 2007-5-11 10:17 | 只看该作者

这个好,压力测量就用这个了

在要求高速测量,实时处理数据的场合,一般采用移动窗口平均法,不舍去任何数据,在某一时段计算前几次的平均值,一般次数为2的N次方,然后再跟以前的平均值求一次平均.

使用特权

评论回复
10
oyggj| | 2007-5-11 13:03 | 只看该作者

是呀

ad采样都这样软件数字滤波啊.移动窗口平均法

使用特权

评论回复
11
goothin| | 2007-5-12 08:41 | 只看该作者

又长了知识,谢谢

使用特权

评论回复
12
xieyuanbin| | 2007-5-13 08:46 | 只看该作者

关于浮点的问题.

对于8位单片机来说,浮点实在是勉为其难,我的一般做法是不显示的话,就直接用AD值计算,在电路上做一些适合直接计算AD值的改动.比如,将5V的电压分一分压,使10位AD做出来的值刚好等于1000,如果要显示,可以很简单地转换成相应的"浮点"数.

使用特权

评论回复
13
tty1| | 2007-5-16 17:21 | 只看该作者

以下是转tyw的帖子

10种经典的软件滤波方法(zt) 

10种软件滤波方法 

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、缺点:
        对于快速变化的参数不宜

使用特权

评论回复
14
E_夫子| | 2007-5-18 09:56 | 只看该作者

3位斑竹都在啊,留个名先

学习了,谢谢!

使用特权

评论回复
15
hotpower| | 2007-10-9 00:22 | 只看该作者

俺经常用跳水算法~~~

使用特权

评论回复
16
zhaoyu2005| | 2007-10-11 09:33 | 只看该作者

这个滤波方法俺早用了

但是不知道名字,现在在使用的是两次滤波,就是先采集10个值,这样滤一下得到一个值,10次滤波之后得到的值再采用这样的方法滤一下

使用特权

评论回复
17
楼亮亮| | 2010-1-29 22:48 | 只看该作者
l六个记号

使用特权

评论回复
18
machunshui| | 2010-2-1 08:23 | 只看该作者
我一般一般采取,当前采样值和上一次采样值比较,大于缺省设定值丢弃,连续三次大于缺省设定值,该值被采用

使用特权

评论回复
19
IJK| | 2010-2-4 14:08 | 只看该作者
挺有用,学习了。

使用特权

评论回复
20
xppx1987| | 2012-8-7 09:42 | 只看该作者
为什么测量压力数据的时候采用移动窗口法和跳水算法,滤波得到的数值波动比较大呐~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

115

主题

2962

帖子

7

粉丝