99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

  • 回復
  • 收藏
  • 點贊
  • 分享
  • 發新帖

電賽常用濾波算法

參加電賽無論做什么都可能涉及到濾波,有硬件濾波和軟件濾波。我給大家分享分享我知道的一些濾波算法。硬件濾波器最后再說,一入濾波深似海幾本書都說不萌白。

先說簡單的我也用過的幾種:(預計一天或者兩天更新一種算法)


第一種:限幅濾波算法 顧名思義就是根據經驗或者一些給定作為一個對比標準與采樣值進行對比,舉個栗子,某系統的傳感器的采樣值根據經驗知兩次只差不能大于A則下一次的采樣值和當前采樣值的差的絕對值不能大于A則數據有效,若大于A則數據舍棄。

C程序如下:

#define A 15;

u8 amplitudeLimiterFilter(u8 oldValue)

{

    u8 newValue = getValue();獲取當前傳感器數據

    if( (newValue - oldValue) > A || (oldValue - newValue) >A))

    {

        return oldValue;

    }

    else

    {

        return newValue;

    }

}

oldValue可以用第一次采樣值或者根據經驗值設定

全部回復(9)
正序查看
倒序查看
2019-02-08 20:13

第二種:中位值濾波

連續采樣A次(A取奇數)然后按值得大小排列 然后取中間值。

這種方法的好處就是能對緩慢變化的被測量(溫度,液體高度等非突變量)進行良好的濾波但是對帶有變化劇烈的突變量效果就不好了

#define A 10

int middleValueFilter()

