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;