查看: 386|回复: 0
打印 上一主题 下一主题

[psychtoolbox] 关於改写 工作记忆 实验刺激 [复制链接]

Rank: 1

水晶
11
心级
5
精华
0
主题
1
帖子
3
跳转到指定楼层
楼主
发表于 2019-8-19 15:21:23 |只看该作者 |倒序浏览
本帖最后由 用户7281707439 于 2019-8-19 15:53 编辑

以下是我编写关於工作记忆的实验刺激 给予试验者观看连续5个不同数字,必且回答是否有出现过。总共60回合,一回合两题
我现在想要加入当试验者 在两秒内没有回答 自动跳入下一题,或是下一回合 并将此题判定为错误。请问我该如何下手 谢谢~



% function wm5d_ntu(sub_name,run)
% working memory 5 digits keyboard;
close all;clear all;clc;
sub_name ='LHY';
run = 1;
trial =60;

% Here we call some default settings for setting up Psychtoolbox 在这里,我们调用一些默认设置来设置Psychtoolbox
PsychDefaultSetup(0);

screens = Screen('Screens');
screenNumber = max(screens);

white = WhiteIndex(screenNumber);
black = BlackIndex(screenNumber);


[window, windowRect] = PsychImaging('OpenWindow', screenNumber, black??,[0 0 900 900]);

Screen('BlendFunction', window, 'GL_SRC_ALPHA', 'GL_ONE_MINUS_SRC_ALPHA');


[screenXpixels, screenYpixels] = Screen('WindowSize', window);


[xCenter, yCenter] = RectCenter(windowRect);


ifi = Screen('GetFlipInterval', window);

numSecs = 1;
numFrames = round(numSecs / ifi);
numFrames_cross = round(1.2 / ifi);
numFrames_black = round(0.2 / ifi);
numFrames_question = round(1 / ifi);

waitframes = 1;
TrueKey = KbName('M');
FalseKey = KbName('C');
%=====================trial random matrix=================
d10_mat = nchoosek(1:10,5); % 10 digit matrix
d10_mat_shf = Shuffle(d10_mat,2);
d10_mat_60 = d10_mat_shf(1:trial,:);

d10_mat_60_shf = d10_mat_60;
for i = 1:size(d10_mat_60,1)
? ? idx = randperm(size(d10_mat_60,2));
? ? d10_mat_60_shf(i,idx) = d10_mat_60(i,:);
end
tri_mat = d10_mat_60_shf;
tri_mat(tri_mat==10) = 0;? ?% final trial matrix

%================question random matrix==========
q_logic = Shuffle([ones(trial/2,2);zeros(trial/2,2)]);??%True=1, False=0
q_mat = q_logic;
for i = 1:size(q_logic,1) %trial
? ? for q = 1:size(q_logic,2) %question
? ?? ???if q_logic(i,q) == 1 && q==1
? ?? ?? ?? ?? ?? ?? ?? ?idx = randperm(3);
? ?? ?? ?? ?q_mat(i,q) = tri_mat(i,idx(1));
? ?? ???elseif q_logic(i,q) == 1 && q==2
? ?? ?? ?? ?idx = randperm(3)+1;
? ?? ?? ?? ?q_mat(i,q) = tri_mat(i,idx(1));
? ?? ?? ?? ?if q_mat(i,1) == q_mat(i,2)
? ?? ?? ?? ?? ? q_mat(i,q) = tri_mat(i,idx(2));
? ?? ?? ?? ?end
? ?? ???elseif q_logic(i,q) == 0 && q==1
? ?? ?? ?? ?d10 = 1:10;
? ?? ?? ?? ?inv_d5 = d10( ~ismember(1:10,d10_mat_60_shf(i,:)) );
? ?? ?? ?? ?tri = inv_d5(randperm(5));
? ?? ?? ?? ?tri(tri==10) = 0;
? ?? ?? ?? ?q_mat(i,q) = tri(1);
? ?? ???elseif q_logic(i,q) == 0 && q==2
? ?? ?? ?? ?d10 = 1:10;
? ?? ?? ?? ?inv_d5 = d10( ~ismember(1:10,d10_mat_60_shf(i,:)) );
? ?? ?? ?? ?tri = inv_d5(randperm(5));
? ?? ?? ?? ?tri(tri==10) = 0;
? ?? ?? ?? ?q_mat(i,q) = tri(1);
? ?? ?? ?? ?if q_mat(i,1) == q_mat(i,2)
? ?? ?? ?? ?? ? q_mat(i,q) = tri(2);
? ?? ?? ?? ?end
? ?? ???end
? ? end
end??
q1_counter = 0;
q2_counter = 0;
rsptime_list = zeros( size(q_mat,1), size(q_mat,2));
rspkey_list = zeros( size(q_mat,1), size(q_mat,2));
for i = 1:size(tri_mat,1)? ?%trial

