Verfasst am: 15.06.2020, 17:16
Titel: N-BACK trial order
Liebe Alle,
ich versuche eine N-Back Task zu programmieren und habe einen Beispiel Code, um die "trial-order" zu berechnen. Allerdings funktioniert er nicht, sondern spuckt mir immer wieder diese Fehlermeldung aus: "Index exceeds the number of array elements (4).
Error in nBackCreateTrialList_v1_2 (line 56)
trialListBlock(1, 1:trialsPerBlock(n)) = randi(10,1, trialsPerBlock(n));
Weiß jemand vielleicht wie ich das auflösen kann..?
Vielen Dank
Code:
function[trialList, levels, blocks] = nBackCreateTrialList_v1_2(lowestLevel, highestLevel,trialsPerBlock ,targetsPerBlock, numOfBlocks)
%Creates stimuli list for n-back task.
% Version 1.2
% Experimental variables % Number of trials etc.
lowestLevel = 1; % n
highestLevel = 4;
numOfBlocks = 3;
targetsPerBlock = 6;
nonTargetsPerBlock = 14; % + n
trialsPerBlock = []; % Number of trials for a block per level
nTrial = []; % Total number of trials per level
for n = lowestLevel:highestLevel
trialsPerBlock(n) = nonTargetsPerBlock + targetsPerBlock + n;
nTrial(n) = trialsPerBlock(n)*numOfBlocks;
end
totalNTrial = sum(nTrial);
trialList = [];
levels = [];
blocks = [];
for n = lowestLevel:highestLevel
disp(horzcat('Creating trial list for level n = ', num2str(n))) % First try of creating trial list with targetsPerBlock for block = 1:numOfBlocks
targetCount = 0; % Variable counting the n-back targets in a block
levelsBlock = zeros(1, trialsPerBlock(n)) + n; % Indicating the level of every trial
blocksBlock = zeros(1, trialsPerBlock(n)) + block; % Indicating the block of every trial
trialListBlock(1, 1:trialsPerBlock(n)) = randi(10,1, trialsPerBlock(n)); % Indicating stimulus number
trialListBlock(2, 1:trialsPerBlock(n)) = zeros(1, trialsPerBlock(n)); % Indicating target status
% Counting the number of targetsPerBlock in trialListBlock for position = 1:length(trialListBlock) if position > n
if trialListBlock(1, position) == trialListBlock(1, position - n)
targetCount = targetCount + 1;
trialListBlock(2, position) = 1;
end end end
moreThanThree = 0;
for n = 1:length(trialListBlock) - 4% Checking whether a stimulus more than three times if trialListBlock(1, n + 1) == trialListBlock(1, n + 2) && trialListBlock(1, n + 3) == trialListBlock(1, n + 1) && trialListBlock(1, n + 1) == trialListBlock(1, n + 4)
moreThanThree = 1;
end end % Checking whether the number of targets in trialListBlock is % equal to targetsPerBlock if targetCount ~= targetsPerBlock || moreThanThree == 1% Not equal so do it again
while targetCount ~= targetsPerBlock || moreThanThree == 1
targetCount = 0;
moreThanThree = 0;
trialListBlock(1, 1:trialsPerBlock(n)) = randi(10,1, trialsPerBlock(n));
trialListBlock(2, 1:trialsPerBlock(n)) = zeros(1, trialsPerBlock(n));
for position = 1:length(trialListBlock) if position > n
if trialListBlock(1, position) == trialListBlock(1, position - n)
targetCount = targetCount + 1;
trialListBlock(2, position) = 1;
end end end for n = 1:length(trialListBlock) - 4% Checking whether a stimulus is repeated more than three times if trialListBlock(1, n + 1) == trialListBlock(1, n + 2) && trialListBlock(1, n + 3) == trialListBlock(1, n + 1) && trialListBlock(1, n + 1) == trialListBlock(1, n + 4)
moreThanThree = 1;
end end end end
levels = [levels levelsBlock];
blocks = [blocks blocksBlock];
trialList = [trialList trialListBlock];
end end end
meine Empfehlung: Haltepunkt in die Zeile setzen und die Dimensionen der beteiligten Variablen prüfen. Für weitere Unterstützung bitte auch den reproduzierbaren verwendeten Funktionsaufruf posten.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Das ist der allgemeine Aufruf. Um dir helfen zu können, brauche ich aber einen speziellen Aufruf mit Werten für die Eingabeargumente.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.