脑与认知实验:认知科学实验设计

2023-10-14 08:40

本文主要是介绍脑与认知实验:认知科学实验设计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

脑与认知实验:认知科学实验设计(Matlab)

附源代码文件,见下面


系列实验
脑与认知实验:图像中的注意区域预测
脑与认知实验:认知过程中的面孔识别加工

实验内容1


在屏幕中左右各显示一张图像,并显示提示词:要求用户选择一张图像,并根据选择点击键盘按键N或M(此处可以设置为其它键盘按键)。等待用户点击键盘,输出根据键盘判定点击的图像是哪一张,并输出从显示图像到用户点击键盘的时间。**

设计思路

对于实验a,我的程序设计的思路是首先创建数据文件夹,然后创建一个窗口并读入pic文件夹内的图片(如图所示为程序的文件目录结构),用imread方法读取其RGB码。再之后就创建材质并画出材质与调整其位置。图片画出来后,开始绘制文字并调整其位置,我用的是DrawFormattedText方法绘制的。所有内容均显示后就设置一个按键检测机制,构建一个循环检测按键输入。若按键为l或r(l表示选择左边图片, r表示选择右边的)则记录按键信息与反应时间并跳出循环。最后在data文件夹创建data.csv文件存储数据并关闭窗口。 详细的代码文件可见附件压缩包内的a.m。

在这里插入图片描述

程序运行过程

  1. 运行程序后的主页面如图所示,输入l则选择左边图片,输入2则选择右边图片。

在这里插入图片描述

  1. 按下r或l键后会自动退出并记录数据。

  2. 数据文件(位于data/data.csv)内容如图所示,1.119s按下r键,选择了右边的图片。

在这里插入图片描述

代码实现部分

