【问题标题】:Achieving 2 hertz data logging with Matlab serial使用 Matlab 串行实现 2 赫兹数据记录
【发布时间】:2014-11-17 20:46:28
【问题描述】:

我正在尝试使用 matlab 通过 licor820 仪器进行数据采集。仪器以 2 赫兹的频率输出数据。

我尝试了许多不同的方法,使用带有异步采样 (readasync) 和定时读数的无限循环,但我无法获得 2 赫兹的数据。我正在读取 0.51 秒范围内的读数。这是我的方法的三个示例。任何关于我可能做错了什么或如何以最高频率正确采样的建议将不胜感激!

例子1:使用readasync

tinit=tic;  %initialization timer
s=serial('COM4') %,'InputBufferSize',40);
fopen(s)
while toc(tinit)<2  %allow time to initialize
end
while 1<2     %infinite loop for continuous sampling
  readasync(s)
  data=fscanf(s)
  toc         %allows me to see time between data acquisitions
  tic
end

示例 2:使用可用字节。 我的想法是在我拥有最少的必要字节数时获取数据。虽然我不确定如何确定我的仪器需要多少字节,但除了通过直观地查看数据并将其缩小到 40 字节左右:

while 1<2       %infinite loop for continuous sampling
  if s.BytesAvailable >35
   scandata=fscanf(s);
   toc
   tic
 end
end

示例 3:时间强制。 由于我需要 2 赫兹数据,因此我的想法是每隔 0.49 秒强制读取一次缓冲区。我在这里看到的奇怪的事情是它最初每 0.49 秒提供一次样本,但是当我监控端口上可用的字节时,我看到它从 512 稳定下降直到它变为 0,然后我停止获得 0.49 秒的样本。我想我真的不明白如何有效地使用串行。

while 1<2              %infinite loop
    if toc(t2)>=.49    %only sample after .49 seconds have passed
        t2=tic;        %reinitiate the tic for this forced time loop
        bytes=s.BytesAvailable         %to monitor how many bytes there are at the port
        scandata=fscanf(s);
        if ~isempty(scandata) && length(scandata)== 3     %checks for successful read
           toc
           tic
        end
    end
 end

我觉得一定有某种方法可以与乐器完全同步采样,但我想不通。任何帮助、建议或想法将不胜感激!谢谢!

【问题讨论】:

  • 我知道这是旧的,但我早就想通了,想对可能有类似问题的人发表评论。问题肯定是 licor800 仪器以不完全在 2hz 的间隔输出数据。我展示的代码也很垃圾。我现在有更好的代码,功能和简单得多。想要的话私信我。

标签: matlab logging serial-port instrumentation


【解决方案1】:

不要依赖tictoc。这些函数使用操作系统调用提供的时间。 Mathworks 声称使用高分辨率计时器,但不要依赖于此!如果您不使用实时操作系统,这些测量值可能会出现未知变化。

采样应由支持实时的硬件执行。在您的情况下,我怀疑您的采样率实际上是由您的仪器控制的。仪器的输出由您的串行接口缓冲。因此,在我看来,Matlab 根本不会影响采样率。 (只要缓冲区不溢出)

尝试采集大约 2000 个或更多样本,看看需要多长时间。然后将总时间除以样本数 (-1) 并将其与预期的 0.5 秒进行比较。如果有差异,请尝试调整仪器的配置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多