数据采集方式
利用手机内置传感器,通过手机端matlab进行数据采集并传送到电脑,此为简易版代码,以三轴加速度计为例,数据时间长度最好大于10s。
原理与流程
![](https://img-blog.csdnimg.cn/img_convert/e7f706d8d963b49b0a6855023e858a10.png)
代码部分
%读取传感器信息
clear
%此处填写传感器数据路径
load('D:\sensorlog_.mat')
t = Acceleration.Timestamp;
x = Acceleration.X;
y = Acceleration.Y;
z = Acceleration.Z;
%画图
plot(t,x,t,y,t,z);
legend('X', 'Y', 'Z');
xlabel('Time (s)');
ylabel('Acceleration (m/s^2)');
title('传感器读取数据')
%%
%三轴数据合一
convert = sqrt(sum(x.^2 + y.^2 + z.^2, 2));
figure
subplot(3,1,1)
plot(t,convert);
xlabel('Time (s)');
ylabel('Acceleration (m/s^2)');
title('三轴数据合一')
%%
%消除重力影响
convert = convert - 9.7; %静止测量为9.7
subplot(3,1,2)
plot(t,convert);
xlabel('Time (s)');
ylabel('Acceleration (m/s^2)');
title('去重力')
%%
%滤掉0.1-20Hz以外的波,根据数据可进行滤波器范围调整
convert = highpass(convert,0.5,100);
convert = lowpass(convert,5,100);
subplot(3,1,3)
plot(t,convert);
xlabel('Time (s)');
ylabel('Acceleration (m/s^2)');
title('滤掉0.5-5Hz以外的波')
%%
%找出峰值,并统计
%阈值设为0.3,大于0.3才会被统计,根据情况改变
[pks,locs] = findpeaks(convert,'MINPEAKHEIGHT',0.3);
totalsteps = numel(pks)
figure
plot(t,convert);
xlabel('Time (s)');
ylabel('Acceleration (m/s^2)');
hold on;
plot(t(locs), pks, 'r', 'Marker', 'x', 'LineStyle', 'none');
title('步数标记');