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

时间:2013-02-23 02:21:42

标签: matlab camera synchronization data-acquisition nidaqmx

我想使用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的输入相关,而不是基于摄像头的输入(它也在前台工作)。

3 个答案:

答案 0 :(得分:1)

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

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

在for循环中添加:

timestamp(i,:)=clock;

答案 1 :(得分:1)

您可以使用同步触发AD板吗?从USB-6009手册......

使用PFI 0作为数字触发器 - 定义模拟输入任务时,可以将PFI 0配置为数字触发输入。当数字触发器使能时,AI任务在开始采集之前等待PFI 0的上升沿或下降沿。要将AI Start Trigger(ai / StartTrigger)与数字源一起使用,请指定PFI 0作为源并选择上升沿或下降沿。

我的经验表明触发器和AQ之间的延迟非常短暂

抱歉,我使用Python或C语言,因此我无法为您提供MatLab代码,但您希望查看类似的函数。

/* Select trigger source */
Select_Signal(deviceNumber, ND_IN_START_TRIGGER, ND_PFI_0, ND_HIGH_TO_LOW);

/* specify that a start trigger is to be used */
DAQ_Config(deviceNumber, startTrig, extConv); // set startTrig = 1

/* start the acquisition */ 
DAQ_Start(deviceNumber, …)

如果你想走这条路,你可以从以下方面获得更多的想法: http://www.ni.com/white-paper/4326/en

希望这有帮助, 卡尔

答案 2 :(得分:0)

这还没有完整的解决方案,但有些想法可能有用。

  

我确实使用daq跟踪(时间和数据)获取图像和log.txt文件,但是如何使用外部触发(触发相机)或其他时钟来同步两者?

您能想到一种校准设置的方法吗?即修改您的实验并在图像流和电压测量中创建一个独特的事件,可以用于同步? Just like this ...