事先说明一下,本人没有做过心理学相关内容,使用这个工具包只是单纯为了做脑电实验。
一、下载安装
相关下载安装教程在网上可以搜到很多,可以在官网上在线安装也可以下载别人提供的现成安装包进行离线安装,不做过多赘述。但想提醒一下,如果不是想挑战自己,一定!一定!一定选择离线安装!我本人在官网上捣鼓了好久也没成功,但离线安装一次成功。
二、环境及屏幕设置
1、环境设置
这一步基本上是通用的,可以直接用下面的代码
Screen('Preference', 'SkipSyncTests',1);
Screen('Preference', 'Verbosity',0);
% call defauli settings for setting up PTB
PsychDefaultSetup(2);
% set the screen number to the external secondary monitor if there is one
ScreenNumber = max(Screen('Screens'));
2、屏幕设置
% color setting
white = 255;
black = 0;
bkGround = black;
% open the screen
HideCursor;
[win,wsize] = Screen('OpenWindow', ScreenNumber);
Screen('FillRect', win, bkGround);
Screen('Flip', win);
cx = wsize(3)/2;
cy = wsize(4)/2;
% set the text
Screen('TextFont', win, 'Simsum');
Screen('TextSize', win, 60);
在颜色设置部分,可以选择背景颜色,通常为黑色或白色,相对应的文字颜色为白色或黑色,在我自己的实验中我使用了黑底白字。HideCursor后可以在视觉刺激界面开启后隐藏鼠标。[win,wsize]可以指定一个呈现视觉刺激内容的屏幕win,wsize为一个四维数组,第三、四维分别为屏幕的长和宽,因此坐标(cx, cy)即为屏幕中心。Screen('FillRect', win, bkGround)可以为整个屏幕填充颜色(即为背景色),Screen('Flip', win)可以在屏幕上生成一个画布。最后两行可以指定字体的格式和大小。
三、实验流程编写
在这里以最简单的静息态脑电采集为例进行说明。希望实现的效果是实验开始时屏幕中央出现“准备”字样,3秒后在屏幕中央出现“+”,120秒后结束。在这里要声明一下!只是举了一个简单实验范式的例子,具体实验范式的确定需要调研你所做实验的相关文献!
1、实验流程代码
txt1 = double('准备');
bRect = Screen('TextBounds', win, txt1);
Screen('DrawText', win, txt1, cx-bRect(3)/2, cy-bRect(4)/2, white);
time_stamp = Screen('Flip', win);
txt2 = double('+');
bRect = Screen('TextBounds', win, txt2);
Screen('DrawText', win, txt2, cx-bRect(3)/2, cy-bRect(4)/2, white);
time_stamp = Screen('Flip', win, time_stamp+3);
% 可打标签
Screen('FillRect', win, bkGround);
Screen('Flip', win, time_stamp+120);
bRect = Screen('TextBounds', win, txt1)可以指定一个矩形区域呈现文字内容;
Screen('DrawText', win, txt1, cx-bRect(3)/2, cy-bRect(4)/2, white)设置此矩形区域位于屏幕中心,文字颜色为白色;
time_stamp = Screen('Flip', win)在此画布出现的同时打时间戳,便于精确计时;
time_stamp = Screen('Flip', win, time_stamp+3)第一张“准备”画布的持续时间为3秒,所以下一张“+”画布出现的时间戳应该为上一个时间戳延后3秒,后面以此类推。
2、注意事项
(1)KbWait的使用
程序开始运行之后会出现一些与实验无关的、psychtoolbox自带的画面,可能会影响脑电采集所需要的平静状态,因此我习惯在实验流程代码前加一行KbWait;,等待键盘按下后再开始正式实验。这时的实际运行效果为:无关画面结束后,界面为黑屏,此时可以提醒被试保持平静状态,平静几秒后按下键盘任意按键,实验开始。
(2)try...catch...end的使用
在调试代码时可能会出现代码有bug但无法退出,因此卡住的情况,此时只能强制退出matlab。为了避免卡住的情况,可以将实验流程代码写在try语句后,如果没有发现错误则正常运行,如果发现错误则执行catch语句后的sca,退出视觉刺激界面。因此,实验部分最终的代码编写如下:
KbWait;
try
txt1 = double('准备');
bRect = Screen('TextBounds', win, txt1);
Screen('DrawText', win, txt1, cx-bRect(3)/2, cy-bRect(4)/2, white);
time_stamp = Screen('Flip', win);
txt2 = double('+');
bRect = Screen('TextBounds', win, txt2);
Screen('DrawText', win, txt2, cx-bRect(3)/2, cy-bRect(4)/2, white);
time_stamp = Screen('Flip', win, time_stamp+3);
% 可打标签
Screen('FillRect', win, bkGround);
Screen('Flip', win, time_stamp+120);
catch
sca;
end
如有其他问题,欢迎在评论区交流讨论,最后祝大家实验顺利!