我用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);
}
答案 0 :(得分:0)
感谢您的所有答案,但问题是另一回事。 我创建了一个类型为“int”的数组,总长度为64字节,而我用2字节变量填充了这个数组,这就是问题所在。 我将buffer_data的类型从int更改为uint8_t,问题解决了。
也感谢您的支持。