f_med_filter.c

来自「数字滤波算法; 中间位置算法 算术平均值算法」· C语言 代码 · 共 58 行

C
58
字号
void  F_Med_Filter(double *ArrayData,int PointNum,int FilterSignal)
{ 
    double  MedAry[6],FAData[4000],TValue;
    int i,j,k,jj;
    if(FilterSignal==4)
      TValue = 3;
    else if(FilterSignal==2)
      TValue = 200;
    else
      TValue = 50;
      
      //中位置滤波算法
    for(i=0;i<PointNum - 2;i++)
    {
        for(j=i-2;j<=i+2;j++)
        {
           if(j>=0&&j<PointNum)
              MedAry[j-i+2] = *(ArrayData+j);
           else
              MedAry[j-i+2] = *(ArrayData+i);
        }
        for(jj=0;jj<2;jj++)
        {
           k=F_GetArrayMinValueDPos(MedAry,0,5);
           MedAry[k] = 999999.99;
        }
        k=F_GetArrayMinValueDPos(MedAry,0,5);

        if(*(ArrayData+i)<=TValue)  //保持尖峰
           *(ArrayData+i) = MedAry[k];
    }
    
    
    //算术平均算法
    	double MedAry[10];Total;Aver
     for(i=0;i<PointNum - 4;i++)
    {
        for(j=i-4;j<=i+4;j++)
        {
           if(j>=0&&j<PointNum)
              MedAry[j-i+4] = *(ArrayData+j);
           else
              MedAry[j-i+4] = *(ArrayData+i);
        }
        Total = 0;
        for(jj=0;jj<10;jj++)
        {
          Total = Total + MedAry[jj];
        }
        Aver = Total/9;

        if(*(ArrayData+i)<=TValue)  //保持尖峰
           *(ArrayData+i) = Aver;
    }
  
 
    
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?