问题标签 [data-acquisition]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
callback - 使用回调和持久变量在 MATLAB 中连续获取数据
我最近刚刚开始使用 MATLAB 从数据采集板上采集数据,并且需要一个函数来连续采集数据(即直到我 ctrl^C 退出该函数)。为此,我在 32 位 Windows 操作系统上使用数据采集工具箱。
根据 matlab 帮助中的文档和本网站上的一些答案,我发现在向输入句柄添加通道后,我应该:
- 将我的“SamplesPerTrigger”设置为 Inf
- 将“TimerPeriod”设置为某个值以触发“TimerFcn”
- 将“TimerFcn”设置为一些子函数回调,它将数据附加到持久变量
这是正确的方法吗?
我的代码如下:
初始模拟输入肯定工作正常。我尝试了许多将 AcquireData 回调提供给“TimerFcn”的排列方式。我收到的错误是
`??? 错误使用 ==> acquire_arena_test>AcquireData 输入参数太多。
警告: TimerFcn 回调被禁用。要启用回调,请设置 TimerFcn 属性。`
提前感谢您的帮助。
c++ - 用于图像数据采集和时间像素分析的 C++ 库
我正在开展一个项目,以监测在手术过程中人体组织是否与射频融合,因此我们使用了非常快速的相机(1800fps)以及对组织的激光照明和图像采集卡(1GB 内存)。
目前我们有一个基于 C 的软件,它只从抓取器中获取数据并将其传递到 PC 上,还显示屏幕中的图像,但我需要添加一个算法来从帧抓取器中抓取所有帧并分析它们一个掩码,还可以实时计算时间图像的对比度偏差。
我认为必须有一个框架可以帮助我在 C++ 中进行图像分析。你有什么建议?Zhat 是我尽可能快地实时处理的最佳选择吗?开放式简历?OpenGL?GLPlus?
arm - STM32F103中的ADC可以采样到3Msps吗?
我是 stm32 微控制器的新手。我在 STM32F103 数据表中读到它有 3 个 ADC 转换器,每个转换器能够执行高达 1Msps。是否可以利用这 3 个转换器对高达 3 Msps 的 1 个通道进行采样?我猜如果我按顺序开始每个转换器的转换,一个转换器与另一个转换器之间的时间差为 0.333us,这是可能的。所以我每 1us 持续时间从 3 个转换器获得 3 个转换结果。
可行吗?请指教。谢谢。
java - Matlab2011a 和 64 位 Win7 中的 Java GUI
今年早些时候,我编写了 Java GUI 代码,以便在 Matlab 环境中工作以获取图像。我能够在 matlab 中调用 Java_Gui.jar,以及使用 .jar 文件中的一些类。该图形用户界面在 WinXP 32 位、Matlab2006b 和 Matlab 2008a 上进行了测试。调用Java类的matlab代码:
但是,当在 64 位和 Matlab2011a 上使用 Win7 尝试相同的程序时,出现了熟悉的问题:
知道为什么会这样吗?也许我应该在 64 位版本上编译我的 jar 文件?该代码仍在 32bit Win 上运行,刚刚检查过。
解答: 可在 64 位 Windows 7 上使用 32 位版本的 Matlab!
c++ - 处理仪器捕获数据
我有一个产生数据流的仪器;我的代码通过回调访问这些数据onDataAcquisitionEvent(const InstrumentOutput &data)
。数据处理算法可能比数据到达的速度慢得多,所以我不能希望处理每一条数据(我也不必),但希望处理尽可能多的数据。感谢该仪器作为环境传感器,具有我无法控制的数据采集速率。InstrumentOutput
例如,可以是一个包含不同位置的三个同时压力测量值的类。
我还需要保留一些简短的数据历史记录。例如,假设我可以合理地希望每 200 毫秒左右处理一次数据样本。大多数时候,我很乐意只处理最后一个样本,但有时我需要查看在最新样本之前到达的几秒钟的数据,具体取决于最后一个样本中是否存在异常读数。
另一个要求是尽快退出onDataAcquisitionEvent()
回调,以避免传感器中的数据丢失。
数据采集库(第三方)在单独的线程上收集仪器数据。
我想到了以下设计;拥有单个生产者/单个消费者队列,并将数据令牌推送到 onDataAcquisitionEvent() 回调中的同步队列中。
在接收端,有一个循环从队列中弹出数据。由于数据到达率很高,循环几乎永远不会休眠。在每次迭代中,都会发生以下情况:
- 从队列中弹出所有可用数据,
- 弹出的数据被复制到一个循环缓冲区(我使用了 boost 循环缓冲区),这样一些历史总是可用的,
- 处理缓冲区中的最后一个元素(并可能查看之前的元素),
- 重复循环。
问题:
- 这种设计是否合理,有哪些陷阱?和
- 有什么更好的设计?
编辑:我想到的一个问题是当循环缓冲区的大小不足以容纳所需的历史时;目前我只是重新分配循环缓冲区,使其大小增加一倍。我希望我只需要这样做一两次。
python - 如何使用 Python io 模块构建内存驻留数据结构?
我正在尝试将从数据采集系统收集的数据写入内存中的位置,然后对数据进行异步进一步处理,或者将其写入文件以进行离线处理。我正在尝试以这种方式实现这种架构,以将数据采集与数据分析和传输隔离开来,为我们未来的扩展和改进提供了一些灵活性,但它肯定比简单地将数据直接写入文件更复杂。
这是我写的一些探索性代码。
这里有几个问题(也许更多!):
-> 'data' 是一个变量名,用于选取我正在尝试组装的构造(Python 之外)——这是一个类似数组的结构,应该保存顺序记录,每条记录包含多个过程数据测量值,前言通过可以作为检索键的时间戳。我将此作为我的设计意图的背景,以防代码太模糊而无法反映我的真实问题。
-> 此代码不起作用,因为未创建“数据”对象。我只是想打开一个空缓冲区,稍后再填充,但 Python 正在寻找两个对象,一个可读,一个可写,它们在我的代码中不存在。因此,我不确定我是否使用了正确的构造,这会导致以下问题:
io.BufferedRWPair 是处理这些数据的最佳方式吗?我已经尝试过 StringIO,因为我使用的是 Python 2.7.2,但没有运气。我喜欢带有时间戳键的记录的想法,因此我选择了 dict 结构,但我肯定会考虑替代方案。我应该看其他 io 类吗?
我看过的另一种选择是在 NumPy/SciPy/Pandas 世界中定义的 DataFrame 构造。它看起来很有趣,但似乎需要很多额外的模块,所以我回避了。我对这些模块中的任何一个都没有经验——我应该查看这些更复杂的模块来获得我需要的东西吗?
我欢迎任何建议或反馈,伙计们......感谢您查看这个问题!
android - Android 实时渲染条形图库
我正在尝试为我的 android 应用程序找到最好的图表库,该应用程序从数据采集设备接收实时数据(每秒最多支持 800 个样本)。我需要显示一个带有一些附加功能的实时移动条形图,例如放大和缩小以及追溯图表。我查看了一些开源库,例如achartengine
, afreechart
,graphView
但由于缺乏足够的示例和信息,我似乎无法真正决定应该使用哪一个。任何有用的链接?有什么推荐吗?
python - 使用 Python 进行长期仪器数据采集 - 使用“While”循环和线程处理
我将有 4 个硬件数据采集单元通过硬连线以太网 LAN 连接到单个控制 PC。此应用程序的编码将驻留在 PC 上,并且完全基于 Python。每个数据采集单元的配置相同,并且将以相同的方式从 PC 轮询。它们连接的测试盒提供我们寻求进行测试的可变输出。
这些测试是长期的(8-16 个月或更长时间),数据采集率相对较低(每分钟不到 500 个样本,可能接近 200 个)。一般工艺流程也很简单。我将遍历每个数据采集设备并:
- 从设备中读取数据;
- 对数据进行一些计算;
- 如果计算结果是一回事,请打开加热器;
- 如果他们说别的,什么也不做;
- 将数据写入磁盘和文件以供后续处理
我会等一段时间,然后再重复一遍这个过程。以下是我的问题:
- 我计划使用一个
while TRUE:
循环来开始执行我上面概述的序列,并允许通过异常退出循环,但我欢迎任何关于我应该检查的特定异常的建议 - 甚至,这是最好的方法是什么?另一种方法可能是:一旦进入while
循环,我可以使用try: - except: - finally:
构造退出循环。 - 我上面概述的过程是针对主要数据采集的东西,但是考虑到收集时间的长度,我还需要能够做其他事情:检查硬件单元是否运行正常,进行测试台上和下线根据需要等。这些“管理”功能与主循环不同,所以我想保持它们的区别。我应该在同一脚本中的不同线程中设置此活动,还是有更好的方法?
提前谢谢各位。欢迎所有反馈!
matlab - 通过 putdata 调度队列并通过多个触发器不连续地执行它
我正在使用 Matlab 数据采集工具箱来控制 National Instruments 设备 (NI USB 6229) 的输出。到目前为止,我能够通过analogoutput
and
创建输出对象addchannel
,通过 对我的数据进行排队putdata
,并通过 a 开始数据输出trigger
。
但是,一旦触发,队列就会作为一个整体执行,我想知道是否可以只执行一定数量的样本。
因此,假设我通过 10.000 个样本排队putdata
。然后,每次触发发生时,仅执行 1.000 个样本,直到队列为空(即,10 次触发后队列为空)。
使用 Matlab 的数据采集工具箱可以实现吗?如果可以,如何实现?
python - 什么是 Linux 下软实时数据采集的好存储候选?
我正在构建一个数据采集系统。采集的数据通常由 15 个信号组成,每个信号以(比如说)500 Hz 的频率进行采样。也就是说,每秒大约 15 x 500 x 4 字节(有符号浮点数)将到达并且必须保持。
以前的版本是基于 .NET (C#) 构建的,使用 DB4O db 进行数据存储。这是相当有效的并且表现良好。
新版本将基于 Linux,使用 Python(或者可能是 Erlang)和......是的!什么是合适的存储候选?
我在想 MongoDB,将每个样本(或实际上是一堆)存储为 BSON 对象。每个样本(块)将有一个样本计数器作为关键(索引)字段,以及一个信号源标识。
问题是我必须能够很快地检索样本。请求时,必须使用采样计数器范围和请求的信号源在不到一秒的时间内检索多达 30 秒的数据。当前的 (C#/DB4O) 版本管理这个 OK,检索数据的时间远少于 100 毫秒。
我知道 Python 在性能方面可能并不理想,但我们稍后会看到。
系统(“服务器”)将连接多个采集客户端,因此架构必须具有良好的扩展性。
编辑: 经过进一步研究,我可能会使用 HDF5 获取示例数据,使用 Couch 或 Mongo 获取更多类似文档的信息。我会及时向大家发布。
编辑: 最终解决方案基于 HDF5 和 CouchDB。它执行得很好,用 Python 实现,在 Raspberry Pi 上运行。