极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12133|回复: 4

求大神援手,滤波算法里数据格式错误怎么解决?

[复制链接]
发表于 2016-12-10 16:37:17 | 显示全部楼层 |阅读模式
用的是十大滤波算法里的中位值滤波算法。说数据格式错误,搞了两天没弄明白。。。。别人估计都不会有这样的错,没有搜到类似的问题。
int Filter_Value;

void setup() {
  Serial.begin(9600);       // 初始化串口通信
  randomSeed(analogRead(0)); // 产生随机种子
}

void loop() {
  Filter_Value = Filter();       // 获得滤波器输出值
  Serial.println(Filter_Value); // 串口输出
  delay(50);
}

// 用于随机产生一个300左右的当前值
int Get_AD() {
  return random(295, 305);
}

// 中位值滤波法
#define FILTER_N 101
int Filter() {
  int filter_buf[FILTER_N];
  int i, j;
  int filter_temp;
  for(i = 0; i < FILTER_N; i++) {
    filter_buf = Get_AD();
    delay(1);
  }
  // 采样值从小到大排列(冒泡法)
  for(j = 0; j < FILTER_N - 1; j++) {
    for(i = 0; i < FILTER_N - 1 - j; i++) {
      if(filter_buf > filter_buf[i + 1]) {
        filter_temp = filter_buf;
        filter_buf = filter_buf[i + 1];
        filter_buf[i + 1] = filter_temp;
      }
    }
  }
  return filter_buf[(FILTER_N - 1) / 2];
}

编译报错如下

Arduino:1.7.10 (Windows 7), 板:"Arduino Nano, ATmega328"

构建选项已变更,全部重新构建

delete1.ino: In function 'int Filter()':

delete1.ino:26:16: error: incompatible types in assignment of 'int' to 'int [101]'

delete1.ino:32:39: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]

delete1.ino:33:21: error: invalid conversion from 'int*' to 'int' [-fpermissive]

delete1.ino:34:20: error: incompatible types in assignment of 'int' to 'int [101]'

编译有误。

  报告将会包含更多的信息
  "在编译时,输出详细信息"
  在 文件>首选项 中启用

回复

使用道具 举报

发表于 2016-12-10 17:38:46 | 显示全部楼层
int Filter_Value;

void setup() {
  Serial.begin(9600);       // 初始化串口通信
  randomSeed(analogRead(0)); // 产生随机种子
}

void loop() {
  Filter_Value = Filter();       // 获得滤波器输出值
  Serial.println(Filter_Value); // 串口输出
  delay(50);
}

// 用于随机产生一个300左右的当前值
int Get_AD() {
  return random(295, 305);
}

// 中位值滤波法
#define FILTER_N 101
int Filter() {
  int filter_buf[FILTER_N];
  int i, j;
  int filter_temp;
  for(i = 0; i < FILTER_N; i++) {
    filter_buf[i] = Get_AD();
    delay(1);
  }
  // 采样值从小到大排列(冒泡法)
  for(j = 0; j < FILTER_N - 1; j++) {
    for(i = 0; i < FILTER_N - 1 - j; i++) {
      if(filter_buf[i] > filter_buf[i + 1]) {
        filter_temp = filter_buf[i];
        filter_buf[i] = filter_buf[i + 1];
        filter_buf[i + 1] = filter_temp;
      }
    }
  }
  return filter_buf[(FILTER_N - 1) / 2];
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-10 18:00:01 | 显示全部楼层
275891381 发表于 2016-12-10 17:38
int Filter_Value;

void setup() {

太感谢您了,请问filter_buf,为什么去掉就可以了呢?
回复 支持 反对

使用道具 举报

发表于 2016-12-11 09:11:05 | 显示全部楼层
rockorange 发表于 2016-12-10 18:00
太感谢您了,请问filter_buf,为什么去掉就可以了呢?

没有去掉呀,就是加了个

if(filter_buf > filter_buf[i + 1]) {
        filter_temp = filter_buf;
        filter_buf = filter_buf[i + 1];
        filter_buf[i + 1] = filter_temp;
这四句加了个
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-19 01:08 , Processed in 0.045643 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表