不需要的更改过滤器算法中的数据

时间:2018-06-16 18:01:02

标签: c++ algorithm filter arduino

我用C ++编程语言编写了简单的线性中值滤波器代码。我有一个严重的问题,在这个过滤器的部分我的数据将会改变,这个过滤器的结果没有任何意义。我发现这件事发生在哪个部分,但我不知道如何解决这个问题。我的意思是当我在注释行中打印数据时,我会得到错误的答案。例如,在该值的第一次减速中buffer_data [1]的结果是51,但是在评论行中的这个结果变为1434234133123等等。

double median_filter( int data, int counter){
  int sum=0;
  double result=0;
  static int buffer_length=8;
  int buffer_data[buffer_length];
  int temp=0;

// first time initiation

      if (counter==1){
          for (int i=1;i<=buffer_length;i++){
            buffer_data[i]=0;
          }
      }

      if (counter <= buffer_length){
      buffer_data[counter]=data;
      }

      /* this part of the code changes the data of the buffer or so on

      else{
            for (int i=1;i<=(buffer_length-1);i++){             
              buffer_data[i]=buffer_data[i+1];
            }
            buffer_data[buffer_length]=data;
      }

     */ 
           for (int i=1;i<=buffer_length;i++){
            sum=sum+(buffer_data[i]);
           }

           if (counter<= buffer_length)
           result=double(sum/counter);
           else
           result=double(sum/buffer_length);

           return (result);
}

更新[1]

我已经修复了你的宝贵意见,但问题仍然存在。以下是基于您的评论的固定代码。

double median_filter( int data, int counter){
  int sum=0;
  double result=0;
  int buffer_data[8];
  int temp=0;
// first time initiation
      if (counter==1){
          for (int i=0;i<=(7);i++){
            buffer_data[i]=0;
          }
      }

        if (counter <= (7)){
          buffer_data[counter]=data;          
        }
      //this part of the code changes the data of the buffer or so on
      else{
            for (int i=0;i<=(6);i++){             
              buffer_data[i]=buffer_data[i+1];
            }
            buffer_data[7]=data;
      }

           for (int i=0;i<=(7);i++){
              sum=sum+(buffer_data[i]);
           }

           if (counter< (7))
           result=double(sum/(counter+1));
           else
           result=double(sum/8);

           return (result);
}

1 个答案:

答案 0 :(得分:0)

感谢您的所有答案,但问题是另一回事。 我创建了一个类型为“int”的数组,总长度为64字节,而我用2字节变量填充了这个数组,这就是问题所在。 我将buffer_data的类型从int更改为uint8_t,问题解决了。

也感谢您的支持。