1

現在、私はUniで論文のためにPsychopyで刺激を構築しています.4つの刺激は、モニターのリフレッシュレートを使用して8.57 Hz、10 Hz、12 Hz、および15 Hzでちらつく必要があります.私の質問は、psychopyでそれを行うことができますか?また、サイコピーでちらつくにはどのような機能を使用しますか? これまでに行ったことは、ちらつきが必要な形状を作成することです。ちらつき効果は周波数と位相に依存する必要があります

    from psychopy import visual, event, core,gui ,data,  logging #import c
    from numpy import sin, pi

    cyclepersecond=8.57142
    #Penentuan pergeseran fasa efek grating 
    phase=0
    phase1=0
    phase2=0
    phase3=0
    phase4=0
    #Penentuan Frekuensi temporal dari penampilan efek grating
    #phaseincrement = (cyclepersecond*360)
    #gratingtex=visual.GratingStim(win, res(1), res(2), [0 0 0 0])

    win = visual.Window([1366,768], color='black', units='pix',fullscr=False,) #membuat Window
    #pembuatan stimulus
    kotak1=visual.Rect(win, width= 150,height =150,pos=(10,250),)
    segitiga1=visual.Polygon(win, edges=3, radius=40,pos=(10,250))
    #segitiga1.setColor([-1,1,-1], colorSpace='rgb')
    kotak2=visual.Rect(win, width= 150, height=150,pos=(400,-200))
    segitiga2=visual.Polygon(win, edges=3, ori=90,radius=40, pos=(400,-200))
    kotak3=visual.Rect(win,width=150, height= 150, pos=(-400,-200))
    segitiga3=visual.Polygon(win,edges=3,radius=40,ori=-90,pos=(-400,-200))
    kotak4=visual.Rect(win,width= 150, height=150,pos=(0,-200))
    lingkaran1=visual.Circle(win,radius=40, edges=32,pos=(0,-200))

    trialClock=core.Clock()
    t=0
    while True:
         t=trialClock.getTime()
         kotak1.contrast=sin(t*pi*2)
         kotak1.draw()
         segitiga1.draw()
         kotak2.draw()
         segitiga2.draw()
         kotak3.draw()
         segitiga3.draw()
         kotak4.draw()
         lingkaran1.draw()
         win.flip()
         #core.wait(5.0)


    for key in event.getKeys():
      if key in ['escape','q']:
         core.quit()

matlabのpsychtoolboxから、ちらつき効果にフリップを使用できることはちょっと知っていますが、サイコピーでそれを行う方法が本当にわかりません

4

2 に答える 2

2

PsychoPy には、ちらつきのための組み込み関数がないようです。その作成者である Jon Pierce は、次の方法でちらつきを実装することを推奨しています。

  • フレームのループ (変数を使用frameN)
  • モジュロ演算子 ( ) を使用して%、必要な周波数に対応するフレーム番号からブール値を導出します (フレームのあるブロックで 1 から、次のフレーム ブロックで 0 に戻り、1 に戻るなど)。 .)
  • 各フレームで、画像の不透明度をそのブール値に設定します (1 = 完全に不透明、0 = 透明)

したがって、モニターが 60Hz の場合、((frameN % 12) >= 6)6 フレーム (または 1/10 秒) で 1 になり、次の 6 フレームで 0、次に再び 1、次に再び 0 というようになります。これで 10Hz のちらつきが得られます。実装するフリッカー周波数ごとに、モジュロ関数で異なる除数を使用する必要があります。

于 2016-05-26T20:38:22.823 に答える