Matlab - leer datos

 
Vista:

leer datos

Publicado por german (22 intervenciones) el 14/06/2010 17:16:04
hola amigos

Estoy realizando la lectura de un archivo .DAT, necesito leer las colunnas e realizar algunos calculos, mi inquietud es la siguiente, cada columna son valores de velocidad, estos valores van o aumentando o disminuyendo hasta cierto valor casi constante,
Casi constante pq cuando alcanzan es estado estable, los valores fluctuan levemente entorno de un valor constante que seria la velocidad estable,pero ya no existe la tendencia de crecer o disminuir.
ahora yo debo leer los datos a partir de la posicion que se se alcance la velocidad constante, para realizar los calculos ,
Una idea era caculando una pendiente cuando la pendiente sea cero, este seria el valor constante de velocidad ...empiece a leer los datos para los calulos, pero cuando llega al estado estable ella fluctua levemente o sea de un punto para otro puede que la pendiente sea positiva luego negativa, pero entorno de un punto, no sé como leer adecuadamente estos datos

gracias!!!

% ---- lee el archivo que es separado por tabs ----------
m=csvread('LES9.dat', 1, 0); % LEE OS DATOS

unums = [2 3 5 6 7 8 9 10 11 12 4 13 14 16 17 18 19 20 21 22 23 15];

% me gustaria empezar a leer cada columna a partir de alcanzar un velocidad casi constante.

for i = 1:length(unums)
un = unums(i);
u(:,i) = m(:,un);

Y=abs(fft(u(:,i)))/length(u);

n=length(Y);

power(:,i) = abs(Y(1:floor(n/2))).^2/;
nyquist = 1/2;
freq = ((1:n/2)/(n/2)*nyquist)';


% regresion de todos los puntos
[a0,a1]=Linear_regression(log10(freq),log10(power(:,i)));

%a1 = -5/3; % para que la linea tenga pendiente definida
%a0 = log10(power(3000,i)) - (-5/3)*log10(freq(3000));% usando el dato medio
powerfit(:,i) = 10.^(a0 + a1*log10(freq));%reg todo.


a0_matriz(i) = a0;
a1_matriz(i) = a1
M=a1_matriz';

B=(1-i)/10; % indica la altura en metros do ponto de monitoreamento no Riser


% PLOT HORIZONTAL IMPAR %

if i<12 && mod(i,2)==1
subplot(2,6,(i/2+0.5));
loglog(freq,power(:,i),'b',freq,powerfit(:,i),'k:');
L2 = ['h = ' num2str(-B) ' m'];
L3 = ['m = ' num2str(a1,3)];
title({L2;L3},'FontSize',8);
%axis tight;
elseif i>=12 && mod(i,2)==0
subplot(2,6,(i/2+1));
loglog(freq,power(:,i),'b',freq,powerfit(:,i),'k:');
%L2 = ['h = ' num2str(-B) ' m'];
L3 = ['m = ' num2str(a1,3)];
title({L3},'FontSize',8);
%axis tight;

%set(gca,'xtick',[],'ytick',[])
[ax1,h1]=suplabel('super X label');
[ax2,h2]=suplabel('super Y label','y');
%set(h1,'\bf','FontSize',15);
H=labelEdgeSubPlots('\fontsize{14}\bf\kappa (Hz)','\fontsize{12}\bfEnergia (J)',1);

end

end
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:leer datos

Publicado por german (22 intervenciones) el 14/06/2010 19:52:27
aqui presento los perfiles de velocidad, la flecha roja me indica desde donde debo leer los datos

http://files.engineering.com/getfile.aspx?folder=fd86cce4-d528-4615-bfa6-e8c93437db7c&file=star-read_data.emf
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

RE:leer datos

Publicado por Kike (304 intervenciones) el 14/06/2010 22:08:59
Noto que para las figuras de abajo la pendiente siempre es positiva y fluctúa entonces la pendiente cambia. Entonces me fijo en el cambio de pendiente, no cuando la pendiente sea cero porque eso quizá no ocurra.

Hago un bucle para leer cada valor, con índice n por ejemplo. Luego lo comparo con el siguiente valor. Como la pendiente es positiva entonces el n-ésimo valor debe ser menor que el siguiente valor, y si es mayor entonces hay cambio de pendiente. Entonces tomo la posición del n-ésimo y me salgo del bucle. Luego hago otro bucle y leo a partir de la posición n.

Si quiero ser más riguroso puedo poner la condición de que n debe tener una diferencia menor que +/-10% con respecto al siguiente valor.

Ejemplo:
% Ya tengo por allí un vector con los datos de interés, los cuales muestran una pendiente positiva

n = [ ]; % posición donde comienza la fluctuación

% Bucle para encontrar dónde comienza la fluctuación:
for k=1:length(vector)
if vector(k) > vector(k+1) % comparo un elemento con el siguiente elemento
n = k; % si el siguiente elemento es menor que el valor actual entonces allí comienza la fluctuación
break; % me salgo del bucle
end
end

% Comienzo a leer desde la n-ésima posición
datos = vector(n : end);
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

RE:leer datos

Publicado por german (22 intervenciones) el 14/06/2010 22:41:01
hola Kike

agradezco su ayuda primero que todo, en mi caso como hago para colocar la rutina??

saludos
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