clear;clc %清除变量与清屏
PsychDebugWindowConfiguration; %调用Debug模式窗口
datadir = fullfile(fileparts(mfilename('fullpath')),'data'); %存储数据
if ~exist(datadir,'dir') % 如果数据文件夹不存在则创建mkdir(datadir);
endScreen('Preference','SkipSyncTests',1); %跳过同步性检测%试验开始
HideCursor %隐藏鼠标 防止试验过程误触
[w,wrect]=Screen('OpenWindow',0,0,[]); %打开窗口[c,d]=WindowCenter(w); %获取屏幕的中心位置%读取图片
%遍历pic文件夹中的所有jpg图片
allpic=dir("pic\*.jpg"); %*通配符表示所有
for i=1:length(allpic)%需要先记录每张图片的名字name=allpic(i).name;%记录完后读取这图片的二进制码array=imread(['pic\',name]); %这里的['pic\',name]是用来连接字符串的 imread...直接读取目录的文件%然后再的赋值给allpicallpic(i).array=array;tex(i)=Screen('MakeTexture',w,allpic(i).array) %制作材质
endpic1Rect=Screen('Rect', tex(1)); %这个可以用来获取图片的尺寸 tex(1)是材质
pic2Rect=Screen('Rect',tex(2));%需要注意下面代码的最后一项的四个数字其实是代表图片左上角坐标与右下角坐标的  不是代表尺寸
%下面代码用于绘制图像
Screen('DrawTextures',w,tex(1), [], [c-pic1Rect(3)/2-500 d-pic1Rect(4)/2-100 c+pic1Rect(3)/2-500 d+pic1Rect(4)/2-100])
Screen('DrawTextures',w,tex(2), [], [c-pic1Rect(3)/2+500 d-pic1Rect(4)/2-100 c+pic1Rect(3)/2+500 d+pic1Rect(4)/2-100])%绘制文字
text='Please choose a pic.\n press "l" to choose the left one. \n press "r" to choose the right one.)'
Screen('TextSize',w,30);
DrawFormattedText(w,double(text),'center',800,[255,255,0]);Screen('Flip',w) %刷新画面start_time=GetSecs %当画面显示出来时 记录开始时间KbName('UnifyKeyNames'); %按键设置
l = KbName('l');
r = KbName('r');T = table %创建表格用来存储数据%按键检测 
while 1[keyisdown,secs,keycode] = KbCheck;if keycode(l)T.key='l'T.time=GetSecs-start_timebreakelseif keycode(r)T.key='r'T.time=GetSecs-start_timebreakendWaitSecs(0.001);
end
ShowCursor %显示鼠标%写入文件
datafile = fullfile(datadir,sprintf('data.csv')); %创建结果文件
writetable(T, datafile); %将表格写入文件中Screen('CloseAll')

实验内容2


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

设计思路

此题的程序设计与a实验的类似,因此在这个程序中,我只改变了图像绘制与呈现以及鼠标检测的部分。椭圆的绘制我用的是Screen的FillOval方法,然后鼠标检测用的是getmouse方法。然后最后根据鼠标是否在圆区域(矩形区域)中并且有没有点击来进行判断。点击成功后程序会自动记录数据并输出到data.csv文件内。 详细代码可见附件压缩包内的b.m。注意a与b程序共用了同一个数据输出文件,可根据真实需要调整。

程序运行过程

  1. 运行程序后的主页面如图所示,用鼠标点击选择的圆。

在这里插入图片描述

  1. 鼠标点击圆后会自动退出并记录数据。

  2. 数据文件(位于data/data.csv)内容如图所示,1.67s点击了左边的圆。

在这里插入图片描述

代码实现部分

%在屏幕中显示两个不同颜色的圆,并显示提示词:要求用户选择其中一个圆,
%并根据选择使用鼠标点击屏幕。等待用户点击屏幕,输出通过点击位置判定点击的是哪一个圆,
%并输出从显示图像到用户点击屏幕的时间。clear;clc %清除变量与清屏
PsychDebugWindowConfiguration; %调用Debug模式窗口
datadir = fullfile(fileparts(mfilename('fullpath')),'data'); %存储数据
if ~exist(datadir,'dir') % 如果数据文件夹不存在则创建mkdir(datadir);
endScreen('Preference','SkipSyncTests',1); %跳过同步性检测%试验开始
[w,wrect]=Screen('OpenWindow',0,0,[]); %打开窗口[c,d]=WindowCenter(w); %获取屏幕的中心位置%绘制两个圆
rect1=[c-600 d-100 c-400 d+100]
rect2=[c+400 d-100 c+600 d+100]
Screen('FillOval',w,[255 100 100],rect1)
%同样是左上角 右下角
Screen('FillOval',w,[255 255 100],rect2);%绘制文字
text='Please click the oval you want to choose .'
Screen('TextSize',w,30);
DrawFormattedText(w,double(text),'center',800,[255,255,0]);Screen('Flip',w) %刷新画面
start_time=GetSecs %刷新画面后开始计时
T = table %创建表格用来存储数据
%鼠标检测 
while 1[mx,my,button]=GetMouseif mx>=rect1(1)&&mx<=rect1(3)&&my>=rect1(2)&&my<=rect1(4)&&button(1)==1 %此条件用来判断鼠标是否在 左圆区域且是否点击T.key='l'T.time=GetSecs-start_timebreakelseif mx>=rect2(1)&&mx<=rect2(3)&&my>=rect2(2)&&my<=rect2(4)&&button(1)==1%此条件用来判断鼠标是否在 右圆区域且是否点击T.key='r'T.time=GetSecs-start_timebreakendWaitSecs(0.001);
end
%此中判断方法存在一定误差 因为这里把圆当成了矩形对象%写入文件
datafile = fullfile(datadir,sprintf('data.csv')); %创建结果文件
writetable(T, datafile); %将表格写入文件中Screen('CloseAll')

源码下载链接
https://download.csdn.net/download/weixin_51735061/85304526

这篇关于脑与认知实验:认知科学实验设计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/209374

相关文章

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

认知杂谈52

今天分享 有人说的一段争议性的话 I I 1拓展人脉很重要** 咱们活在这世上啊,得明白一件事儿,知识、逻辑能力和实战经验虽然重要,但确实都不是最关键的。真正关键的是要懂得怎么和那些手里有资源的人打交道。人脉那可真是一笔无形的大财富呢。你想想看,有时候一个有影响力的人帮你一把,那效果可比你累死累活干一年都强得多。 I I 就比如说,你要是认识个行业里的大牛,他可能给你介绍个特别好的工

HNU-2023电路与电子学-实验3

写在前面: 一、实验目的 1.了解简易模型机的内部结构和工作原理。 2.分析模型机的功能,设计 8 重 3-1 多路复用器。 3.分析模型机的功能,设计 8 重 2-1 多路复用器。 4.分析模型机的工作原理,设计模型机控制信号产生逻辑。 二、实验内容 1.用 VERILOG 语言设计模型机的 8 重 3-1 多路复用器; 2.用 VERILOG 语言设计模型机的 8 重 2-1 多

认知杂谈54

I I 内容摘要: 这篇内容主要有以下几个要点:首先,沟通不在一个调时可学习人际交往心理学知识、线上课程及关注名师来改善。其次,挑房子、工作、搭档和人生伴侣要谨慎,找心灵相通能共同进步的人。再者,远离负能量的人,多跟积极向上的人相处攒正能量。然后,人生如爬山,要专注自身步伐,不与他人比较,坚持目标,可通过看《微习惯》、用专注 APP、参加训练营提升专注力和自律能力。此外,别瞎操心他人,每个人有自

61.以太网数据回环实验(4)以太网数据收发器发送模块

(1)状态转移图: (2)IP数据包格式: (3)UDP数据包格式: (4)以太网发送模块代码: module udp_tx(input wire gmii_txc ,input wire reset_n ,input wire tx_start_en , //以太网开始发送信

LTspice模拟CCM和DCM模式的BUCK电路实验及参数计算

关于BUCK电路的原理可以参考硬件工程师炼成之路写的《 手撕Buck!Buck公式推导过程》.实验内容是将12V~5V的Buck电路仿真,要求纹波电压小于15mv. CCM和DCM的区别: CCM:在一个开关周期内,电感电流从不会到0. DCM:在开关周期内,电感电流总会到0. CCM模式Buck电路仿真: 在用LTspice模拟CCM电路时,MOS管驱动信号频率为100Khz,负载为10R(可自

HCIA--实验十:路由的递归特性

递归路由的理解 一、实验内容 1.需求/要求: 使用4台路由器,在AR1和AR4上分别配置一个LOOPBACK接口,根据路由的递归特性,写一系列的静态路由实现让1.1.1.1和4.4.4.4的双向通信。 二、实验过程 1.拓扑图: 2.步骤: (下列命令行可以直接复制在ensp) 1.如拓扑图所示,配置各路由器的基本信息: 各接口的ip地址及子网掩码,给AR1和AR4分别配置

OpenGL/GLUT实践:流体模拟——数值解法求解Navier-Stokes方程模拟二维流体(电子科技大学信软图形与动画Ⅱ实验)

源码见GitHub:A-UESTCer-s-Code 文章目录 1 实现效果2 实现过程2.1 流体模拟实现2.1.1 网格结构2.1.2 数据结构2.1.3 程序结构1) 更新速度场2) 更新密度值 2.1.4 实现效果 2.2 颜色设置2.2.1 颜色绘制2.2.2 颜色交互2.2.3 实现效果 2.3 障碍设置2.3.1 障碍定义2.3.2 障碍边界条件判定2.3.3 障碍实现2.3.

pta-2024年秋面向对象程序设计实验一-java

文章申明:作者也为初学者,解答仅供参考,不一定是最优解; 一:7-1 sdut-sel-2 汽车超速罚款(选择结构) 答案: import java.util.Scanner;         public class Main { public static void main(String[] arg){         Scanner sc=new Scanner(System