首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

10种软件滤波6~10

10种软件滤波6~10

六、递推中位值平均滤波法
1、相当于“中位值滤波法”+“递推平均滤波法”。这种方法把连续N个值看成一个队列,每次采集到一个新数据放入队尾,并扔掉原来队首的值。 把队列中的N个数据先去掉一个最大值和最小值,然后计算N-2个数据的平均值。
2、例程
char Filter()
{
  char max.min;
  int sum;
  char i;
  QUEUE[0]=NewData;
  max=QUEUE[0];
  min=QUEUE[0];
  sum=QUEUE[0];

  for(i=n-1; i!=0; i--)
  {
    if(QUEUE>max)
    {
      max=QUEUE;
    }
    else if(QUEUE<min)
    {
      min=QUEUE;
    }

    sum+=QUEUE;
    QUEUE=QUEUE[i-1];
  }

  i=n-2;
  sum=sum-max-min+i/2;//加入(n-2)/2目的为了四舍五入
  sum=sum/i;
  return(sum);
}

七、限幅平均滤波法
1、相当于“限幅滤波法”+“递推平均滤波法”。每次采样先进行限幅处理,再进行队列平均滤波处理。
2、例程
#define A 10
#define N 12
uchar Data[N];
uchar Limit()
{
  ucahr i,Value,sum;
  Data[N]=GetAD();

  if(((Data[N]-Data[N-1])>A)||((Data[N-1]-Data[N])>A))
  {
    Data[N]=Data[N-1];
  }
  else
  {
    Data[N]=NewValue;
  }

  for(i=0; i<N; i++)
  {
    Data=Data[i+1];
    sum+=Data;
  }

  Value=sum/N;
  return(Value);
}

八、一阶滞后滤波法
1、本次结果滤波结果=a*本次采样值+(1-a)*上次结果。
                    a代表滤波系数,a=0--1。
2、例程

#define a 128
uchar Value;
ucahr OneFactorialFiler()
{
  uchar NewValue;
  uchar ReturnValue;
  NewValue=GetAD();
  ReturnValue=(255-a)*NewValue+a*Value;
  ReturnValue/=255;
  return(ReturnValue);
}

九、加权递推平均滤波法
1、加权递推平均滤波法是对递推平均滤波法的改进,即不同时刻的数据加以不同的权。通常是越接近现时刻的数据,权取得越大。给予新采样值的权系数越大,则灵敏度越高,但信号的平滑度越低。
2、例程
#define N 10
#define CoeSum 55
const Coefficient[N]= {1,2,3,4,5,6,7,8,9,10};
uchar Data[N];
uchar AAGAFilter()
{
  uchar i,Value,sum;
  sum=0;
  Data[N]=GetAD();

  for(i=0; i<N; i++)
  {
    Data=Data[i+1];
    sum+=Data*Coefficient;
  }

  Value=sum/CoeSum;
  return(Value);
}

十、消抖滤波法
1、将每次采样值与当前有效值比较,如果采样值=当前有效值,则计数器清零,否则计数器加1。然后,判断计数器是否>=上限N(溢出)。如果溢出,将本次值替换当前有效值,并清计数器。
2、例程
#define N 20
uchar count;
uchar Value;
uchar Avoid()
{
  uchar NewValue;

  if(NewValue==Value)
  {
    count=0;
  }
  else
  {
    count++;

    if(count>N)
    {
      count=0;
      Value=NewValue;
    }
  }

  return(Value);
}
返回列表