{

    int value_buf[A];

    int i,j,k,temp;

    for( i = 0; i < A; ++i)

    {

        value_buf[i] = getValue();

        Delay_ms();

    }

    for(j = 0 ; j < A-1; ++j)

    {

        for(k = 0; k

        {

            //從小到大排序,冒泡法排序

            if(value_buf[k] > value_buf[k+1])

            {

                temp = value_buf[k];

                value_buf[k] = value_buf[k+1];

                value_buf[k+1] = temp;

            }

        }

0
回復
2019-02-09 19:21

3. 算數平均濾波

算數平均濾波是取N個數然后進行算數平均運算,這個N的大小就決定了信號的平滑度和信號靈敏性,這種方法對測量速度要求很快的系統不太適用而且需要消耗一定的RAM。下面看一下C程序。

#define  N  15

int Value;

int average()

{

unsigned int sum = 0;

int i;

for(i = 0;i < N;i++)

{

sum+= getValue();

Delay_ms();

}

Value = sum/N;

Return(Value)

}

0
回復
2019-02-10 18:17

第四種:遞推平均濾波(滑動平均濾波)

所謂的遞推平均濾波就是取N組數據進行算數平均濾波然后數組左移一位扔掉第一個數把新采樣到的數據放到數組的最后一位,依次進行。這種算法的好處就是濾波后的波形平滑度很高適用于高頻震蕩系統,缺點是靈敏度很低對脈沖干擾抑制性差,而且出現一次大幅度干擾后不易快速消除干擾,浪費ARM.(浪費ARM的問題可以進行改進一下改進的方法就是不去掉數組第一個數據而是去掉數組的平均值)

//C程序

#define N 20

int value_buf[N];

int moveAverageFilter(int curValue, int *sum, int *curNum)

{

      int i;

      if(*curNum < N)

      {

         value_buf[*curNum] = curValue;

         (*curNum)++;

         sum += curValue;

         retrun (*sum)/(*curNum);

       }

    else

    {

        //每次把后面的值往前移動一位

  //****************************************   

   sum -= value_buf[0];

         sum += curValue;

         for(i = 1; i < N; i++)

         {

             value_buf[i-1] = value_buf[i];

         }

         value_buf[N-1] = curValue;

         return (*sum)/N;

         // **************************************/

         //把新的值放在curNum%N的位置

         sum -= value_buf[*curNum%N];

         sum += curValue;

         value_buf[*curNum%N] = curValue;

         (*curNum)++;

          if(*curNum == 2N)

          {

            (*curNum) = N;

          }

     }

}    

//減去的值是上次的平均值

int moveAverageFilter(int *sum, int curValue, int num, int *curNum)

{

    if(num <= 0)

    {

        return 0;

    }

    else

    {

        if(*curNum < num)

        {

            ++(*curNum);

            *sum = *sum + curValue;

            return (*sum)/(*curNum);

        }

        else

        {

            *sum = *sum - (*sum)/num;

            *sum = (*sum + curValue);

            return *sum/num;

        }

    }

}

0
回復
2019-02-12 13:48
@喔喔嗚嗚
第四種:遞推平均濾波(滑動平均濾波)所謂的遞推平均濾波就是取N組數據進行算數平均濾波然后數組左移一位扔掉第一個數把新采樣到的數據放到數組的最后一位,依次進行。這種算法的好處就是濾波后的波形平滑度很高適用于高頻震蕩系統,缺點是靈敏度很低對脈沖干擾抑制性差,而且出現一次大幅度干擾后不易快速消除干擾,浪費ARM.(浪費ARM的問題可以進行改進一下改進的方法就是不去掉數組第一個數據而是去掉數組的平均值)//C程序#defineN20intvalue_buf[N];intmoveAverageFilter(intcurValue,int*sum,int*curNum){     inti;     if(*curNum
坐等更新
0
回復
2019-02-12 19:19

第五種:中位值平均濾波算法(防脈沖干擾平均濾波法)

相當于“中位值濾波法”+“算術平均濾波法”    

連續采樣N個數據,去掉一個最大值和一個最小值然后計算N-2個數據的算術平均值

融合了兩種濾波的優點。對于偶然出現的脈沖性干擾,可消除有其引起的采樣值偏差。對周期干擾有良好的抑制作用,平滑度高,適于高頻振蕩的系統。

C程序

#define N 10

int middleAverageFilter()

{

    int  i,j;

    int  temp,value,sum = 0;

    int  value_buf[N];

    for(i = 0; i < N; i++)

    {

        value_buf[i] = getValue();

        delay();

    }

      for(j = 0; j < N-1; ++j) //從小到大冒泡排序

    {

        for(i = 0; i < N-j; ++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(i = 1; i < N-1; ++i)

    {

        sum += value_buf[i];

    }

    return sum/(N-2);

}

0
回復
2019-02-13 20:05

第六種:遞推中位值濾波法

優點:對于偶然出現的脈沖性干擾,可消除由其引起的采樣值偏差。對周期性干擾有良好的抑制作用,平滑度高;試用于高頻振蕩的系統。

缺點:測量速度慢

方法:取最近的N個值為一個隊列,當前采樣值放在隊列最后,依次循環。計算時去掉最大值和最小值在取平均值

C程序:

char filter1(char NEW_DATA,char QUEUE[],char n)

{    char max;   

      char min;   

      int sum;  

      char i;   

      QUEUE[0]=NEW_DATA;     //新采樣值入隊列  

      max=QUEUE[0];   

      min=QUEUE[0];   

      sum=QUEUE[0];   

      for(i=n-1;i!=0;i--)

      {        if(QUEUE[i]>max)max=QUEUE[i];       // 比較并更新最大值      

        else if (QUEUE[i]

        sum=sum+QUEUE[i];                               //追加到和值     

        QUEUE[i]=QUEUE[i-1];                            //隊列更新  

      }  

       i=n-2;   

       sum=sum-max-min+i/2;   

       sum=sum/i;                                      //平均值=(和值-最大值-最小值+n/2)/(隊列長度-2)

                                                             //說明:+(n-2)/2的目的是為了四舍五入     

      return ((char)sum);

}       

0
回復
2019-02-20 16:56
收藏
0
回復
2019-05-24 12:20

單字節滑動中位值平均濾波功能:

1.將新的采樣值壓入隊列       

 2.將隊列數據減去最大值和最小值,然后其平均值(小數四舍五入)

*入口: NEW_DATA=新采樣值        QUEUE=隊列        n=隊列長度*

出口:本次濾波結果(平均值)

優點:去掉最大值和最小值后計算N-2數據平均值 ,往后滑動,可消除偶然誤差,比較實用。

缺點:速度慢消耗RAM。

**************************************************/

char filter1(char NEW_DATA,char QUEUE[],char n)

{   

 char max;   

 char min;   

 int sum;    

char i;    

QUEUE[0]=NEW_DATA;     //新采樣值入隊列   

 max=QUEUE[0];    

min=QUEUE[0];   

 sum=QUEUE[0];   

 for(i=n-1;i!=0;i--)

{       

 if(QUEUE[i]>max)max=QUEUE[i];                    // 比較并更新最大值      

 else if (QUEUE[i]

  sum=sum+QUEUE[i];                                //追加到和值   

  QUEUE[i]=QUEUE[i-1];                            //隊列更新  

  }  

 i=n-2;  

 sum=sum-max-min+i/2;   

 sum=sum/i;                                      //平均值=(和值-最大值-最小值+n/2)/(隊列長度-2)

 return ((char)sum);                          //說明:+(n-2)/2的目的是為了四舍五入    

}       

0
回復
2019-05-30 09:15
@喔喔嗚嗚
單字節滑動中位值平均濾波功能:1.將新的采樣值壓入隊列        2.將隊列數據減去最大值和最小值,然后其平均值(小數四舍五入)*入口: NEW_DATA=新采樣值        QUEUE=隊列        n=隊列長度*出口:本次濾波結果(平均值)優點:去掉最大值和最小值后計算N-2數據平均值 ,往后滑動,可消除偶然誤差,比較實用。缺點:速度慢消耗RAM。**************************************************/char filter1(char NEW_DATA,char QUEUE[],char n){    char max;    char min;    int sum;    char i;    QUEUE[0]=NEW_DATA;     //新采樣值入隊列    max=QUEUE[0];    min=QUEUE[0];    sum=QUEUE[0];    for(i=n-1;i!=0;i--){        if(QUEUE[i]>max)max=QUEUE[i];                   // 比較并更新最大值       else if (QUEUE[i]
繼續繼續
0
回復
主站蜘蛛池模板: 中文字幕一区二区三A片 | 白浆在线 | 久久靖品| 国产av一级毛片 | 日韩在线中文字幕视频 | 国产高清精品软件 | 国产片一区二区三区 | 91在线看网站 | 欧美一区二区三区久久综合 | 亚洲成年人网站在线观看 | 色AV综合AV综合无码网站 | 亚洲精品一区二区三区在线 | 99精品一级欧美片免费播放资讯 | 国产成熟女人性满足视频 | 精品一区二区三区在线视频 | gogogo在线播放中国 | 神马久久久久久久久久久 | 亚洲VS成人无码人在线观看堂 | 日韩精品视频在线观看视频 | 强壮的公次次弄得我高潮a片日本 | 国产精品视频麻豆 | 2021久久精品99精品久久 | 完全着衣の爆乳お姉さんが | 亚洲午夜精品一区二区三区 | 黄色免费看片 | 亚洲日本黄色片 | 天天做天天看 | 成人在线观看一区二区三区 | 国产日韩不卡 | 一级做a爰片性色毛片99高清 | 欧美日韩国产免费一区二区三区 | 亚洲第一香蕉视频 | 亚洲国产一成久久精品 | 免费A级毛片无码A∨性按摩 | 亚洲欧美日韩国产精品一区 | 日韩.www| 日日碰狠狠添天天爽超碰97久久 | 久久99精品久久久久久水蜜桃 | 亚洲欧美精选 | 国产伦精品一区二区三区四区视频 | 在线a网|