2017-11-19 19 views
0

私はMATLAB(R2014b)のPsychtoolboxで反応時間実験を行っています。私はSyncTestsを使用しています。これは、私が実験を実行したときに要求された応答期限を逃したフリップコマンドの数を見積もります。欠落したフリップの数が高すぎる(つまり、懸念を引き起こす)のは何ですか?私は通常、1900フリップあたり約140点を取得するので、7%を少し上回ります。それは大丈夫ですか?Psychtoolbox(MATLAB)に欠けているフリップの数が多すぎますか?

これは私が受け取ったメッセージです(実際の実験数は実験のたびに少しずつ異なります): "情報:PTBの画面( 'Flip'、10)コマンドは、要求された刺激提示期限を逸しているようですこのセッション中に合計1900回のフリップのうち130回を記録しました。

は、ここで私は反転するために使用する(その後、私のコードの最も重要な部分であるRTを測定する)のコードです:

WaitSecs(.2); [this is the intertrial interval, more or less] 
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); 
          [etc., I just close all loops/if statements and move on 
          to the next trial] 

コンテキストのビット:私は、Windows 10上で、私のパラダイムを実行しています、また、私が回避できないDPI認識の問題もあります(MATLABがコンピュータ上でDPIを認識していないという警告が表示されます)。これがどのような問題を引き起こすのかは分かりませんが、パラダイムは自分がやりたいことをやっているように見えるだけでなく、イメージがうまく表示されるので、それほど心配することはありません。私は持っていますか?反応時間の測定の正確さを混乱させることができますか?

+0

Psychtoolboxテストスクリプト/機能を使用して、または実験内でフリップの7%が欠落していますか? – DMR

+0

混乱についてごめんね。私の実験を実行した後、約7%のフリップ(1900年のうち約140%)が見逃されたと報告しています。後者はそうだと思います。 – MGy

+0

'When'パラメータをScreen 'Flip'に指定していますか? – DMR

答えて

0

私は実験の残りの部分を持っていないので、以下の提案は少し不完全ですが、私はあなたが考えを得ると思います。前もって画面のフリップをスケジューリングすることにより、より高い精度を得ることができるはずです。この例では、前回の刺激と現在の刺激との間の時間がフレームとして計算され、現在の刺激は、1フレームの1/2の時間だけ予定されています。 Psychtoolboxはそれを次の可能なフレームで表示します。これは、フレーム間に視覚刺激を表示できないためです。

mainwin = Screen('OpenWindow'); 

% fetch the interflip interval of the screen 
ifi = Screen('GetFlipInterval', mainwin); 

% inter-trial interval 
ITI = .2; 

% start of block, flip a screen at an arbitrary time to get a reference 
% point for the first trial 
Screen('FillRect', mainwin, 0); 
[~, lastVisualOnset] = Screen('Flip', mainwin); 

% ID the number of frames until the next stimulus should be presented 
% trial-by-trial timing jitter could also be added here if desired 
nextStimFrameDelta = round(ISI/ifi); 

Screen('DrawTexture', mainwin, Target); 

% schedule the Flip in advance by .5 frames less than needed, 
% so that the next available frame will be the one wanted 
% this visual onset time stamp will then be the reference point for the 
% next trial 
[~, lastVisualOnset] = Screen('Flip', mainwin, lastVisualOnset + ((nextStimFrameDelta - 0.5) * ifi)); 

keyIsDown=0; correct=0; rt=0; 
while (GetSecs - lastVisualOnset) < 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-lastVisualOnset); 
       keypressed=find(keyCode); 
       Screen('Flip', mainwin); 
      end 
     end 
    end 
end 
+0

ありがとう、これはすばらしい提案であり、私はスクリプトのTarget flipのためにそれを実装しようとしました。欠落したフリップの数は大幅に減少しませんでしたが、何か間違っている可能性があります。もっと重要なのは、あなたのソリューションが刺激の発症タイミングをより正確にする(つまり、ITIは意図した値に近づく)が、RTには影響しないと言うことは公正だろうか?つまり、GetSecs - timeStart(私の方法)とGetSecs - lastOnsetは、両方とも刺激プレゼンテーションの完了に続くタイムスタンプとキー押下の間の時間を測定するので、同様の値を生成します。彼らは私のために思った。 – MGy

関連する問題