脑与认知科学-实验一-认知科学实验设计

脑与认知科学-实验一-认知科学实验设计

采用的是matlab里的Psychtoolbox进行实验

一,实验目的与要求

  1. 通过实验加深对认知科学研究方法及过程的了解;
  2. 掌握Psychtoolbox或PsychoPy的安装过程;
  3. 掌握Psychtoolbox或PsychoPy的基本使用方法;
  4. 具备使用Psychtoolbox或PsychoPy设计基本心理学/认知科学内容实验的初步能力;

二,实验内容与方法

1. 请在此处简单描述Psychtoolbox或PsychoPy的安装过程。并请描述在安装过程中的难点和遇到的问题。(100字-300字)

Psychtoolbox安装过程:
(1)从官网下载一个ZIP格式的文件,并将其解压
(2)创建一个toolbox文件夹,然后将上述解压后文件夹内的全部文件复制到toolbox文件夹内

image-20230927185938948

(3)下载MSVC版本的GStreamer,下载后选择complete选项进行安装即可
(4)下载SVN,下载完毕后打开matlab,进入到自己创建的toolbox文件夹中的psychotoolbox。在命令行输入SetupPsychtoolbox,等待安装,等到弹出Enjoy!后确定安装成功

image-20230927185920617

遇到的问题:
(1)软件下载网站均为国外网站,建议使用国外站点进行下载会有更快的速度
(2)MSVC版本需要下载最新的版本,我第一次下载时选了一个中间版本,在后续的过程中,运行matlab后,在命令行输入SetupPsychtoolbox出现报错,后来我重新下载回最新版本后,安装及测试均成功

2. 请简述你认为在这次实验中最重要的一条命令的基本功能,以Psychtoolbox为例,可以介绍Screen命令的基本功能。

[wptr,rect]=Screen(‘OpenWindow’,1,0,[50,50,860,720]);
函数一共有四个输入参数:
第一个参数是使用Screen函数要做的事情,这里是OpenWindow(打开一个窗口);第二个参数是使用的屏幕编号,主要是针对有多个显示器的电脑,如果只有一个显示器,这个参数设置为0即可,如果是两个显示器,参数需要为1,我这里试了一下设置为2也可以,两个屏幕的情况下这个参数应该是不为0就行;第三个参数是窗口颜色的设置,这个不要瞎搞,没有特殊需求的话,就设置为0默认就好了;第四个参数是窗口四个边(左,上,右,下)在显示器上的位置的设置,设定好之后,窗口的大小也就确定了。

三,练习题

1.请选择下列两个实验内容之一进行完成:

设计简单实验,内容如下。

在屏幕中显示两个不同颜色的圆,并显示提示词:要求用户选择其中一个圆,并根据选择使用鼠标点击屏幕。等待用户点击屏幕,输出通过点击位置判定点击的是哪一个圆,并输出从显示图像到用户点击屏幕的时间。

(1)测试界面展示

image-20230927190138267

(2)代码分析
%1. 首先跳过PTB刷新率检测,然后开始试验,使用screen函数打开一个窗口
clear;
clc;
PsychDebugWindowConfiguration; 

Screen('Preference','SkipSyncTests', 1); %跳过PTB刷新率检测

%试验开始
[wptr,wrect]=Screen('OpenWindow',0,0,[]); %打开窗口

[win,wsize] = Screen(‘OpenWindow’,screenNumber):其中获取窗口信息保存在windowPtr类型指针win中进行窗口操作,wsize保存[0,0,xx,xx]四个值的变量后两位表示屏幕横竖轴分辨率

%2. 获取屏幕中心位置,并根据中心位置输出两个圆的位置
cx = wrect(3)/2;
cy = wrect(4)/2;%获取屏幕中心位置

%输出两个圆
r1 = [cx - 600 cy - 100 cx - 400 cy + 100];
Screen('FillOval',wptr,[100,255,255], r1);
r2 = [cx + 400 cy - 100 cx + 600 cy+100];
Screen('FillOval',wptr,[255,255,100], r2);

Screen函数第一个参数为方法,画圆形则用FillOval方法,画方形则用FillRect方法,画线条则用Drawline方法,第二个参数为窗口指针,第三个参数为RGB颜色灰度值,第四个参数为圆心位置,这里的圆心我使用的是相对屏幕中心的位置。

%3. 输出提示文字,刷新画面,开始计时
text = '请选择并用鼠标点击其中一个圆形';
Screen('TextSize', wptr, 30);
DrawFormattedText(wptr, double(text) ,'center',800,[255,255,255]);

Screen('Flip',wptr); %刷新画面
start_time = GetSecs;%刷新画面后开始计时
t1 = table;

