Обнаружение пикового значения в потоке данных в реальном времени - PullRequest
1 голос
/ 05 марта 2020

Я использую QCustomPlot для чтения и отображения значения в реальном времени из IMU. Вот как я установил realtimeDataSlot:

void Settings::realtimeDataSlot(double x_acceleration_g, double y_acceleration_g, double z_acceleration_g, double z_acceleration_gnew)
{
    static QTime time(QTime::currentTime());
    // calculate two new data points:
    double key = time.elapsed()/1000.0; // time elapsed since start of demo, in seconds
    static double lastPointKey = 0;
    if (key-lastPointKey > 0.02) // at most add point every 20 ms
    {
      // add data to lines:
        ui->customPlot->graph(0)->addData(key, x_acceleration_g); // X axis
        ui->customPlot->graph(1)->addData(key, y_acceleration_g); // Y axis
        ui->customPlot->graph(2)->addData(key, z_acceleration_g); // Z axis
        ui->customPlot->graph(3)->addData(key, z_acceleration_gnew);

      lastPointKey = key;
    }
    // make key axis range scroll with the data (at a constant range size of 8):
    ui->customPlot->xAxis->setRange(key, 8, Qt::AlignRight);
    ui->customPlot->replot();

    // calculate frames per second:
    static double lastFpsKey;
    static int frameCount;
    ++frameCount;
    if (key-lastFpsKey >2) // average fps over 2 seconds
    {
      ui->statusbar->showMessage(
            QString("%1 FPS, Total Data points: %2")
            .arg(frameCount/(key-lastFpsKey), 0, 'f', 0)
            .arg(ui->customPlot->graph(0)->data()->size()+ui->customPlot->graph(1)->data()->size())
            , 0);
      lastFpsKey = key;
      frameCount = 0;
    }
}

, который показывает меня следующим образом:

enter image description here

В качестве следующего шага Мне нужно обнаружить пики на любой оси, скажем, например, на рисунке выше по оси Y есть пиковые значения, которые мне нужно обнаружить и сосчитать. Может кто-нибудь показать мне способ сделать это?

Заранее спасибо

РЕДАКТИРОВАТЬ

Я отметил на пиках следующий рисунок:

Я определяю пик как показатель, значение (положительные значения) которого превышает 0.25 g при высокой скорости.

enter image description here

1 Ответ

1 голос
/ 05 марта 2020

Как это сделать для оси Y:

  1. Вы определяете размер окна по оси X, скажем, 5 значений х 100
  2. позволяют этому окну двигаться от начала до конца оси x, что означает: для первой меры посмотрите на значения x-числа 0,1,2,3,4, а для второй меры посмотрите на значения x-значения 1,2 , 3,4,5 и т. Д.
  3. для каждой меры окна: определите максимальное значение y в этом окне и увеличьте счетчик оценок для соответствующего значения x.
  4. после Для полного перемещения окна от начала до конца вам нужно найти значения x с наибольшим счетчиком очков.

Размер вашего окна дает вам количество пиков.

Также сделайте то же самое для минимальных значений, чтобы найти отрицательные пики.

Будьте осторожны в начале и в конце графика.

...