Matlab - SLIDER GUIDE MATLAB

 
Vista:
sin imagen de perfil
Val: 11
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

SLIDER GUIDE MATLAB

Publicado por Jose (8 intervenciones) el 19/03/2019 09:49:50
Buenas, estoy trabajando con una interfaz gráfica en matlab en la que hay una gráfica y un slider, en la gráfica hay una señal de duración total de 45 segundos y en un primer momento, solo muestro por pantalla 10 segundos de la señal.
Me gustaría saber que tengo que escribir en la callback de dicho slider para que me permita visualizar según avanzo con el slider el resto de tiempo hasta los 45 segundos
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
sin imagen de perfil
Val: 918
Bronce
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

SLIDER GUIDE MATLAB

Publicado por Daniel (354 intervenciones) el 19/03/2019 12:57:58
Hola,

Lo primero, al iniciar el programa yo configuraría el slider con las siguientes opciones

1
2
3
set(handles.slider, 'Min', 10);
set(handles.slider, 'Max', 45);
set(handles.slider, 'Value', 10);

Esto hace que el slider solamente se pueda mover entre 10 y 45 con un valor inicial de 10. Una vez hecho esto en el callback solamente se ha de leer el valor del slider para actualizar la gráfica. Si x e y son los vectores con los datos:

1
2
3
pos = round(get(handles.slider,'Value'));
 
plot(handles.axis, x(1:pos), y(1:pos));

Saludos,
Daniel Rodríguez.
Analytics Lane
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
sin imagen de perfil
Val: 11
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

SLIDER GUIDE MATLAB

Publicado por Jose (8 intervenciones) el 19/03/2019 13:46:44
Buenas Daniel, gracias por contestar a mi duda, son señales cardiacas y cada señal es una fila de una matriz de 16 filas y de 92160 columnas (las columnas representan el número de muestras totales, pero hice un cambio en los ejes dado que la frecuencia de muestreo es 2048 Hz y puse los ejes en segundos)

Al realizar los pasos que me has pasado, no sé que tengo que poner en x y en y del plot. También me gustaría actualizar los ejes para que aparezca en todo momento al mover el slider los 10 segundos en los que se encuentra.

Muchas gracias
Captura
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
sin imagen de perfil
Val: 918
Bronce
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

SLIDER GUIDE MATLAB

Publicado por Daniel (354 intervenciones) el 19/03/2019 14:52:44
Hola,

Al responder a la pregunta la he hecho de forma genérica, solamente centrándome en cómo leer los datos de un slider de Guide. Luego lo aplique a un caso genérico de una gráfica con x e y.

La respuesta anterior es para aumentar el tamaño de la muestra en cada caso. Si lo que se desar es crear una ventana móvil no es muy diferente. Supongamos que la ventana es de 10 y en el vector hay 100 elementos. Entonces el slider los configuramos con

1
2
3
4
5
6
ventana = 10;
registros = 100;
 
set(handles.slider, 'Min', 0);
set(handles.slider, 'Max', registros - ventana);
set(handles.slider, 'Value', 0);

Ahora para calcular los elementos a representar se puede usar

1
pos = (1:ventana) + round(get(handles.slider,'Value'))

un vector de 10 elementos entre 1 más el valor seleccionado y 10 más el valor seleccionado. Así si los datos están en una matriz datos y cada registro es una fila, para representar se ha de seleccionar el conjunto de datos con

1
datos(pos, :)

y utilizar estos en la función con la que se representan los datos.

Saludos,
Daniel Rodríguez.
Analytics Lane
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
sin imagen de perfil
Val: 11
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

SLIDER GUIDE MATLAB

Publicado por Jose (8 intervenciones) el 19/03/2019 15:55:19
Buenas,

1
2
3
4
5
6
7
8
9
10
11
12
function slider1_Callback(hObject, eventdata, handles)
ventana = 10;
registros = 100;
 
set(hObject, 'Min', 0);
set(hObject, 'Max', registros - ventana);
set(hObject, 'Value', 0);
 
global xn1111
global tn
pos = (1:ventana) + round(get(hObject,'Value'))
plot (handles.signal1,tn(1:pos),xn1111(1:pos));



Eso es lo que tengo puesto dentro de la callback de slider y no me funciona para que sea un slider movil a lo largo de la señal, teniendo en cuenta que xn1111 es una de las filas de la matriz de datos (la primera señal empezando por arriba en la captura anterior) y tn es el tiempo de duración de la señal completa que en este caso son 45 segundos)
¿Qué debo modificar para que funcione?
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
sin imagen de perfil
Val: 918
Bronce
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

SLIDER GUIDE MATLAB

Publicado por Daniel (354 intervenciones) el 19/03/2019 17:57:23
Hola,

Lo primero, la configuración del slider se tiene que poner en la función que se ejecuta al iniciar la aplicación (la que esta asocida al eveto _OpeningFcn de la ventana). Al ponerlo en el callback cada vez que se cambien el valor del slider este va a volver a la posición original.

Sin hacer nada más que cambiar la función slider1_Callback y asumiendo que la ventana es del 10% del total

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function slider1_Callback(hObject, eventdata, handles)
	global xn1111;
	global tn;
 
	% Esto es necesario por si se han cambiado los valores 
	initial = get(hObject, 'Min');
	final = get(hObject, 'Max');
	value = get(hObject, 'Value');
 
	% Selección de una ventana del 10%
	num_dates = length(tn);
	window = round(num_dates * 0.1);
 
	% Estimación de la nueva posición
	pos = (1:window) + round((num_dates - window) * (value - initial) / (final - initial));
 
	% Se representa los datos
	plot (handles.signal1, tn(pos), xn1111(pos));

Por otro lado, no es nada aconsejable usar variables globales. Los datos de las ventanas Guide es mejor guardarlas en los handles. Así se puede conseguir tener más de una instancia de la misma aplicación en funcionamiento con diferentes datos y se evitan efectos no deseados.

Saludos,
Daniel Rodríguez.
Analytics Lane
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