使用Screen函数的TextSize方法输出文字,第二个参数为窗口指针,第三个参数为字体大小,然后用Screen(’Flip’, wptr)刷新画面,使用GetSecs函数获取当前时间

%4. 使用循环,等待用户鼠标点击圆形区域,记录下点击的时间
while true
    [mouse_x,mouse_y,click] = GetMouse;%获取鼠标位置
    if mouse_x >= r2(1) && mouse_x <= r2(3) && mouse_y >= r2(2) && mouse_y <= r2(4) && click(1) == 1
        % 鼠标落入右边圆的范围内,并且点击
        t1.key = '右';
        end_time = GetSecs;
        t1.time = end_time - start_t`在这里插入代码片`ime;
        break
    elseif mouse_x >= r1(1) && mouse_x <= r1(3) && mouse_y >= r1(2) && mouse_y <= r1(4) && click(1) == 1 
        % 鼠标落入左边圆的范围内,并且点击
        t1.key = '左';
        end_time = GetSecs;
        t1.time = end_time - start_time;
        break
    end
    WaitSecs(0.0001);
end

获取鼠标位置后,若用户的鼠标位置在圆内并且进行了点击的操作,则记录下用户选择的是左边的圆还是右边的圆,同时记录用户鼠标点击的时间,与开始时间做差,为测试的时间。

%5.保存结果,包括用户选择的左右圆,以及测试的时间
datadir = fullfile(fileparts(mfilename('fullpath')),'test'); %存储数据
if ~exist(datadir,'dir')
    mkdir(datadir);
end
datafile = fullfile(datadir,sprintf('time.csv'));
writetable(t1, datafile);
Screen('CloseAll')

image-20230927191001979

2. 请阅读论文或书籍,选择其中的一个心理学实验进行编程实现,给出你的选题来源,叙述你所要测试的目标、给出你的实验设置、实验内容、与实验结果的展示。

实验名称:斯特鲁普Stroop任务的联结主义模型
实验原理介绍:

观察下面的三组有色文字,请说出每个词语显示出来的颜色

image-20230927191144362

​ 第一组:如果文字的意义与显示的字体颜色相同,例如绿色颜色的“绿色”二字,那么说出显示文字的颜色的名称比较容易且迅速,反应时RT会很短。
​ 第二组:如果文字是以红色这一颜色显示,而文字是“绿色”二字,那么反应时RT会变长,且辨识很容易出错。
​ 第三组:如果文字的意义与显示的字体颜色没有关系,例如老鼠等词语,那么说出显示文字的颜色的名称比第二组容易且迅速,RT比第二组短。
​ 斯特鲁普效应展示了人们对事物的认知过程是一个自动化的过程。当有一个新的刺激出现时,如果它的特征和原先的刺激相似或一致,其会加速人们的认知;反之,若新的刺激特征与原先的刺激不相同,则会干扰人们的认知,使人们反应时变长。

实验过程介绍:
  1. 随机生成三个不同颜色的圆,每个圆内会随机生成对应三种颜色的干扰文字,文字内容和圆实际的颜色不一定相同
  2. 提示用户选择某一种颜色的圆,测定用户在不同种文字干扰的前提下选择正确的时间以及正确率
实验代码介绍
1. 同第一个实验一样,先定义一些基本设置(窗口,存储数据地址……)
clear;
clc;
PsychDebugWindowConfiguration; 

Screen('Preference','SkipSyncTests', 1); %跳过PTB刷新率检测

%试验开始
[wptr,wrect]=Screen('OpenWindow',0,0,[]); %打开窗口

cx = wrect(3)/2;
cy = wrect(4)/2;%获取屏幕中心位置

%创建结果文件
datadir = fullfile(fileparts(mfilename('fullpath')),'test2'); %存储数据
if ~exist(datadir,'dir')
    mkdir(datadir);
end
datafile = fullfile(datadir,sprintf('time.csv'));
2. 建立表格用来暂时存放每次实验的数据

补充:matlab table操作:

预生成格式:

sz = [1, 5];%建立表格存储数据
varTypes = ["string", "double", "string", "string", "string"]; %每列的元素格式
varNames = ["correct", "time", "text", "real_color", "ask"]; %表头名称
t1 = table('Size',sz,'VariableTypes', varTypes, 'VariableNames', varNames); %生成一个表格
t2 = table('Size',sz,'VariableTypes', varTypes, 'VariableNames', varNames);
其中t1用来存储多次实验数据,t2用来暂存每次实验的数据

更多matlab table操作请参考

3. 多次循环进行实验

3.1 两次随机生成1到3的排列顺序,一次作为圆形的实际颜色,一次作为圆形上文字的颜色,再随机生成一个1到3的数作为需要用户选择的颜色顺序

