【问题标题】:Hardware Synchronization for Scientific Experiment科学实验硬件同步
【发布时间】:2016-05-22 15:54:13
【问题描述】:

我是 python 以及科学实验设置的新手。我的实验设置包括向受试者展示一些用 Python 编程的视觉刺激。当受试者看着这些视觉刺激时,他们的眼睛数据将使用眼动仪 (Pupil Labs) 记录下来。 Pupil Labs 是一个开源平台,它还提供了这种设施,它使用 TCP 套接字将数据(即注视或眼球运动)广播到服务器。

现在我计划记录所有数据,例如显示特定刺激的时间以及记录从服务器接收到的眼球运动数据。问题是同步这两件事,比如在特定时间显示一些“xyz”刺激,我想记录在那个特定时间眼睛数据到底是什么。

我正在用 Python 编写代码,到目前为止发生的事情是有一个主程序使用psychopy 库显示刺激。在那个主程序中有一个从服务器接收数据的线程。

我想知道如何同步这个任务。我对这样的任务很陌生,我也不确定通过互联网寻找什么。我会很感激你的帮助。

【问题讨论】:

    标签: python multithreading psychopy experimental-design


    【解决方案1】:

    查看文档,Pupil Labs 眼动追踪事件有一个timestamp 由计算机上的系统时钟设置,相对于某个纪元时间(在 unix 系统上为 1970 年 1 月 1 日)。同样,您可以在 pychopy 中找到事件的时间戳,这些时间戳将显示在您的实验日志中。

    收集数据后,读入瞳孔数据并将其转换为 numpy 数组(瞳孔时间、瞳孔 x 和瞳孔 y)。接下来加载您的 pyschopy 数据。 pyschopy 中的时间戳可能相对于您的实验开始存储,在这种情况下,您必须将实验开始时间添加到刺激呈现时间(开始时间应该在存储数据中的某处可用)。

    给定瞳孔时间、瞳孔 x、瞳孔 y 数组,您可以在实验期间绘制瞳孔运动:

    import matplotlib.pyplot as plt
    import numpy as np
    
    # time since stimulus presentation, in seconds
    t = np.linspace(0, 4, 400)  
    
    # time since stimulus presentation, relative to pupil data time
    abs_t = t + stimulus_presentation_timestamp
    
    # plot interpolated eye position from pupil data
    px, py = np.interp(abs_t, pupil_time, pupil_x), np.interp(abs_t, pupil_time, pupil_y)
    plt.plot(px, py)
    plt.show()
    

    您可能不想对数据进行插值 如果 Pupil Labs 软件仅记录每次扫视后的位置,那么使用 searchsorted 查找时间 t 之前最后记录的瞳孔位置可能更合适。


    2016-05-23 更新:使用 t_abs 插值眼睛位置

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      • 2012-07-26
      • 1970-01-01
      • 2012-08-15
      • 2012-02-17
      • 2018-05-28
      相关资源
      最近更新 更多