Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

Contar pasos capturando datos de aceleración desde su dispositivo móvil

Este ejemplo muestra cómo recopilar datos de aceleración desde un dispositivo móvil Android™ o iOS y usarlos para contar el número de pasos dados.

Este ejemplo requiere Signal Processing Toolbox™.

Configurar su dispositivo móvil

Para recibir datos desde un dispositivo móvil en MATLAB®, necesitará instalar y configurar la app MATLAB Mobile™ en su dispositivo móvil.

Inicie sesión en MathWorks® Cloud desde la configuración de MATLAB Mobile.

Crear una conexión con su dispositivo móvil

En la pantalla Comandos de MATLAB Mobile, utilice el comando mobiledev para crear un objeto que represente su dispositivo móvil.

m = mobiledev;

La salida mostrada debería mostrar Connected: 1, indicando que el objeto mobiledev ha establecido correctamente una conexión con la app.

Preparar la adquisición de datos

Active el sensor de aceleración del dispositivo.

m.AccelerationSensorEnabled = 1;

Comenzar a obtener datos

Después de activar el sensor, la pantalla Sensores de MATLAB Mobile mostrará los datos actuales medidos por el sensor. La propiedad Logging permite comenzar a enviar los datos del sensor a mobiledev.

m.Logging = 1;

El dispositivo está transmitiendo ahora los datos del sensor.

Durante el registro, el dispositivo está sujeto o guardado en un bolsillo mientras se pasea. Esto genera cambios en la aceleración de los tres ejes, independientemente de la orientación del dispositivo.

Dejar de obtener datos

La propiedad Logging se utiliza de nuevo para que el dispositivo deje de enviar datos del sensor a mobiledev.

m.Logging = 0;

Recuperar los datos registrados

accellog se utiliza para recuperar los datos de aceleración de XYZ y las marcas de tiempo transmitidas desde el dispositivo a mobiledev.

[a,t] = accellog(m);

Representar los datos no procesados de sensores

Los datos de aceleración registrados para los tres ejes se pueden representar juntos.

plot(t,a);
legend('X', 'Y', 'Z');
xlabel('Relative time (s)');
ylabel('Acceleration (m/s^2)');

Procesar los datos de aceleración

Para convertir los vectores de aceleración de XYZ en cada punto del tiempo a valores de escalar, se calcula la magnitud. Esto permite que se detecten grandes cambios en la aceleración total, como los pasos dados mientras se pasea, independientemente de la orientación del dispositivo.

x = a(:,1);
y = a(:,2);
z = a(:,3);
mag = sqrt(sum(x.^2 + y.^2 + z.^2, 2));

La magnitud se representa para visualizar los cambios generales en la aceleración.

plot(t,mag);
xlabel('Time (s)');
ylabel('Acceleration (m/s^2)');

La gráfica muestra que la magnitud de la aceleración no tiene media cero. Restar la media a los datos eliminará cualquier efecto constante, como la gravedad.

magNoG = mag - mean(mag);

plot(t,magNoG);
xlabel('Time (s)');
ylabel('Acceleration (m/s^2)');

Los datos representados están centrados ahora alrededor de cero y muestran claramente picos en la magnitud de la aceleración. Cada pico corresponde a un paso dado mientras se paseaba.

Contar el número de pasos dados

findpeaks es una función de Signal Processing Toolbox que se utiliza para encontrar los máximos locales de los datos de la magnitud de la aceleración. Solo se tratan como pasos los picos con una altura mínima superior a una desviación estándar. Este umbral debería ajustarse de manera experimental para que coincida con el nivel de movimiento de una persona mientras camina, la dureza de las superficies del suelo, etc.

minPeakHeight = std(magNoG);

[pks,locs] = findpeaks(magNoG,'MINPEAKHEIGHT',minPeakHeight);

El número de pasos dados es simplemente el número de picos encontrados.

numSteps = numel(pks)

Las ubicaciones de los picos se pueden visualizar con los datos de la magnitud de la aceleración.

hold on;
plot(t(locs), pks, 'r', 'Marker', 'v', 'LineStyle', 'none');
title('Counting Steps');
xlabel('Time (s)');
ylabel('Acceleration Magnitude, No Gravity (m/s^2)');
hold off;

Borrar el contenido

Desconecte el sensor de aceleración y borre mobiledev.

m.AccelerationSensorEnabled = 0;

clear m;