c++ - 如何使用c++实时数据增加gnuplot的绘图频率?

标签 c++ gnuplot real-time iostream

我正在尝试使用 C++ 实时可视化传感器数据。传感器具有高达 1kHz 的输出,但 gnuplot 仅以大约 10Hz 的频率绘制数据。

我正在使用 gnuplot-iostream ( http://stahlke.org/dan/gnuplot-iostream/ ) 将数据从我的 C++ 脚本传输到 gnuplot,这很简单。但似乎绘图过程很慢,需要 1/10 秒来更新绘图。有什么办法可以增加这个频率吗?

编辑: 这是一个简单的代码示例

#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 kHz 采样率输出数据,那绝对不意味着您应该使用该频率进行绘图。太疯狂了!如果您的眼睛无法看到该频率,那么绘制该频率的数据有什么意义?

您应该每隔 0.1 秒对要绘制的点进行分组,然后将它们与所有数据一起绘制。明确一点:

  1. 收集一些数据,将其放入要绘制的数组中
  2. 绘制数组的数据
  3. 收集更多 0.1 秒(或 0.2 或 0.5,或者可能每 100 个样本;这由您决定)的数据
  4. 将其添加到要绘制的数据数组中
  5. 可选:如果数组太大,则从前面修剪数据
  6. 绘制数据
  7. 回到3

关于c++ - 如何使用c++实时数据增加gnuplot的绘图频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54075924/

相关文章:

c++ - 确保 C++ 流中的字节顺序

C++编译和链接

plot - 在Gnuplot中使用方程式添加误差线

java - 我在哪里可以找到 SolarFlare OpenOnLoad Kernel Bypass 的一些示例 Java 代码?

python - 实时 matplotlib 图在循环中不起作用

python - 如何使用树莓派 PREEMPT_RT 补丁让进程实时运行?

c++ - 如何在 MinGW 中启用实验性 C++11 并发功能?

c++ - 如果类模板将实例化,则变量模板为真?

c++ - 从 gnuplot 获取变量到 c++

gnuplot - 如何将 gnuplot 中的数据添加到现有文件而不覆盖该文件的内容