4

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 ベースの入力にのみ関連しており、カメラ ベースの入力には関連していません (フォアグラウンドでも動作しています)。

4

3 に答える 3

1

これで問題が完全に解決するわけではありませんが、それで十分な場合があります。求めている同期信号は 50 Hz であるclockため、両方のタイプのデータ (カメラ画像とアナログ電圧) のタイムスタンプを作成するために使用できます。関数 は実質的に時間がかからないため (つまり、1e-7 秒未満)、それに応じて関数clockを編集してみることができます。SaveData

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

そして、for ループに以下を追加します。

timestamp(i,:)=clock;
于 2013-03-05T23:18:02.303 に答える
1

同期を使用して AD ボードをトリガーできますか? USB-6009の説明書より・・・

PFI 0 をデジタル トリガーとして使用 -- アナログ入力タスクが定義されている場合、PFI 0 をデジタル トリガー入力として構成できます。デジタルトリガが有効な場合、AI タスクは PFI 0 の立ち上がりエッジまたは立ち下がりエッジを待ってから集録を開始します。デジタル ソースで AI 開始トリガ (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 からさらにアイデアを得ることができます。

これが役に立てば幸いです、カール

于 2013-03-25T22:10:29.397 に答える
0

これはまだ完全な解決策ではありませんが、役に立つかもしれない考えがいくつかあります。

画像と daq トレース (時間とデータ) を含む log.txt ファイルを取得しますが、外部トリガー (カメラをトリガーする) または他のクロックを使用して 2 つを同期するにはどうすればよいですか?

セットアップを調整する方法を考えられますか? つまり、実験を変更して、同期に使用できる画像ストリームと電圧測定の両方で個別のイベントを作成しますか? ちょうどこのような ...

于 2013-03-08T10:16:41.333 に答える