guardar en una matriz vectores de diferente longitud
Publicado por david cabanero (2 intervenciones) el 24/03/2015 18:32:16
Hola buenas!
Soy algo nuevo en esto de Matlab y espero que me podais resolver esta dudilla.
Tengo una matriz tridimensional (M§D_Data2) de 1737*2*16 valores. He creado un bucle para que filtre el ruido de la senal y despues me localize los picos para cada uno de los 16 vectores de la matriz.
Mi problema es que quiero guardar los picos localizados en una nueva matriz (LOC) para posteriormente utilizarlos, pero como tiene longitudes diferentes en cada iteracion, pues me da error. Se os ocurre alguna manera de solucionarlo??
Dejo aqui el codigo:
%Sacar el valor del primer numero de todas las medidas
firstval=(M3D_Data2(1,1,:));
%hacer la media de esos valores (aunque son iguales)
mfirstval=mean(firstval);
%Sacar el valor del ultimo numero de todas las medidas
lastval=(M3D_Data2(size (M3D_Data2,1),1,:));
%hacer la media de esos valores (aunque son iguales)
mlastval=mean(lastval);
%hacer la resta y dividirlo entre el numero de espacios, para saber la
%distancia entre dos medidas consecutivas
distance=(mfirstval-mlastval)/(size(M3D_Data2,1)-1);
LOC=zeros();
IC1=zeros(20,16);
%%%% Aqui lo importante
for i=1:1: size (M3D_Data2,3)
W=M3D_Data2(:,1,i); %ABAp1a0 es lo que tendra que ir variando
I=M3D_Data2(:,2,i); %Todo esto deberia de entrar dentro del bucle
IC=sgolayfilt(I,6,41);
[find,loc]=findpeaks(IC,'minpeakdistance',5,'minpeakheight',-0.1,'threshold',0.00001);
%loc 2 para cambiar la linea de base de posiciones a la escala actual
%(649-3997 cm-1)
loc2=((loc*(distance))+mlastval);
%loc 3 para invertir la posicion de los picos localizados, ya que lo
%hacia inversamente.
loc3=(loc2-(mfirstval-((mfirstval-loc2)*2)))+mlastval;
IC1(:,i)=IC;
LOC(:,i)=loc3;
end
Soy algo nuevo en esto de Matlab y espero que me podais resolver esta dudilla.
Tengo una matriz tridimensional (M§D_Data2) de 1737*2*16 valores. He creado un bucle para que filtre el ruido de la senal y despues me localize los picos para cada uno de los 16 vectores de la matriz.
Mi problema es que quiero guardar los picos localizados en una nueva matriz (LOC) para posteriormente utilizarlos, pero como tiene longitudes diferentes en cada iteracion, pues me da error. Se os ocurre alguna manera de solucionarlo??
Dejo aqui el codigo:
%Sacar el valor del primer numero de todas las medidas
firstval=(M3D_Data2(1,1,:));
%hacer la media de esos valores (aunque son iguales)
mfirstval=mean(firstval);
%Sacar el valor del ultimo numero de todas las medidas
lastval=(M3D_Data2(size (M3D_Data2,1),1,:));
%hacer la media de esos valores (aunque son iguales)
mlastval=mean(lastval);
%hacer la resta y dividirlo entre el numero de espacios, para saber la
%distancia entre dos medidas consecutivas
distance=(mfirstval-mlastval)/(size(M3D_Data2,1)-1);
LOC=zeros();
IC1=zeros(20,16);
%%%% Aqui lo importante
for i=1:1: size (M3D_Data2,3)
W=M3D_Data2(:,1,i); %ABAp1a0 es lo que tendra que ir variando
I=M3D_Data2(:,2,i); %Todo esto deberia de entrar dentro del bucle
IC=sgolayfilt(I,6,41);
[find,loc]=findpeaks(IC,'minpeakdistance',5,'minpeakheight',-0.1,'threshold',0.00001);
%loc 2 para cambiar la linea de base de posiciones a la escala actual
%(649-3997 cm-1)
loc2=((loc*(distance))+mlastval);
%loc 3 para invertir la posicion de los picos localizados, ya que lo
%hacia inversamente.
loc3=(loc2-(mfirstval-((mfirstval-loc2)*2)))+mlastval;
IC1(:,i)=IC;
LOC(:,i)=loc3;
end
Valora esta pregunta


0