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 ファイルを取得しますが、外部トリガー (カメラをトリガーする) または他のクロックを使用して 2 つを同期するにはどうすればよいですか? この例では、daq はカメラのトリガー TTL 信号 (@ 50 Hz) を読み取るため、各 TTL パルスを画像に割り当てたいと考えています。
補遺:この件 に関するいくつかの議論 (このようなもの) を検索して見つけ、Mathworks Web サイトにある例を読みましたが、答えが見つかりませんでした。ドキュメントには、外部イベントでマルチトリガー取得を開始する方法が示されていますが、説明されている取得は DAQ ベースの入力にのみ関連しており、カメラ ベースの入力には関連していません (フォアグラウンドでも動作しています)。