while time
    Screen('FillRect', wptr, 0);  %把屏幕w涂成黑色
    Screen('Flip', wptr); 
    random_numbers = randperm(3, 3);
    random_color_numbers = randperm(3, 3);
    color_choice = randi(3);
    if color_choice == 1
        text = '请选择红色的圆';
        t2.ask = "红";
        Screen('TextSize', wptr, 30);
        DrawFormattedText(wptr, double(text) ,'center',800,[255,255,255]);
        Screen('Flip', wptr) %刷新画面
        WaitSecs(3);
        Screen('FillRect', wptr, 0);  %把屏幕w涂成黑色
        Screen('Flip', wptr); 
    elseif color_choice == 2
        text = '请选择绿色的圆';
        t2.ask = "绿";
        Screen('TextSize', wptr, 30);
        DrawFormattedText(wptr, double(text) ,'center',800,[255,255,255]);
        Screen('Flip', wptr) %刷新画面
        WaitSecs(3);
        Screen('FillRect', wptr, 0);  %把屏幕w涂成黑色
        Screen('Flip', wptr); 
    elseif color_choice == 3
        text = '请选择蓝色的圆';
        t2.ask = "蓝";
        Screen('TextSize', wptr, 30);
        DrawFormattedText(wptr, double(text) ,'center',800,[255,255,255]);
        Screen('Flip', wptr) %刷新画面
        WaitSecs(3);
        Screen('FillRect', wptr, 0);  %把屏幕w涂成黑色
        Screen('Flip', wptr); 
    end

3.2 产生对应颜色,对应文字

rgb值, 红255,0,0 绿0,255,0 蓝0,0,255

输出文字可以用两种方法
(1)Screen(‘DrawText’, w, Text, 420, 340,[0,0,255]); %呈现文字在屏幕上的函数
(2)DrawFormattedText(w, Txt, 420, 340, [0, 0, 255]);

    %输出三个不同颜色的圆以及对应的误导文字,中间是r1,左边是r2,右边是r3
    r1 = [cx - 100 cy - 100 cx + 100 cy + 100];
    Screen('FillOval',wptr, colors(random_numbers(1),:), r1);
    text1 = colors_ch(random_color_numbers(1));
    Screen('TextSize', wptr, 30);
    DrawFormattedText(wptr, double(text1), cx, cy, [0, 0, 0]);

    r2 = [cx - 600 cy - 100 cx - 400 cy + 100];
    Screen('FillOval',wptr, colors(random_numbers(2),:), r2);
    text2 = colors_ch(random_color_numbers(2));
    Screen('TextSize', wptr, 30);
    DrawFormattedText(wptr, double(text2), r2(1)+100, r2(2)+100, [0, 0, 0]);

    r3 = [cx + 400 cy - 100 cx + 600 cy + 100];
    Screen('FillOval',wptr, colors(random_numbers(3),:), r3);
    text3 = colors_ch(random_color_numbers(3));
    Screen('TextSize', wptr, 30);
    DrawFormattedText(wptr, double(text3), r3(1)+100, r3(2)+100, [0, 0, 0]);

    Screen('Flip', wptr);

3.3 判定鼠标的位置和点击事件,记录用户的选择,花费的时间,以及正确与否

%刷新画面后开始计时
    start_time = GetSecs;
    while true
        [mouse_x,mouse_y,click] = GetMouse;%获取鼠标位置
        if mouse_x >= r1(1) && mouse_x <= r1(3) && mouse_y >= r1(2) && mouse_y <= r1(4) && click(1) == 1
            % 鼠标落入中间圆的范围内,并且点击
            t2.text = text1;
            t2.real_color = colors_ch(random_numbers(1));
            if random_numbers(1) == color_choice
                t2.correct = 'right';%选择正确
            else
                t2.correct = 'wrong';%选择错误
            end
            end_time = GetSecs;
            t2.time = end_time - start_time;
            t1 = [t1; t2];
            break
        elseif mouse_x >= r2(1) && mouse_x <= r2(3) && mouse_y >= r2(2) && mouse_y <= r2(4) && click(1) == 1 
            % 鼠标落入左边圆的范围内,并且点击
            t2.text = text2;
            t2.real_color = colors_ch(random_numbers(2));
            if random_numbers(2) == color_choice
                t2.correct = 'right';%选择正确
            else
                t2.correct = 'wrong';%选择错误
            end
            end_time = GetSecs;
            t2.time = end_time - start_time;
            t1 = [t1; t2];
            break
        elseif mouse_x >= r3(1) && mouse_x <= r3(3) && mouse_y >= r3(2) && mouse_y <= r3(4) && click(1) == 1 
            % 鼠标落入右边圆的范围内,并且点击
            t2.text = text3;
            t2.real_color = colors_ch(random_numbers(3));
            if random_numbers(3) == color_choice
                t2.correct = 'right';%选择正确
            else
                t2.correct = 'wrong';%选择错误
            end
            end_time = GetSecs;
            t2.time = end_time - start_time;
            t1 = [t1; t2];
            break;
        end
    end
    time = time - 1;
