Как увеличить частоту печати gnuplot с данными в реальном времени c ++? - PullRequest
0 голосов
/ 07 января 2019

Я пытаюсь визуализировать данные датчика в режиме реального времени, используя C ++. Выходной сигнал датчика составляет до 1 кГц, но gnuplot отображает данные только на частоте около 10 Гц.

Я использую gnuplot-iostream (http://stahlke.org/dan/gnuplot-iostream/) для передачи данных в gnuplot из моего сценария C ++, который прост и удобен. Но похоже, что процесс построения графика идет медленно и занимает 1/10 от секунда для обновления сюжета. Есть ли способ увеличить эту частоту?

EDIT: Вот пример простого кода

#include <vector>
#include <utility>
#include <gnuplot-iostream/gnuplot-iostream.h>

typedef std::pair<double, double> Point;

int main() {
  std::vector<Point> data;

  double x = 0.0;
  double y = 0.0;
  double c = 0.0;

  Gnuplot gp;
  gp << "set terminal wxt size 800, 400\n";

  while (x < 10000) {
    x += 0.01;
    y = sin(x);
    c += 0.01;
    data.push_back(Point(x,y));
    //std::cout <<  x << std::endl;
    if (c > 0.1) {
      gp << "plot '-' with lines title 'sin(x)'\n";
      gp.send1d(data);
      c = 0.0;
    }
  }

  return 0;
}

1 Ответ

0 голосов
/ 07 января 2019

Если датчик выводит данные с частотой дискретизации 1 кГц, это абсолютно не означает, что вы должны строить графики с этой частотой. Это безумие! Какой смысл представлять данные с этой частотой, если ваш глаз не может видеть с этой частотой?

Вы должны сгруппировать точки, которые вы хотите построить, как каждые 0,1 секунды, а затем построить их все вместе со всеми данными. Чтобы было ясно:

  1. Соберите некоторые данные, поместите их в массив для построения
  2. вывод данных массива
  3. собирать больше данных в течение 0,1 с (или 0,2 или 0,5, или, возможно, каждые 100 выборок; это ваш звонок)
  4. добавить его в массив данных для построения
  5. необязательно: обрезать данные спереди, если массив слишком большой
  6. график данных
  7. вернуться к 3
...