2017-10-30 9 views
0

MATLAB에서 Stroop과 같은 반응 시간 작업을 생성했으며 파일럿 결과를 보면 코드에 문제가있을 수 있음을 알 수 있습니다 (일치하는 효과는 예상보다 훨씬 큽니다). RT가 잘못 기록 된 것 같아서 다음 설정이 괜찮은지 누군가가 나를 도와 줄 수 있습니까?KbCheck 및 GetSecs를 사용하여 MATLAB (Psychtoolbox)의 충돌 작업에 반응 시간 기록

주어진 시련에 대해 두 개의 이벤트가 발생합니다 (고정 십자가에 따라) : 먼저 대상 자극이 최대 3 초 (또는 응답까지) 동안 표시되고 참가자는 다음 버튼을 눌러야 다음 이벤트가 시작됩니다 시도. 두 버튼 프레스 (대상 및 시연 시작 버튼)에 대한 RT가 기록됩니다. 여기 내 코드가 :

Screen('DrawTexture', mainwin, Target); 
     Screen('Flip', mainwin); 
     timeStart = GetSecs;keyIsDown=0; correct=0; rt=0; 
     while 1 & (GetSecs - timeStart) < 3 
       [keyIsDown, secs, keyCode] = KbCheck; 
       FlushEvents('keyDown'); 
       if keyIsDown 
        nKeys = sum(keyCode); 
        if nKeys==1 
         if keyCode(Left)||keyCode(Right)||keyCode(Down)||keyCode(Up) 
          rt = 1000.*(GetSecs-timeStart); 
          keypressed=find(keyCode); 
          Screen('Flip', mainwin); 
          if ... [I removed some irrelevant ERROR feedback related code here]... 
         elseif keyCode(escKey) 
          ShowCursor; fclose(outfile); Screen('CloseAll'); return 
         end 
         keyIsDown=0; keyCode=0; 
        end 
       else 
        keypressed = 0; %the resp column in output is 0 if no button is pressed 
       end 
     end 
     if keypressed == 0 %indicates timeout errors 
      DrawFormattedText(mainwin, 'TOO SLOW', 'center', 'center', errorcol); 
      Screen('Flip', mainwin); 
      WaitSecs(1); 
     end 
     Screen('DrawTexture', mainwin, press5); 
     Screen('Flip', mainwin); 
     keyIsDown=0; timeSt = GetSecs; 
     while 1 
      [keyIsDown, secs, keyCode] = KbCheck; 
      if keyIsDown 
       if keyCode(MoveOn) 
        pause_rt = 1000.*(secs - timeSt); 
        break ; 
       elseif keyCode(escKey) 
        ShowCursor; 
        fclose(outfile); 
        Screen('CloseAll'); 
        return; 
       end 
      end 
     end 

내 질문 : GetSecs 명령은 호출 될 때마다 시간을 얻는다. 맞습니까? 따라서 GetSecs - timeStart는 RT를 계산할 수있는 괜찮은 방법입니다. 그러나 secs는 buttonpress에 대해 KbCheck가 반환하는 시간이므로 secs - timeSt (두 번째 자극에 대해 알 수 있습니다)입니다. 이 두 메서드는 대체로 비슷합니다 (GetSecs - timeStart가 RT를 약간 과대 평가하는 경우). 맞습니까?

NEXT 평가판의 대상에 대한 RT 예상치는 이전 평가판의 RT 버튼 두 번째 버튼의 영향을받을 수 있습니다. 그 증거가 보이니?

답변

1

GetSecs은 호출 할 때마다 시간을 반환한다는 것이 맞습니다. 그러나 오류의 원인은 아니지만 각 창 뒤집기 후에 GetSecs를 호출하는 것은 필요하지 않습니다. 왜냐하면 Flip 함수는 자극의 예상값을 함수의 두 번째 출력으로 반환하기 때문입니다. 예를 들어, 다음 대신에 :

화면 ('Flip', mainwin); timeStart = GetSecs;

당신은 사용할 수 있습니다

[~ timeStart] = 화면 ('플립', 윈);

코드에서 분명히 잘못된 점을 알지 못합니다. RT가 잘못된 것처럼 보일 때, 너무 빠르거나 느린 것처럼 보입니까? 개인적으로 키를 공개 할 때까지 기다릴 RT를 수집 한 후 KbReleaseWait을 사용하지만 FlushEvents가 여기에서 비슷한 작업을 수행하고 있습니다.

+0

제안 해 주셔서 감사합니다. 문제는 RT 자체가 잘 보이기 때문에 조금 복잡하지만 다른 시험 유형 (상충되는 것과 상반되지 않는 것) 간의 RT 차이는 문학보다 훨씬 크다. 동일한 재판에서 서로 다른 이벤트에 대해 두 개의 별도 RT를 기록합니다. – MGy