【发布时间】:2015-03-11 15:44:01
【问题描述】:
我是 python 和 Psychopy 的新手,但是我在编程和设计实验(使用 Matlab 和 EPrime)方面拥有丰富的经验。我正在运行一个 RSVP(快速视觉串行演示)实验,每 X 毫秒显示一个不同的视觉刺激(X 是一个实验变量,可以从 100 毫秒到 1000 毫秒)。由于这是一项生理实验,我需要在刺激开始时通过并行端口发送触发器。我使用示波器和光电传感器测试触发器和视觉开始之间的同步。但是,当我在 win.flip() 之前或之后发送触发器时,即使使用窗口 waitBlanking=False 参数,我仍然会得到刺激开始和代码开始之间的差异。
附上我的代码:
im=[]
for pic in picnames:
im.append(visual.ImageStim(myWin,image=pic,pos=[0,0],autoLog=True))
myWin.flip() # to get to the next vertical blank
while tm < and t < len(codes):
im[tm].draw()
parallel.setData(codes[t]) # before
myWin.flip()
#parallel.setData(codes[t]) # after
ttime.append(myClock.getTime())
core.wait(0.01)
parallel.setData(0)
dur=(myClock.getTime()-ttime[t])*1000
while dur < stimDur-frameDurAvg+1:
dur=(myClock.getTime()-ttime[t])*1000
t=t+1
tm=tm+1
myWin.flip()
如何将我的刺激开始同步到触发器?我不确定这是否是显卡问题(我正在使用带有板载 Intel 显卡的 LCD ACER 屏幕)。非常感谢,
沙尼
【问题讨论】:
-
您是否将光电传感器设置在屏幕顶部,您看到什么样的延迟?屏幕中间的光电传感器通常会产生 5-8 毫秒的显示器端延迟。
-
顺便说一句,由于时间很重要,所以不要使用秒和while来控制时间。使用 win.flip()s 因为视觉时间无论如何都被离散锁定到帧。因此,在 60 Hz 显示器上中断 0.5 秒,在 win.flip() 上循环 0.5*60 次。
-
嗨 Jonas,我检查了屏幕顶部和中间的光传感器,这会产生类似的延迟。我所说的延迟比屏幕刷新-20-40 毫秒还要大。关于使用翻转的时间,因为我在显示器之间有代码(发送触发器,检查响应),我发现只使用翻转通常会导致一帧额外的帧。如果像我上面那样编程(ttime[t]-ttime[t-1] 是完美的,因为我少等待一帧,然后执行我的代码,然后等待下一个翻转。
-
这个问题你解决了吗?
-
不,从来没有...回到使用 EPrime
标签: python-2.7 parallel-port psychopy