zl程序教程

您现在的位置是:首页 >  后端

当前栏目

脑与认知神经科学Matlab Psytoolbox认知科学实验设计——实验设计三

MATLAB 认知
2023-09-11 14:19:58 时间

Matlab Psytoolbox(脑与认知神经科学)

视错觉举例
实验设计一
实验设计二
实验设计三
实验设计四


前言

脑与认知神经科学Matlab认知科学实验设计

1.题目

请设计一个关于正常人脸/面孔与异常人脸/面孔的熟悉程度判断实验(比如倒着的人脸、模糊的人脸、惊恐的人脸等)。

2.分析设计要求

创建一个可以显示提示词、图片、结果、反应时间的窗口。
首先准备显示用的人脸图片,将检测是否熟悉的人脸图片事先旋转180度,创建一个窗口用于显示指导语,设计将所有图片随机展现三遍的功能,之后展现倒立的图片,利用按键选择是否见过该图,每选择完一个便提示是否正确以及反应时间。

3.代码

try
    Screen('Preference', 'SkipSyncTests'); %跳过刷新率检测
    screens=Screen('Screens'); 
    screenNumber=max(screens);  % 第一个屏幕就是0
    [w,wsize]=Screen('OpenWindow',screenNumber,[192,192,192],[100,100,1900,1000]);%打开窗口并返回两个重要变量
    Screen('Flip',w);%更新当前屏幕n
    
    %输出提示内容
    Screen('DrawText',w,'第一次实验(共两次实验)',660,300,[255,0,0])
    Screen('DrawText',w,'下面将显示一些人脸照片',660,450,[255,0,0])
    Screen('DrawText',w,'请您按下任意键开始实验',660,600,[255,0,0])
    Screen('Flip',w);
    
    while 1
        [kid,~,kc]=KbCheck;%不断检测是否按键
        %kc对应m 70  n 74 
        if kid==1 %有按键按下时,记录按键信息
            break
        else
            continue
        end
    end
    
    %存入九张图片信息,可以根据自己的需求增加或减少图片数量
    
    K=cell(8);
    for i=1:8
        K{i}=imread(strcat(num2str(i),'2.jpeg')); %依次读取每一幅图像
    end

    %让人脸照连续播放
    for j=1:3
        for i=randperm(8)
            P3=Screen('MakeTexture',w,K{i});
            Screen('DrawTexture',w,P3,[],[]);%在屏幕中央绘制图片
            Screen('Flip',w);
            WaitSecs(1)
        end
        
        Screen('DrawText',w,'已看完第',620,400,[255,0,0])
        Screen('DrawText',w,num2str(j),800,400,[255,0,0])
        Screen('DrawText',w,'遍,总共3遍',840,400,[255,0,0])
        Screen('Flip',w);%更新当前屏幕
        WaitSecs(2)
    end

    Screen('DrawText',w,'您对他们还有印象吗?',680,300,[255,0,0])
    Screen('DrawText',w,'如果您觉得见过他们请按Y,否则按N',550,450,[255,0,0])
    Screen('DrawText',w,'请您按下任意键开始实验',650,600,[255,0,0])
    Screen('Flip',w);
     
    while 1
        [kid,~,kc]=KbCheck;%不断检测是否按键
        if kid==1 %有按键按下时,记录按键信息
            break
        else
            continue
        end
    end
    
    time2=cell(4);
    L=cell(4);
    keyrecord2=[];
    for i=1:4
        L{i}=imread(strcat(num2str(i),'2.jpg')); %依次读取每一幅图像
    end
    num2=0; 
    for i=1:4
        time2{i}=GetSecs; %计时开始
    
        P3=Screen('MakeTexture',w,L{i});
        Screen('DrawTexture',w,P3,[],[]);%在屏幕中央绘制图片
        Screen('Flip',w);
        WaitSecs(1)
              
        while 1
            [kid,~,kc]=KbCheck;%不断检测是否按键
            %kc对应y 89  n 74 
            if kid==1   %有按键按下时,记录按键信息
                break
            else
                continue
            end
        end 
        
        time2{i}=GetSecs-time2{i};%计算花费时间
        
        if kc(89)==1 && i==1
            num2=num2+1;
            Screen('DrawText',w,'你记对了,真厉害!',700,300,[255,0,0])
            Screen('DrawText',w,'第一幅图反应时间为',580,450,[255,0,0])
            Screen('DrawText',w,num2str(time2{1}),1000,450,[255,0,0])
            Screen('DrawText',w,'秒',1200,450,[255,0,0])
            Screen('Flip',w); 
            WaitSecs(2)   
        elseif kc(89)==1 && i==2
            num2=num2+1;
            Screen('DrawText',w,'你记对了,真厉害!',700,300,[255,0,0])
            Screen('DrawText',w,'第二幅图反应时间为',580,450,[255,0,0])
            Screen('DrawText',w,num2str(time2{2}),1000,450,[255,0,0])
            Screen('DrawText',w,'秒',1200,450,[255,0,0])
            Screen('Flip',w);
            WaitSecs(2)   
        elseif kc(89)==1 && i==3
            num2=num2+1;
            Screen('DrawText',w,'你记对了,真厉害!',700,300,[255,0,0])
            Screen('DrawText',w,'第三幅图反应时间为',580,450,[255,0,0])
            Screen('DrawText',w,num2str(time2{3}),1000,450,[255,0,0])
            Screen('DrawText',w,'秒',1200,450,[255,0,0])
            Screen('Flip',w);
            WaitSecs(2) 
        elseif kc(89)==0 && i==4
            num2=num2+1;
            Screen('DrawText',w,'你记对了,真厉害!',700,300,[255,0,0])
            Screen('DrawText',w,'第四幅图反应时间为',580,450,[255,0,0])
            Screen('DrawText',w,num2str(time2{4}),1000,450,[255,0,0])
            Screen('DrawText',w,'秒',1200,450,[255,0,0])
            Screen('Flip',w);
            WaitSecs(2)
        else
            Screen('DrawText',w,'你记错了哦!',800,450,[255,0,0])
            Screen('Flip',w);
            WaitSecs(2)
        end
    end
    
    
    
    
    
    
    
    
    
    %输出提示内容
    Screen('DrawText',w,'第二次实验(共两次实验)',660,300,[255,0,0])
    Screen('DrawText',w,'下面将显示一些人脸照片',660,450,[255,0,0])
    Screen('DrawText',w,'请您按下任意键开始实验',660,600,[255,0,0])
    Screen('Flip',w);
     
    while 1
        [kid,~,kc]=KbCheck;%不断检测是否按键
        %kc对应m 70  n 74 
        if kid==1 %有按键按下时,记录按键信息
            break
        else
            continue
        end
    end
    
    M=cell(8);
    for i=1:8
        M{i}=imread(strcat(num2str(i),'1.jpeg')); %依次读取每一幅图像
    end

    %让人脸照连续播放
    for j=1:3
        for i=randperm(8)
            P0=Screen('MakeTexture',w,M{i});
            Screen('DrawTexture',w,P0,[],[]);%在屏幕中央绘制图片
            Screen('Flip',w);
            WaitSecs(1)
        end
        
        Screen('DrawText',w,'已看完第',620,400,[255,0,0])
        Screen('DrawText',w,num2str(j),800,400,[255,0,0])
        Screen('DrawText',w,'遍,总共3遍',840,400,[255,0,0])
        Screen('Flip',w);%更新当前屏幕
        WaitSecs(2)
    end

    Screen('DrawText',w,'您对他们还有印象吗?',680,300,[255,0,0])
    Screen('DrawText',w,'如果您觉得见过他们请按Y,否则按N',550,450,[255,0,0])
    Screen('DrawText',w,'请您按下任意键开始实验',650,600,[255,0,0])
    Screen('Flip',w);
    
    while 1
        [kid,~,kc]=KbCheck;%不断检测是否按键
        if kid==1 %有按键按下时,记录按键信息
            break
        else
            continue
        end
    end
    
    time=cell(4);
    H=cell(4);
    keyrecord1=[];
    for i=1:4
        H{i}=imread(strcat(num2str(i),'1.jpg')); %依次读取每一幅图像
    end
    num1=0;
    for i=1:4
        time{i}=GetSecs; %计时开始
    
        P2=Screen('MakeTexture',w,H{i});
        Screen('DrawTexture',w,P2,[],[]);%在屏幕中央绘制图片
        Screen('Flip',w);
        WaitSecs(1)
              
        while 1
            [kid,~,kc]=KbCheck;%不断检测是否按键
            %kc对应y 89  n 74 
            if kid==1   %有按键按下时,记录按键信息
                break
            else
                continue
            end
        end 
        
        time{i}=GetSecs-time{i};%计算花费时间
        
        if kc(89)==1 && i==1
            num1=num1+1;
            Screen('DrawText',w,'你记对了,真厉害!',700,300,[255,0,0])
            Screen('DrawText',w,'第一幅图反应时间为',580,450,[255,0,0])
            Screen('DrawText',w,num2str(time{1}),1000,450,[255,0,0])
            Screen('DrawText',w,'秒',1200,450,[255,0,0])
            Screen('Flip',w);
            WaitSecs(2)
        elseif kc(89)==0 && i==2
            num1=num1+1;
            Screen('DrawText',w,'你记对了,真厉害!',700,300,[255,0,0])
            Screen('DrawText',w,'第二幅图反应时间为',580,450,[255,0,0])
            Screen('DrawText',w,num2str(time{2}),1000,450,[255,0,0])
            Screen('DrawText',w,'秒',1200,450,[255,0,0])
            Screen('Flip',w);
            WaitSecs(2)   
        elseif kc(89)==1 && i==3
            num1=num1+1;
            Screen('DrawText',w,'你记对了,真厉害!',700,300,[255,0,0])
            Screen('DrawText',w,'第三幅图反应时间为',580,450,[255,0,0])
            Screen('DrawText',w,num2str(time{3}),1000,450,[255,0,0])
            Screen('DrawText',w,'秒',1200,450,[255,0,0])
            Screen('Flip',w);
            WaitSecs(2) 
        elseif kc(89)==1 && i==4
            num1=num1+1;
            Screen('DrawText',w,'你记对了,真厉害!',700,300,[255,0,0])
            Screen('DrawText',w,'第四幅图反应时间为',580,450,[255,0,0])
            Screen('DrawText',w,num2str(time{4}),1000,450,[255,0,0])
            Screen('DrawText',w,'秒',1200,450,[255,0,0])
            Screen('Flip',w);
            WaitSecs(2)
        else
            Screen('DrawText',w,'你记错了哦!',800,450,[255,0,0])
            Screen('Flip',w);
            WaitSecs(2)
        end
    end
    
    Screen('DrawText',w,'您第一次实验选择正确个数为',500,400,[255,0,0])
    Screen('DrawText',w,num2str(num2)',1100,400,[255,0,0])
    Screen('DrawText',w,'个',1150,400,[255,0,0])
    
    Screen('DrawText',w,'您第二次实验选择正确个数为',500,500,[255,0,0])
    Screen('DrawText',w,num2str(num1)',1100,500,[255,0,0])
    Screen('DrawText',w,'个',1150,500,[255,0,0])
    Screen('Flip',w);
    WaitSecs(2)
    
    Screen('CloseAll');%sca;关闭窗口
catch
    sca;
end
           

总结

非常感谢您的观看,已将该内容完整上传,此外本人主页还有python人工智能,单片机等文章,欢迎您观看