1.前言
在认知控制研究中,Stop Signal Task (SST) 是一个经典的行为范式,用于测量抑制控制能力。作为一名神经科学学生,笔者最近需要搭建一个SST范式用于fNIRS实验。虽然网上有不少现成的代码,但大多较为复杂或与自己的实验需求不完全匹配。因此决定从零开始,使用PsychoPy搭建一个实用的SST范式。在这个过程中也踩了不少坑,希望这篇教程能帮助同样需要编写SST的同学少走些弯路。
2.环境配置
笔者在MAC上使用psychopy,安装步骤如下:
- 官网(https://www.psychopy.org),下载最新MAC版本。
- 将PsychoPy拖入Applications文件夹。
- "系统偏好设置"中允许应用。
这种方式安装简单,包含所有依赖,无需额外配置Python环境,适合快速开始~
3.实验设计框架
3.1 SST实验概述
SST的核心是测量被试抑制已经开始的动作反应的能力。在每个试次中,被试会先看到一个Go信号(比如箭头),需要快速按键反应。在少部分试次中(一般约25%-33%),Go信号之后会出现Stop信号(通常是一个声音或视觉提示),这时被试需要抑制自己的按键反应。
3.2 实验设计
基本结构:
-
4个blocks (ABBA设计,2个Condition1 + 2个Condition2)
-
每个block 60个trials (重复2次的30个词)
-
Go trials: 45个 (75%)
-
Stop trials: 15个 (25%)
刺激材料:
-
两组刺激对比:
-
Condition1: 威胁性词汇 vs 中性词
-
Condition2: 损失类词汇 vs 中性词
-
反应要求:
-
Go trials: 快速分类
-
F键 = 负面词
-
J键 = 中性词
-
-
Stop trials: 听到蜂鸣声时抑制反应
4.Psychopy项目搭建

首先需要创建一个规范的项目结构,但是笔者也不太规范哈~大家最好是把Stimulus等也分开。
- 不过重要的需要有ins文件夹,存放指导语图片;
- 停止声音文件:beep.wav;
- 一系列Excel文件:Condition1-1.xlsx、Condition1-2.xlsx、Condition2-1.xlsx、Condition2-2.xlsx(不同条件的刺激配置)。
5.一切的开始:先来写intro!
基本上每个实验开始都是指导语作为第一个Rountine。
笔者的SST实验也是如此,一般一个指导语里只需要有三个组件,分别是:(1)指导语图片,(2)结束按键反应,和(3)如果有神经影像的打marker代码。
唯一特殊的地方是因为我有四个Block,按键和刺激词的平衡设计导致指导语都不一样,所以image组件里的图片路径要特殊设置一下。
$ins表示这个图片组件会读取名为"ins"的循环变量作为图片路径,可以用来按顺序自动展示不同的指导语图片。
6.三个rountine构成一个trial~
trial部分包含以下3个Routine:
1.fix(fixation十字注视点):呈现一个"+"号注视点,帮助被试将注意力集中在屏幕中央,持续0.5秒。
在fix这个Routine中,使用polygon组件来呈现注视点,Shape设置为Cross,duration设为0.5秒。这个十字注视点会帮助被试将视线和注意力集中在屏幕中央。
2.trial(主试次):呈现主要实验刺激,包括四个组件。
# 仅在停止试次时调整SSD
if current['is_stop']:
# 根据是否做出反应调整SSD(抑制失败减50ms,成功加50ms)
ssd_change = -0.05 if exp_resp.keys else 0.05
# 更新并记录SSD
expInfo['ssd'] = max(0, float(expInfo['ssd']) + ssd_change)
thisExp.addData('inhibition_success', int(not exp_resp.keys))
thisExp.addData('ssd', expInfo['ssd'])
SSD代码示范
3.isi(试次间隔):两个试次之间的空屏间隔时间,duration设置为0.5-1.5秒随机,用于避免被试对刺激呈现时间产生预期。
ISI使用一个text组件实现,将duration设置为$random()+0.5+0.5,这样可以产生0.5到1.5秒的随机间隔时间。text内容可以留空,相当于一个空屏呈现。
7.两个Loop串联全局
trials是内循环,串联了每个区块内的3个Routine(fix、trial、isi),负责单个区块内试次的重复呈现。
trials_2是外循环,串联了不同的区块(intro、实验区块、end),控制整个实验的区块切换和流程。
这是一个嵌套循环的结构。每个Bolck刺激材料和按键的改变就靠外循环condition文件的设置。
8.小小总结
关于psychopy开发实验程序的分享就写到这里。
笔者也是最开始为了搭建自己的fNIRS实验开始自己写程序,实测下来psychopy的开发真的很轻便的,基于python都会有这个优势,不用matlab重量级环境也不用Eprime软件包。但是不稳定也真的是不太稳定呢,可能我用笔记本电脑的原因。而且不同的版本有不同的BUG,如果遇到问题,换一个版本试试呢。