你能同步数据采集工具箱和Matlab的图像采集工具箱吗?

我想使用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文件,但是如何使用外部触发(触发相机)或其他时钟来同步两者?
对于此示例,daq读取相机触发TTL信号(@ 50 Hz),因此我想将每个TTL脉冲分配给图像.

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

最佳答案 这不会完全解决您的问题,但它可能已经足够好了.由于您以50 Hz的频率进入同步信号,因此可以使用时钟为两种类型的数据(摄像机图像和模拟电压)创建时间戳.由于功能时钟几乎没有时间(即低于1e-7秒),因此您可以尝试相应地编辑SaveData功能:

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

并在for循环中添加:

timestamp(i,:)=clock;
点赞