2013-02-23 5 views
4

나는 동시에 카메라 (즉, 이미지)와 아날로그 전압을 MATLAB을 사용하여 데이터를 얻고 싶다.Matlab의 데이터 수집 도구 상자와 이미지 수집 도구 상자를 동기화 할 수 있습니까?

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 
I는 I는 데이터 수집 도구를 사용하여 전압을 판독하는 IMAQ 툴박스를 사용하는 카메라의 다음 코드 (NI-USB 장치를 판독)

이미지와 log.txt 파일을 daq trace (시간과 데이터)와 함께 얻지 만 어떻게 (카메라를 트리거하는) 외부 트리거링이나 다른 두 클럭을 동기화하여 사용할 수 있습니까? 이 예제에서 daq는 TTL 신호 (@ 50 Hz)를 트리거하는 카메라를 읽으므로 각 TTL 펄스를 이미지에 할당하려고합니다.

부록 : 나는 검색을 봤는데 주제에 (이 one 등) 몇 가지 논의를 발견하고, 매스 웍스의 웹 사이트에서 발견되지만, 대답을 발견하지 않은 examples을 읽고 . 문서는 Start a Multi-Trigger Acquisition on an External Event을 보여 주지만, 설명 된 수집은 DAQ 기반 입력에만 관련이 있으며 카메라 기반 입력이 아닙니다 (포 그라운드에서도 작동 함).

+0

아무것도가 MATLAB에 존재하지 칼; Mex 기반의 외부 C++ 스레드 라이브러리 또는 Simulink 기반 솔루션을 사용할 수 있습니다. – Arcturus

+0

전압을 기록하기 위해 어떤 장치를 사용합니까? –

+0

왜 중요한지는 모르겠지만 코드에서 NI 디바이스 (USB6009와 같은 아날로그 전압 USB 판독기)를 볼 수 있습니다. –

답변

1

이 방법으로 문제가 완전히 해결되지는 않지만 충분할 수 있습니다. 50Hz로 동기화 된 신호이기 때문에 두 가지 유형의 데이터 (카메라 이미지 및 아날로그 전압)에 대한 타임 스탬프를 만들려면 clock을 사용할 수 있습니다. 기능 clock 실질적으로 (1E-7 초 이하, 즉) 더 시간이 필요하지 않기 때문에, 당신은 그에 따라 SaveData 기능에 편집을 시도 할 수 있습니다 :

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

그리고 루프 추가에

가 :

timestamp(i,:)=clock; 
+1

Mathworks는 시간 측정을 위해 권장하는 tic 및 toc를 사용하는 것이 좋습니다. 시스템 시간에 대한 호출에 의존하지 않습니다. –

+0

답변과 의견을 보내 주셔서 감사합니다. –

0

이것은 아직 완전한 해결책은 아니지만 유용할만한 생각들이 있습니다.

daq 추적 (시간 및 데이터)을 사용하여 이미지와 log.txt 파일을 가져 오지만 어떻게 외부 트리거링 (카메라 트리거) 또는 다른 시계를 사용하여 동기화 할 수 있습니까?

설정을 보정하는 방법에 대해 생각해보십시오. 나는. 실험을 수정하고 동기화에 사용할 수있는 이미지 스트림과 전압 측정 모두에서 뚜렷한 이벤트를 만드시겠습니까? Just like this ...

1

AD 보드를 트리거하기 위해 동기화를 사용할 수 있습니까? USB-6009 매뉴얼에서 ...

디지털 트리거로 PFI 0 사용 - 아날로그 입력 태스크가 정의되면 PFI 0을 디지털 트리거 입력으로 구성 할 수 있습니다. 디지털 트리거가 활성화되면 AI 태스크는 수집을 시작하기 전에 PFI 0에서 상승 또는 하강 에지를 기다립니다. AI 시작 트리거 (ai/StartTrigger)를 디지털 소스와 함께 사용하려면 PFI 0을 소스로 지정하고 상승 또는 하강 에지를 선택하십시오.

내 경험 트리거 사이의 지연을 제시하고 AQ은 매우 짧

나는이 파이썬이나 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

희망, 간단