? ???%if i == 1
? ?? ? % DrawFormattedText(window, 'Name the color \n\n Press Any Key To Begin',...
? ?? ???%? ???'center', 'center', black);
? ?? ???% Screen('Flip', window);
? ?? ???% KbStrokeWait;
? ???%end
? ???tblack = GetSecs;
? ? vbl = Screen('Flip', window);
? ? for frame = 1:numFrames_black

? ?? ???% Color the screen red
? ?? ???Screen('FillRect', window, black);

? ?? ???% Flip to the screen
? ?? ? % vbl = Screen('Flip', window, vbl + (waitframes - 0.5) * ifi);

? ? end
? ???GetSecs-tblack

? ? tcross = GetSecs;
? ? vbl = Screen('Flip', window);
? ? for frame = 1:numFrames_cross


? ? Screen('TextFont', window, 'Times New Roman');
? ? Screen('TextSize', window, 150);

? ?
? ? [xCenter, yCenter] = RectCenter(windowRect);

? ?
? ? fixCrossDimPix = 60;

? ?
? ? xCoords = [-fixCrossDimPix fixCrossDimPix 0 0];
? ? yCoords = [0 0 -fixCrossDimPix fixCrossDimPix];
? ? allCoords = [xCoords; yCoords];

? ?
? ? lineWidthPix = 4;


? ? Screen('DrawLines', window, allCoords,...
? ?? ???lineWidthPix,white, [xCenter yCenter], 2);



? ?? ???vbl = Screen('Flip', window, vbl + (waitframes - 0.5) * ifi);

? ? end
? ???GetSecs-tcross

? ? for j = 1:size(tri_mat,2)??%digit number
? ?? ?? ?tblack = GetSecs;
? ?? ???vbl = Screen('Flip', window);
? ?? ???for frame = 1:numFrames_black

? ?? ?? ?? ?
? ?? ?? ?? ?Screen('FillRect', window, black);

? ?? ?? ?
? ?? ?? ?? ?vbl = Screen('Flip', window, vbl + (waitframes - 0.5) * ifi);

? ?? ???end
? ?? ?? ?GetSecs-tblack
? ?? ?? ?t1 = GetSecs;

? ?? ???vbl = Screen('Flip', window);
? ?? ???for frame = 1:numFrames
? ?? ?? ?? ?line1 = '\n';
? ?? ?? ?? ?line2 = '\n? ?';
? ?? ?? ?? ?line3 = ['\n' num2str(tri_mat(i,j))];
? ?? ?? ?? ?line4 = '\n? ?';
? ?? ?? ?? ?line5 = '\n';

? ?? ?? ???
? ?? ?? ?? ?Screen('TextSize', window, 150);
? ?? ?? ?? ?DrawFormattedText(window, [line1 line2 line3 line4 line5],...
? ?? ?? ?? ?? ? 'center', screenYpixels * 0.12, white);

? ?? ?? ?? ?? ?
? ?? ?? ???vbl = Screen('Flip', window, vbl + (waitframes - 0.5) * ifi);
? ?? ???end
? ?? ?? ?GetSecs-t1
? ?? ?? ?t2 = GetSecs;
? ? end

? ?? ???for q = 1:2
? ?? ?? ?? ?respToBeMade = true;
? ?? ?? ?? ?tResponse = GetSecs;

? ?? ?? ?? ?if q == 1
? ?? ?? ?? ?? ? %io64( ioObj2, lpt2,1) ;
? ?? ?? ?? ?? ? WaitSecs(.001);
? ?? ?? ?? ?? ? %io64( ioObj2, lpt2,0);
? ?? ?? ?? ?elseif q ==2
? ?? ?? ?? ?? ? %io64( ioObj2, lpt2,2) ;
? ?? ?? ?? ?? ? WaitSecs(.001);
? ?? ?? ?? ?? ? %io64( ioObj2, lpt2,0);
? ?? ?? ?? ?end

? ?? ?? ?? ?while respToBeMade == true

? ?? ?? ?? ?? ? for frame = 1:numFrames_question

