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