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程序,用于创建一个屏幕并实现屏幕上方块的闪烁。

代码功能:

  1. 初始化设置: 初始化Psychtoolbox环境,获取屏幕参数。
  2. 创建窗口: 创建一个黑色的全屏窗口。
  3. 定义参数: 定义实验参数,如屏幕刷新间隔、文本参数、闪烁频率等。
  4. 设置区域: 将屏幕分为左右两半,用于放置闪烁方块。
  5. 绘制元素: 绘制两个方块和'Yes'、'No'文本标签。
  6. 闪烁循环: 进入一个循环,控制方块以特定频率闪烁,直到按下键盘按键。
  7. 程序结束: 关闭所有窗口,结束程序。

代码亮点:

  • 使用Screen('Flip', w, vbl + (waitframes - 0.5) * ifi)函数实现精确的屏幕刷新控制,确保闪烁频率的准确性。
  • 通过修改leftHalfrightHalf变量可以调整闪烁方块的大小和位置。
  • 可以通过修改flicker函数的参数来调整闪烁频率和相位。

这段代码可以用于视觉刺激研究、心理物理学实验等领域,通过控制方块的闪烁频率和相位,可以研究人脑对不同视觉刺激的反应。

Matlab Psychtoolbox实现屏幕方块闪烁

原文地址: https://www.cveoy.top/t/topic/lwq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录