我想同时使用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 脉冲分配给图像。
附录: 我一直在搜索并找到了一些关于这个主题的讨论(比如这个),并阅读了在 Mathworks 网站上找到的示例,但没有找到答案。该文档显示了如何在外部事件上启动多触发采集,但所讨论的采集仅与基于 DAQ 的输入相关,而不是基于摄像头的输入(它也在前台工作)。