Matlab - problema con una tonteria de matlab

 
Vista:

problema con una tonteria de matlab

Publicado por Niko (1 intervención) el 18/06/2008 10:53:33
una funcion de un archivo de matlab me trae frito. la funcion es si es esta:

% sumador |
% |
% IN_A: entrada A. |
% NB_Sum: numero de bits del sumador. |
% N_Sim: numero de ciclos a simular. |
%_________________________________________________________________________|

function out = sumador(IN_A, NB_Sum, N_Sim)

max_data = 2^(NB_Sum);
old_data = 0;

for i = 1:N_Sim,
data = IN_A + old_data;
res(i) = data;

if data > (max_data - 1)
res(i) = data - max_data;
end
old_data = data;
end
out = res;

end

como es facil de adivinar, es un acumulador con desbordamiento, es decir, se le mete un numero que va sumando repetidas veces asta que satura y vuelve al principio. si representaramos la salida, deberia salir algo asi como una funcion en diente de sierra, sube linealmente y decae cuando satura. el problema es que a mi solo me satura una la primera vez, luego suma indefinidamente y se pasa el control de desbordamiento por el forro. yo estoy harto de darle vueltas porque no tiene sentido y no veo forma de corregirlo. a primera vista parece una tonteria pero a mi me tienen frito. un saludo y gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:problema con una tonteria de matlab

Publicado por Kike (304 intervenciones) el 18/06/2008 16:03:32
function out = sumador(IN_A, NB_Sum, N_Sim)

max_datos = 2^(NB_Sum);

datos = 0; % vector que acumulará los datos

for i = 1:N_Sim
datos(end+1) = IN_A+datos(end);

if datos(end) > max_datos-1
datos(end) = 0; % reset a cero
end % fin de if
end % fin de for

out = datos;

% Ahora represento gráficamente al vector datos
plot(datos);
grid on;

% *****************************************************************

Al ejecutarlo:
>> salida= sumador(2,4,25)

salida =

Columns 1 through 13

0 2 4 6 8 10 12 14 0 2 4 6 8

Columns 14 through 26

10 12 14 0 2 4 6 8 10 12 14 0 2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar