加速度传感器计步MATLAB
案例程序
本案例学习通过捕获来自移动设备的加速度数据来计算步数-MATLAB&Simulink
数据获取
一种是直接采用手机的加速度信号。运行matlab moble ,现在好像不支持直接发给传感器数据给电脑MATLAB,不过可以记录一段数据上传到MATLAB Drive云盘中,然后在电脑中下载调用传感器数据。具体可以参考MATLAB使用Apple或Android移动设备上的加速数据计算步数
另一种是采用惯性测量单位(IMU)数据获取,比如蓝牙加速度传感器MPU-9250,这是一种九轴传感器,可以测量三轴加速度,三轴加速度,三轴磁场。关于数据格式问题:
A=importdata('Data200313091233.xlsx')
% TSV:tab separated values;即“制表符分隔值”
% CSV: comma separated values;即“逗号分隔值”
CSV格式xlsx格式MATLAB可以直接读取,把TSV文件用Excle打开,另存为xlsx格式。
计步方法
计步方法主要判断三轴加速度数据,首先将矢量数据转换为标量,然后减去重力,或者减去加速度平均值。
accelScalar = sqrt(sum(accelVector.^2, 2));%创建一个矩阵并计算每行中元素的总和。
accelScalarNoGravity = accelScalar - 1;
一种计步方法假设每当加速度从负值变为正值时,我们都要计算一个步骤。
aboveZero = accelScalarNoGravity > 0;
zeroCrossing = diff(aboveZero) == 1;%计算元素之间的差分
zeroCrossingIndex = find(zeroCrossing);%查找非零元素的索引和值
% 步数等于零交叉事件的数目
numberOfSteps = numel(zeroCrossingIndex)
另一种采取的步骤数就是找到的峰数,峰值位置可以通过加速度大小数据可视化。findpeaks是Signal Processing Toolbox的一项功能,用于查找加速度幅值数据的局部最大值。仅将最小高度超过一个标准偏差的峰视为台阶。该阈值应通过实验进行调整,以匹配人在行走时的运动水平,地板的硬度等。
minPeakHeight = std(accelScalarNoG);%标准差
[pks,locs] = findpeaks(accelScalarNoG,'MINPEAKHEIGHT',minPeakHeight);%检测大于标准差的峰值
numSteps = numel(pks);% 步数等于峰数