Main Content

Counting Steps by Capturing Acceleration Data from Your Mobile Device

此示例显示了如何从Android™或iOS移动设备收集加速数据,并使用它来计算所采用的步骤数。

此示例需要信号处理工具箱™。

设置您的移动设备

为了从Matlab®中的移动设备接收数据,您需要在移动设备上安装和设置MATLAB Mobile™应用程序。

Log in to the MathWorks® Cloud from the MATLAB Mobile Settings.

创建与移动设备的连接

命令MATLAB移动的屏幕,使用动员command to create an object that represents your mobile device.

m= mobiledev;

显示的输出应显示连接:1,表明动员对象已成功建立了与应用程序的连接。

Prepare for Data Acquisition

在设备上启用加速传感器。

M.AccelerationsEnsorEnabled = 1;

开始获取数据

启用传感器后,传感器MATLAB移动设备的屏幕将显示传感器测量的当前数据。这记录属性允许您开始将传感器数据发送到动员

m.logging = 1;

该设备现在正在传输传感器数据。

During logging, the device is held or kept in a pocket while walking around. This generates changes in acceleration across all three axes, regardless of device orientation.

停止获取数据

记录属性用于再次使设备停止将传感器数据发送到动员

m.logging = 0;

检索已记录的数据

Accellog用于检索XYZ加速度数据和时间戳从设备传输到动员

[a,t] = accellog(m);

绘制原始传感器数据

所有三个轴的记录加速度数据都可以绘制在一起。

plot(t,a); legend('X',,,,'y',,,,'Z');Xlabel(“相对时间)”);ylabel(加速度(M/S^2)');

处理原始加速数据

为了将每个时间点的XYZ加速度向量转换为标量值,计算幅度。这允许整体加速度发生很大变化,例如步行时采取的步骤,无论设备方向如何,都可以检测到。

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

绘制大小以可视化加速度的一般变化。

plot(t,mag); xlabel(“时间)”);ylabel(加速度(M/S^2)');

该图表明加速度幅度不是零均值。从数据中减去平均值将消除任何恒定效果,例如重力。

magNoG = mag - mean(mag); plot(t,magNoG); xlabel(“时间)”);ylabel(加速度(M/S^2)');

绘制的数据现在大约为零,并清楚地显示了加速度幅度的峰值。每个峰对应于行走时要采取的步骤。

计算采取的步骤数

findpeaks是信号处理工具箱的函数,用于查找加速度幅度数据的局部最大值。仅将最小高度高于一个标准偏差的峰值视为一步。该阈值应进行实验调整,以符合一个人的行走,地板表面硬度等。

MinPeakHeight = STD(Magnog);[pks,locs] = findpeaks(magnog,'Minpeakheight',Minpeakheight);

采取的步骤数仅仅是发现的峰值。

numsteps = numel(pks)

峰位置可以使用加速度幅度数据可视化。

抓住on;情节(t (loc)s), pks,'r',,,,“标记”,,,,'v',,,,'LineStyle',,,,'没有任何');title('Counting Steps');Xlabel(“时间)”);ylabel(“加速度幅度,无重力(m/s^2)”);抓住离开;

清理

关闭加速传感器并清除动员

M.AccelerationsEnsorEnabled = 0;清除m;