首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >增加/改变Matlab-Arduino analogRead()采样率

增加/改变Matlab-Arduino analogRead()采样率
EN

Stack Overflow用户
提问于 2013-07-20 21:52:39
回答 2查看 3.7K关注 0票数 2

我一直使用ArduinoIO-Matlab接口从Matlab控制Arduino。我目前的设置是,我有3个肌电肌肉传感器(来自Advancer Technologies)连接到Arduino的模拟引脚1、2和3。Arduino连接到Matlab。我试图同时从这三个引脚收集数据,并将它们存储在一个1000x3大小的矩阵中。我的问题是Matlab从模拟引脚采样的速率。从3个引脚同时采集1000个读数大约需要25秒。我知道arduino本身的采样速度更高。下面是我的代码。我如何改变它,以在10秒内获得大约1000个样本的采样率?

代码语言:javascript
运行
复制
ar = arduino('COM3');

ax = zeros(1000,3);

for ai = 1:1000
    ax(ai,:) = [ar.analogRead(1) ar.analogRead(2) ar.analogRead(3)];
end

delete(ar);

这是上述代码(配置文件查看器)所用的时间:

代码语言:javascript
运行
复制
  time     calls  line
< 0.01       1    3 ax = zeros(1000,3); 
                  4 
< 0.01       1    5 for ai = 1:1000 
 25.07    1000    6     ax(ai,:) = [ar.analogRead(1) ar.analogRead(2) ar.analogRead(3)]; 
          1000    7 end 
                  8 
  1.24       1    9 delete(ar); 

如果我还有什么需要澄清的,请告诉我。谢谢:Denter code here

EN

回答 2

Stack Overflow用户

发布于 2013-07-21 06:20:58

您需要修改arduino c++代码(.pde文件)。在这段代码中,您应该按照自己的喜好对信号进行采样(例如,1000),然后使用serial.writeln()方法将采样的数据传输到matlab。

这将给你一个~3 3KHz的采样率(取决于许多因素)…

票数 1
EN

Stack Overflow用户

发布于 2015-04-10 15:15:42

下面很可能解释了你所看到的结果,以及为什么你需要做一些像穆罕默德的答案所建议的事情。虽然他的回答暗示了这一原因,但并没有详细说明,以便其他人可以避免“陷阱”。

我无法访问所需的底层代码和系统来确定地检查这个答案。这个答案是基于“典型的方法”,有一定的可能性纯粹是胡说八道的tm,但观察和标准方法之间的精确契合表明这就是正在发生的事情。手中有必要的系统的人只需稍微钻研一下,就能证明这是否正确。

当数据每次发送一个数据样本时,每个样本产生的开销远远超过仅传输原始数据所需的时间。

你说传输3000个样品需要25秒。

每个样本的时间=25/3,000=每个样本8.333毫秒。

假设数据传输率为9600波特。

默认的通信速度可能只有9600波特。这是可以检查的,但结果表明这可能是正确的,并且做出稍微不同的假设提供了同样好的解释。

串行通信通常使用N81格式=每8位字节1个起始位、8个数据位、1个停止位。

因此,1位需要1/9600秒

10位占用10/9600 = 1.042 mS

和采样时间/字节时间

= 8.333 / 1.042 = 7.997字次。

事实上,如果您不进行舍入或截断计算,即

25 / 3000 x 9600/10 = 8.000....。也就是说,您的传输每个样本恰好需要8 x 9600个波特字。

同样,这恰好是4 x 4800波特或2 x 2400波特传输时间。

我没有检查过所使用的格式,但可以想象一下,为了使用PC监视器程序,基本串行例程可以使用

2 x数据字节+ CR + LF =4字节。

假设16位变量作为2 x 8位二进制字发送。

更有可能=

作为4 x ASCII字符发送的

  • 16位或作为6 x ASCII字符发送的
  • 24位。

在没有适当深入研究的情况下,使用6个ASCII字和9600波特率的CR + LF提供了使用典型参数的良好拟合,Occam可能认为这是最好的起点。无论总需求是8字节、4字节还是2字节,您观察到的数据速率和标准波特率之间的偶然精确匹配表明,这提供了您所看到的基本原因。

查看代码将快速显示使用的波特率、数据长度和封装。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17762948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档