Maximale Rekursion Grenze von 500 erreicht
Habe ich die folgende Meldung, wenn ich versuchte zu laufen (adpcm_encoder
).
??? Maximum recursion limit of 500 reached. Use set(0,'RecursionLimit',N)
to change the limit. Be aware that exceeding your available stack space can
crash MATLAB and/or your computer.
Error in ==> fileparts
Den ich gesucht habe für dieses problem an vielen Orten, aber ich habe nicht eine bestimmte Lösung.
der code ist:
function adpcm_y = adpcm_encoder(raw_y)
Y = wavread('two.wav');
Y_en = adpcm_encoder(Y);
IndexTable = [-1, -1, -1, -1, 2, 4, 6, 8, -1, -1, -1, -1, 2, 4, 6, 8];
StepSizeTable = [7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 21, 23, 25, 28, 31, 34, 37, 41, 45, 50, 55, 60, 66, 73, 80, 88, 97, 107, 118, 130, 143, 157, 173, 190, 209, 230, 253, 279, 307, 337, 371, 408, 449, 494, 544, 598, 658, 724, 796, 876, 963, 1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066, 2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358, 5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899, 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767];
prevsample = 0;
previndex = 1;
Ns = length(raw_y);
n = 1;
raw_y = 32767 * raw_y; % 16-bit operation
while (n <= Ns)
predsample = prevsample;
index = previndex;
step = StepSizeTable(index);
diff = raw_y(n) - predsample;
if (diff >= 0)
code = 0;
else
code = 8;
diff = -diff;
end
tempstep = step;
if (diff >= tempstep)
code = bitor(code, 4);
diff = diff - tempstep;
end
tempstep = bitshift(tempstep, -1);
if (diff >= tempstep)
code = bitor(code, 2);
diff = diff - tempstep;
end
tempstep = bitshift(tempstep, -1);
if (diff >= tempstep)
code = bitor(code, 1);
end
diffq = bitshift(step, -3);
if (bitand(code, 4))
diffq = diffq + step;
end
if (bitand(code, 2))
diffq = diffq + bitshift(step, -1);
end
if (bitand(code, 1))
diffq = diffq + bitshift(step, -2);
end
if (bitand(code, 8))
predsample = predsample - diffq;
else
predsample = predsample + diffq;
end
if (predsample > 32767)
predsample = 32767;
elseif (predsample < -32768)
predsample = -32768;
end
index = index + IndexTable(code+1);
if (index < 1)
index = 1;
end
if (index > 89)
index = 89;
end
prevsample = predsample;
previndex = index;
adpcm_y(n) = bitand(code, 15);
%adpcm_y(n) = code;
n = n + 1;
end
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies geschieht, weil Sie haben eine Funktion ruft sich selbst rekursiv mit Nein stoppen Zustand. Es ist die rekursive entspricht einer Endlosschleife.
Das Problem ist die zweite Zeile der Funktion:
In der zweiten Zeile die Funktion ruft rekursiv die Funktion erneut aus, aber da gibt es kein halten Bedingung ist, geht es weiter, bis Sie auf die maximum recursion limit Fehler.
adpcm_y
hat unendliche Rekursion. Ich bin nicht sicher, was Sie versuchen zu erreichen, mit dem rekursiven Aufruf inadpcm_y
, aber was es jetzt tut, ist wahrscheinlich nicht das, was Sie wollen.