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人工智能,单片机等文章,欢迎您观看