4. 存储实验数据
datafile = fullfile(datadir,sprintf('time.csv'));
writetable(t1, datafile);
Screen('CloseAll')
测试页面展示:

image-20230927193750503

image-20230927193757972

实验结果展示:

image-20230927193814865

​ 从该实验结果可以粗略看出,当圆形实际颜色与文字一致时,做出选择的时间会相对较短一些,并且选择红色和蓝色的时间花费较短,选择绿色花费较长,除了圆形所在位置产生的影响外,可能是因为我才用的文字是黑色,而绿色颜色较浅,更容易注意到文字,蓝色和红色颜色较深,较难注意到文字,从而受到影响。
当然本实验还有许多地方可以改进的:

(1)可以将文字放大,并且使用与圆背景不一样的颜色,比如说给蓝色和红色的圆使用较浅的绿色文字,给绿色的圆使用较深的红色文字,从而提高对测试者的干扰程度;

(2)可以缩短从出现题目到出现圆形的时间间隔,给测试者更少的时间准备,并且给每次测试限制时间,并将时间显示出来,给测试者一些心理压力;

(3)增加多种颜色,提高测试难度

四,总结:

  1. 因为我电脑外接了两个显示屏,导致在screen屏幕选择的时候经常会出现问题,有时是黑色背景,有时是透明背景,有时会出现报错
  2. Psychtoolbox所有screen操作都需要Screen(‘Flip’,w);才会显现出来
  3. 我没有找到刷新画面的相关操作,因此第二个实验我每次想要刷新画面都采用的是用黑色涂黑屏幕,再输出下一个画面,后续若有相关函数则可以简化代码
    的颜色,比如说给蓝色和红色的圆使用较浅的绿色文字,给绿色的圆使用较深的红色文字,从而提高对测试者的干扰程度;

(2)可以缩短从出现题目到出现圆形的时间间隔,给测试者更少的时间准备,并且给每次测试限制时间,并将时间显示出来,给测试者一些心理压力;

(3)增加多种颜色,提高测试难度

四,总结:

  1. 因为我电脑外接了两个显示屏,导致在screen屏幕选择的时候经常会出现问题,有时是黑色背景,有时是透明背景,有时会出现报错
  2. Psychtoolbox所有screen操作都需要Screen(‘Flip’,w);才会显现出来
  3. 我没有找到刷新画面的相关操作,因此第二个实验我每次想要刷新画面都采用的是用黑色涂黑屏幕,再输出下一个画面,后续若有相关函数则可以简化代码
  4. 实验二stroop实验的所有颜色,文字都是随机生成的,随机性过强,无法保证生成具有对比性的数据(比如,全部颜色和文字一一对应,一组圆颜色和文字不对应,两组,三组……),后续有待改进,以及可以加入对具体颜色的分析,比如红色和文字不对应的反应时间与绿色和文字不对应的反应时间的对比。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
与认知神经科学是研究大如何产生以及影响我们的认知和行为的学科。而Psychopy是一种常用于进行心理学和神经科学实验的开源软件。 Psychopy的实验设计主要基于心理物理学的原理,以及与认知神经科学的理论模型。使用Psychopy进行实验可以通过观察参与者的反应和测量其电图、功能磁共振成像等生理数据,来揭示我们的认知和行为背后的神经机制。 在使用Psychopy进行实验时,研究者可以使用自定义的刺激材料,如文字、图像、声音等,来呈现给参与者。这些刺激通常会激发参与者的感知、认知和决策过程,并引起相应的部活动。 例如,研究者可以设计一个经典的注意力实验,以探索参与者在面临不同注意任务时的注意分配和注意机制。在实验过程中,参与者可能被要求在一个屏幕上观察移动的箭头,并根据指向的方向进行反应。此时,研究者可以通过记录参与者的反应时间和准确性,以及电图数据来分析他们的注意力分配是否受到不同条件的影响。 通过使用Psychopy进行实验,研究者可以更好地理解认知和行为的神经基础,从而进一步研究部疾病和神经退行性疾病的治疗方法。此外,Psychopy还提供了有关实验数据的统计分析和可视化工具,使研究人员能够更好地解释和呈现他们的研究结果。 总而言之,与认知神经科学结合Psychopy实验可以通过对参与者的观察和部反应的测量,揭示大如何影响我们的认知和行为。这有助于我们更好地理解人类的思维和决策过程,并为部疾病的治疗提供新的启示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值