我在哪里可以找到心理上刺激的闪烁函数?我该如何使用它?

时间:2016-05-26 19:50:24

标签: python matlab psychopy psychtoolbox

目前我在我的Uni中为我的论文建立了心理学上的刺激,4个刺激需要使用显示器刷新率在8.57 Hz,10 Hz,12 Hz和15 Hz闪烁,我的问题是,心理上可以这样做吗?还有什么功能可用于在心理上闪烁?到目前为止我所做的是创造需要闪烁的形状。闪烁效应必须取决于频率和相位

    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中知道你可以使用翻转来实现闪烁效果,但我真的不知道如何在心理上做到这一点

2 个答案:

答案 0 :(得分:2)

@ A_S00发布了一个很好的概念性答案。只是非常具体,假设您使用60 Hz监视器:

  1. 8.57 Hz对应于60 / 8.57 = 7帧开启和7帧关闭。
  2. 10 Hz - > 6帧
  3. 12 Hz - > 5帧
  4. 15 Hz - > 4帧
  5. ...这里假设频率是SHIFTS的频率(每秒8.57次移位)而不是CYCLES(每秒8.57次开关),因为后者在60 Hz监视器上是不可能的,因为你应该改变它第3帧和第4帧之间的图像。

    因此,例如你会做12赫兹:

    flicker_frequency = 12
    current_frame = 0
    while True:
         # When to draw stimuli
         if current_frame % (2*flicker_frequency) < flicker_frequency:
             kotak1.contrast = sin(t*pi*2)
             kotak1.draw()
             segitiga1.draw()
             kotak2.draw()
             segitiga2.draw()
             kotak3.draw()
             segitiga3.draw()
             kotak4.draw()
             lingkaran1.draw()
    
         # Show whatever has been drawn. Sometimes the stimuli, other times a blank screen. flip() waits for the next monitor update so the loop is time-locked to the screen here.
         win.flip()
         current_frame += 1  # increment by 1.
    

答案 1 :(得分:1)

PsychoPy似乎没有内置的闪烁功能。它的创建者Jon Pierce recommends通过以下方式实现闪烁:

  • 循环帧(使用变量$newhash ={ 'user1@192.168.14.47' => { type => 'ssh-rsa', key => 'Key1', user => ["user3","user4"] }, 'user2@192.168.18.10' => { type => 'ssh-rsa', key => 'Key2', user => ["user3"] } } create_resources('ssh_authorized_key',$newhash)
  • 使用 modulo 运算符(frameN)从帧编号中导出一个布尔值,对应于您想要的频率(以便它从一个帧的帧开始,然后在下一个帧块上为0,然后返回到1,等等。)
  • 在每个帧上,将图像的不透明度设置为该布尔值(1 =完全不透明,0 =透明)

因此,如果你的显示器是60Hz,%将是6帧(或1/10秒),那么接下来的6帧为0,然后再为1,然后再为0,所以上。那会让你的10Hz闪烁;对于你想要实现的每个闪烁频率,你必须在模数函数中使用不同的除数。