? ?? ?? ?? ?? ?? ???line1 = ['\n Question' num2str(q)];
? ?? ?? ?? ?? ?? ???line2 = '\n? ?';
? ?? ?? ?? ?? ?? ???line3 = ['\n' num2str(q_mat(i,q))];
? ?? ?? ?? ?? ?? ???line4 = '\n';
? ?? ?? ?? ?? ?? ???line5 = '\nN? ?? ?? ???Y';

? ?? ?? ?? ?? ?? ?
? ?? ?? ?? ?? ?? ???Screen('TextSize', window, 150);
? ?? ?? ?? ?? ?? ???DrawFormattedText(window, [line1 line2 line3 line4 line5],...
? ?? ?? ?? ?? ?? ?? ?? ?'center', screenYpixels * 0.12, white);

? ?? ?? ?? ?? ?? ???
? ?? ?? ?? ?? ?? ???vbl = Screen('Flip', window, vbl + (waitframes - 0.5) * ifi);
? ?? ?? ?? ?? ?? ???GetSecs-t2

? ?? ?? ?? ?? ?? ???
? ?? ?? ?? ?? ?? ???
? ?? ?? ?? ?? ?? ???[keyIsDown,secs, keyCode] = KbCheck;? ?? ?? ?? ?? ???
? ?? ?? ?? ?? ?? ???if keyCode(TrueKey)
? ?? ?? ?? ?? ?? ?? ?? ?response = 1;
? ?? ?? ?? ?? ?? ?? ?? ?respToBeMade = false;
? ?? ?? ?? ?? ?? ?? ?? ?rsptime_list(i,q) = GetSecs-tResponse;
? ?? ?? ?? ?? ?? ?? ?? ?rspkey_list(i,q) = 1;
? ?? ?? ?? ?? ?? ???elseif keyCode(FalseKey)
? ?? ?? ?? ?? ?? ?? ?? ?response = 0;
? ?? ?? ?? ?? ?? ?? ?? ?respToBeMade = false;
? ?? ?? ?? ?? ?? ?? ?? ?rsptime_list(i,q) = GetSecs-tResponse;
? ?? ?? ?? ?? ?? ?? ?? ?rspkey_list(i,q) = 0;
? ?? ?? ?? ?? ?? ???end

? ?? ?? ? %resp=0;
? ?? ?? ? %s=tResponse;
? ?? ?? ? %s0=2;
? ?? ?? ?? ???%while? ?(s-s0<2),respToBeMade == False;

? ?? ?? ?? ? % resp = io64(ioObj1,lpt1);??%1:kbData(97)=1; 2:kbData(98)=2...
? ?? ?? ?? ? %RT=s-s0;
? ?? ?? ?? ? %end? ?

? ?? ?? ?? ?? ? end

? ?? ?? ?? ?end

? ?? ?? ?? ?if q == 1 && q_logic(i,q) == response
? ?? ?? ?? ?? ? q1_counter = q1_counter+1;
? ?? ?? ?? ?? ? num2str(q1_counter*100/i);
? ?? ?? ?? ?? ???disp(['Correct!? ? Q1 accuracy:' num2str(q1_counter*100/i) '%']);??
? ?? ?? ?? ?elseif q == 2 && q_logic(i,q) == response
? ?? ?? ?? ?? ? q2_counter = q2_counter+1;
? ?? ?? ?? ?? ? num2str(q2_counter*100/i);
? ?? ?? ?? ?? ???disp(['Correct!? ?Q2 accuracy:' num2str(q2_counter*100/i) '%']);??
? ?? ?? ?? ?elseif q == 1 && q_logic(i,q) ~= response
? ?? ?? ?? ?? ? num2str(q1_counter*100/i);
? ?? ?? ?? ?? ???disp(['Incorrect!? ? Q1 accuracy:' num2str(q1_counter*100/i) '%']);??
? ?? ?? ?? ?elseif q == 2 && q_logic(i,q) ~= response
? ?? ?? ?? ?? ? num2str(q2_counter*100/i);
? ?? ?? ?? ?? ???disp(['Incorrect!? ? Q2 accuracy:' num2str(q2_counter*100/i) '%']);??
? ?? ?? ?? ?end

? ?? ???end
? ?? ???end

Priority(0);
clear mex



您需要登录后才可以回帖 登录 | 注册

bottom

Powered by Discuz! X2

? 2001-2011 Template By Yeei. Comsenz Inc.

回顶部