我想同时使用 matlab 从相机(即图像)和模拟电压获取数据。对于相机,我使用 imaq 工具箱,对于读取电压,我使用 daq 工具箱(读取 NI-USB 设备),代码如下:

clear all
% Prepare camera
vid = videoinput('gentl', 1, 'Mono8');
src = getselectedsource(vid);
vid.FramesPerTrigger = 1;
vid.TriggerRepeat = Inf;
triggerconfig(vid, 'hardware', 'DeviceSpecific', 'DeviceSpecific');
src.FrameStartTriggerMode = 'On';
src.FrameStartTriggerActivation = 'RisingEdge';

% prepare DAQ
s=daq.createSession('ni');
s.addAnalogInputChannel('Dev1','ai1','Voltage');
fid = fopen('log.txt','w');
lh = s.addlistener('DataAvailable',@(src,event)SaveData(fid,event));
s.IsContinuous = true;

% Take data
s.startBackground();
start(vid)
N=10;
for ii=1:N
    im(:,:,ii)=getsnapshot(vid);
end


% end code
delete(lh );
fclose('all');
stop(vid)
delete(vid)

其中函数 SaveData 是:
function SaveData(fid,event)
     time = event.TimeStamps;
     data = event.Data;
     fprintf(fid, '%f,%f\n ', [time data]);
end

我确实获得了带有 daq 跟踪(时间和数据)的图像和 log.txt 文件,但是我如何使用外部触发(触发相机)或其他时钟来同步两者?
在这个例子中,数据采集器读取相机触发的 TTL 信号 (@ 50 Hz),所以我想将每个 TTL 脉冲分配给一个图像。

附录:
我一直在搜索并找到了一些关于该主题的讨论(如 one ),并阅读了 Mathworks 网站上的 examples ,但没有找到答案。文档显示了如何 Start a Multi-Trigger Acquisition on an External Event ,但所讨论的采集仅与基于 DAQ 的输入相关,而不与基于相机的输入相关(它也在前台工作)。

最佳答案

这不会完全解决您的问题,但可能已经足够了。由于您所追求的同步信号为 50 Hz,您可以使用 clock 为两种类型的数据(相机图像和模拟电压)创建时间戳。由于函数 clock 几乎不需要时间(即低于 1e-7 秒),您可以尝试相应地编辑 SaveData 函数:

fprintf(fid, '%f,%f\n ', [clock time data]);

并在 for 循环中添加:
timestamp(i,:)=clock;

关于matlab - 能否同步Matlab的数据采集工具箱和图像采集工具箱?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15036311/

10-11 16:37