【问题标题】:serial input buffer size Matlab串行输入缓冲区大小 Matlab
【发布时间】:2017-06-12 11:29:23
【问题描述】:

我正在尝试读取来自我的 Arduino 的大量数据,我已将输入缓冲区设置为 500000 以确保它可以处理所有这些数据。我的数据是 4 个传感器以 250 Hz 的频率读取每个样本。使用默认缓冲区大小 (712),当我实时绘制读数并且样本变得混乱时,我常常会遇到障碍,这使得情节变得疯狂。我通过将缓冲区大小增加到 50000 解决了这个问题。但是现在,这将工作一段时间,但如果我想运行它 15 分钟,我会在 5 分钟后得到同样的错误行为,此外绘图变得更慢。我确实有一些处理代码以及实时绘图,但它不应该是这样的双缓冲区。我想知道缓冲区是否会从一开始就包含所有数据,直到它满了,还是会在满时继续擦除旧数据(知道我已经将它保存在另一个向量中并绘制了它)。我真的不明白为什么会一直这样。

亲切的问候 I.H

【问题讨论】:

  • 我确实有一些处理代码以及实时绘图,但它不应该像这样,有这么大的缓冲区”。缓冲区的大小不会影响您的处理速度。如果您对数据块的处理时间比数据块到达所需的时间长……那么即使是无限的缓冲区也不会阻止数据到达和显示之间的逐渐去同步。

标签: matlab buffer


【解决方案1】:

当缓冲区满时,一旦你得到新数据,它就会删除旧数据。您看到的行为是因为您的处理和绘图比数据流慢。

  • 尽量确保优化处理
  • 确保绘图是由“drawnow”完成的。像这样,您可以确定如果队列中有任何内容,则不会执行
  • 尽量避免保存和保留所有数据
  • 如果问题仍然存在,您可以尝试实现一个计时器,以确保您与读取数据保持一致

【讨论】:

  • 程序使用缓冲区时如何擦除数据?在文档中,刷新缓冲区会擦除所有数据。我确信当我刷新它时仍然会有一些我还没有读取的新数据,这意味着丢失数据......我正在使用drawow并每70个样本更新一次绘图以加快处理速度。其他信号处理部分可能很耗时,但那是因为我正在做繁重的处理......最后,计时器应该如何确定我是否一致?
  • 如果你正在读取一个串口,一旦你读取,数据就会被删除。你不需要删除任何东西!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-05
  • 2014-06-10
  • 1970-01-01
相关资源
最近更新 更多