【问题标题】:How to measure the sample rate in python when getting data from a ADC?从 ADC 获取数据时如何在 python 中测量采样率?
【发布时间】:2016-11-10 05:05:32
【问题描述】:

我正在一个使用 Raspberry Pi 3 B 的项目中工作,我通过 ADC MPC3008 从 IR 传感器(Sharp GP2Y0A21YK0F)获取数据并使用 PyQtgraph 库实时显示。

但是,我得到的样本似乎很少,而且图表并不像我预期的那样“平滑”。

我正在使用 Adafruit Python MCP3008 库和函数 mcp.read_adc(0) 来获取数据。

有没有办法在 Python 中测量采样率?

谢谢

雨果·奥利维拉

【问题讨论】:

  • it seems that I am getting very few samples 你是什么意思? ,当您读取 ADC 通道时,您将获得样本。你多久读一次你的ADC?你能显示一些代码吗?
  • 尝试收集例如100 个(或 1000 个?)样本并使用 timeit 来衡量需要多长时间。
  • 我想你问了另一个关于如何使用 Pi 从 MCP3008 获得 200ksps 的问题。不要以为你已经接近那个了。 Pi/Linux 不是实时平台
  • @barny 是的,现在我知道这不可能了。但是,我试图了解我正在采集的数据的特征,以便选择与 Raspberry 兼容的专用板。
  • @SufiyanGhori 谢谢你的评论。我正在计算我的代码在一秒钟内获得了多少分。我不是计算机科学家,这就是我很难过的原因。 :( 这是我的代码:stackoverflow.com/questions/40499890/…

标签: python python-2.7 raspberry-pi adc sample-rate


【解决方案1】:

我建议设置一些下一级缓冲,最好通过多处理(请参阅multiprocessing and GUI updating - Qprocess or multiprocessing?)来更好地掌握访问数据的速度。目前您正在使用 QTimer 进行轮询,每 50 毫秒仅获得 3 次原始读取......所以您真的通过计时器人为地限制了自己。我没有使用过 MCP3008,但是快速浏览一下他们的代码似乎你必须设置一些示例测试来尝试一些事情,或者进一步调查以获得更好的文档。问题是 mcp.read_adc(0) 方法的行为,它是阻塞的还是非阻塞的……如果是非阻塞的,如果没有新数据,它会返回陈旧的数据,……等等。这将是理想的如果它从时间意义上说是阻塞的,您可以在其上设置一个循环,并在每次连续返回时设置时间增量,以确定您能够以多快的速度获得新样本。如果它是非阻塞的,您可能希望它在没有新样本的情况下返回 null,并且仅在它确实返回某些内容时才返回新的实际样本。你必须玩弄它,看看它的行为如何。无论如何,一旦您将辅助线程设置为仅轮询 mcp.read_adc(0),您就可以使用 update() 计时器来收集最新的缓冲区并绘制它。我也不知道多线程/多处理对 RaspPI 的影响(请参阅此处的一般讨论:Multiprocessing vs Threading Python),但任何事情都应该比 QTimer 轮询更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 2019-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多