Matlab Psychtoolbox实现屏幕方块闪烁
sca;
close all;
clearvars;
Screen('Preference', 'SkipSyncTests', 1);
%% 初始化设置
PsychDefaultSetup(2);
screens = Screen('Screens');
screenNumber = max(screens);
white = WhiteIndex(screenNumber);
black = BlackIndex(screenNumber);
[w, rect] = PsychImaging('OpenWindow', screenNumber, black);
% 定义实验参数
ifi = Screen('GetFlipInterval', w);
time=0;
topPriorityLevel = MaxPriority(w);
Priority(topPriorityLevel); %优先级设置为最高
textSize = 48;
textFont = 'Arial';
textColor = [255 255 255];
% 设置屏幕的左右两半
halfWidth = rect(3) / 2;
leftHalf = [0 rect(4)/5 rect(3)/4 rect(4)*4/5];%修改闪烁大小改这里,上下左右四条线
% rightHalf = [halfWidth 0 rect(3) rect(4)];
rightHalf = [rect(3)*3/4 rect(4)/5 rect(3) rect(4)*4/5];
% 设置文本位置(居中)
[textX1, textY1] = RectCenter(leftHalf);
[textX2, textY2] = RectCenter(rightHalf);
textX1 = textX1-60;
textX2 = textX2-60;
Screen('FillRect',w,255,leftHalf);
Screen('FillRect',w,255,rightHalf);
Screen('TextSize',w,100);
Screen('DrawText',w,'Yes',textX1, textY1,textColor);
Screen('DrawText',w,'No',textX2, textY2,textColor);
while 1
FrameNum=0; %用来计算 帧,用来计算,没刷新一次,算一帧,i*刷新一帧的时间=sin的t
if KbCheck
%%%%%%%%%%%%%%%%%%%%%
WaitSecs(0.1);
waitframes = 1;
vbl = Screen('Flip',w); %vbl存的第一次刷新屏幕的时间
while ~KbCheck %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%开始闪烁
%[secs,keycode]=KbPressWait;
% Screen('FrameRect',w,255,[15,30,13+9*jiangex+10*side,30+side],3);%%%%文本的输入框
% Screen('FillRect',w,flicker(15.6,FrameNum,0.13*pi,ifi),[20+9*jiangex+9*side,33,10+9*jiangex+10*side,27+side]);
%第一行方块
Screen('FillRect',w,flicker(7.5,FrameNum,1.0*pi,ifi),leftHalf);
Screen('FillRect',w,flicker(10.0,FrameNum,1.0*pi,ifi),rightHalf);
FrameNum=FrameNum+1;
vbl = Screen('Flip', w, vbl + (waitframes - 0.5) * ifi); %这个函数可以让屏幕刷新频率固定,并且返回这次刷新屏幕的时间。
end
break;
end
end
Screen('CloseAll');
这段代码是一个基于Psychtoolbox的Matlab程序,用于创建一个屏幕并实现屏幕上方块的闪烁。
代码功能:
- 初始化设置: 初始化Psychtoolbox环境,获取屏幕参数。
- 创建窗口: 创建一个黑色的全屏窗口。
- 定义参数: 定义实验参数,如屏幕刷新间隔、文本参数、闪烁频率等。
- 设置区域: 将屏幕分为左右两半,用于放置闪烁方块。
- 绘制元素: 绘制两个方块和'Yes'、'No'文本标签。
- 闪烁循环: 进入一个循环,控制方块以特定频率闪烁,直到按下键盘按键。
- 程序结束: 关闭所有窗口,结束程序。
代码亮点:
- 使用
Screen('Flip', w, vbl + (waitframes - 0.5) * ifi)函数实现精确的屏幕刷新控制,确保闪烁频率的准确性。 - 通过修改
leftHalf和rightHalf变量可以调整闪烁方块的大小和位置。 - 可以通过修改
flicker函数的参数来调整闪烁频率和相位。
这段代码可以用于视觉刺激研究、心理物理学实验等领域,通过控制方块的闪烁频率和相位,可以研究人脑对不同视觉刺激的反应。
原文地址: https://www.cveoy.top/t/topic/lwq 著作权归作者所有。请勿转载和采集!