Arduino:找到传感器数据的峰值和谷值

时间:2015-12-08 10:45:56

标签: arduino

我试图在3 axiz上每 x ms轮询一个加速度计,并试图弄清楚如何确定我得到的读数的峰值和低谷。

理想情况下,在我开始计算峰值之前,我不想收集大量数据 - 如果首先需要数据收集,最多可能每10分钟一次。如果峰值的绝对值在可接受的距离内,则也应仅计算峰值"平均峰值集 - 以防止计算非常小的峰值...

我会很感激任何指针吗?

2 个答案:

答案 0 :(得分:0)

您可以从标准差的计算开始,并计算偏差超过指定水平的峰值。

Wiki article

答案 1 :(得分:0)

这取决于你的信号是什么样的。我使用信号上的IIR滤波器解决了类似的正弦信号问题,以消除噪声并防止误报。

您可以尝试这样的事情:

int signalPin = 3;     // accel connected to pin 3
float signal;
float gain = 0.1;

void setup()
{
  pinMode(signalPin, INPUT);
  signal = analogRead(signalPin);  // get initial reading
}

void loop()
{
  // allow a new reading of the accel to slightly change the signal (depending on the value of gain)
  signal += (analogRead(signalPin)*gain - signal);  // IIR filter
}

您可能还想使用map函数调整从analogRead获取的值,如果您担心效率,也可以使用int或long而不是float。

现在您可以使用以下策略: 从accel中读取一个新值(检查新值是否高于前一个值,如果是,则将其保存为新的最大值。当它们停止增加时,这是您的最大值。您可以在一定范围内需要N个样本验证你是否处于峰值平顶的门槛。希望这能让你开始。