matlab数据求加速度,通过从移动设备获取加速度数据对进行计步
設(shè)置您的移動(dòng)設(shè)備
為了在 MATLAB? 中接收來(lái)自移動(dòng)設(shè)備的數(shù)據(jù),您需要在您的移動(dòng)設(shè)備上安裝和設(shè)置 MATLAB Mobile? App。
從 MATLAB Mobile 的“設(shè)置”登錄到 MathWorks? Cloud。
創(chuàng)建與移動(dòng)設(shè)備的連接
在 MATLAB Mobile 的命令屏幕上,使用 mobiledev 命令創(chuàng)建一個(gè)表示您的移動(dòng)設(shè)備的對(duì)象。
m = mobiledev;
輸出應(yīng)顯示 Connected: 1,表明 mobiledev 對(duì)象已成功建立與該 App 的連接。
準(zhǔn)備數(shù)據(jù)采集
在設(shè)備上啟用加速度傳感器。
m.AccelerationSensorEnabled = 1;
開(kāi)始獲取數(shù)據(jù)
啟用傳感器后,MATLAB Mobile 的傳感器屏幕將顯示傳感器測(cè)量的當(dāng)前數(shù)據(jù)。Logging 屬性允許您開(kāi)始向 mobiledev 發(fā)送傳感器數(shù)據(jù)。
m.Logging = 1;
該設(shè)備現(xiàn)在正在傳輸傳感器數(shù)據(jù)。
在記錄過(guò)程中,當(dāng)人員四處走動(dòng)時(shí),設(shè)備始終放在衣服口袋中。這將在所有三個(gè)軸上生成加速度變化,而與設(shè)備方向無(wú)關(guān)。
停止獲取數(shù)據(jù)
再次使用 Logging 屬性使設(shè)備停止向 mobiledev 發(fā)送傳感器數(shù)據(jù)。
m.Logging = 0;
檢索記錄的數(shù)據(jù)
accellog 用于檢索從設(shè)備傳輸?shù)?mobiledev 的 XYZ 加速度數(shù)據(jù)和時(shí)間戳。
[a,t] = accellog(m);
繪制原始傳感器數(shù)據(jù)
可以同時(shí)繪制記錄的所有三個(gè)軸的加速度數(shù)據(jù)。
plot(t,a);
legend('X', 'Y', 'Z');
xlabel('Relative time (s)');
ylabel('Acceleration (m/s^2)');
處理原始加速度數(shù)據(jù)
為了將每個(gè)時(shí)間點(diǎn)的 XYZ 加速度向量轉(zhuǎn)換為標(biāo)量值,系統(tǒng)將計(jì)算其幅值。這樣,無(wú)論設(shè)備方向如何,都可以檢測(cè)到整體加速度的較大變化,例如行走步數(shù)。
x = a(:,1);
y = a(:,2);
z = a(:,3);
mag = sqrt(sum(x.^2 + y.^2 + z.^2, 2));
繪制幅值是為了可視化加速度的總體變化。
plot(t,mag);
xlabel('Time (s)');
ylabel('Acceleration (m/s^2)');
繪圖顯示加速度幅值不是零均值。從數(shù)據(jù)中減去均值將消除任何常量影響,如重力。
magNoG = mag - mean(mag);
plot(t,magNoG);
xlabel('Time (s)');
ylabel('Acceleration (m/s^2)');
繪制的數(shù)據(jù)現(xiàn)在以零為中心,清楚地顯示加速度幅值的峰值。每個(gè)峰值對(duì)應(yīng)一個(gè)行走步。
對(duì)行走步進(jìn)行計(jì)數(shù)
findpeaks 是 Signal Processing Toolbox 提供的一個(gè)函數(shù),用于求加速度幅值數(shù)據(jù)的局部最大值。只有最小高度超過(guò)一個(gè)標(biāo)準(zhǔn)差的峰值才被視為一個(gè)行走步。此閾值應(yīng)通過(guò)試驗(yàn)來(lái)調(diào)整,以匹配人行走時(shí)移動(dòng)的程度、地面的硬度等。
minPeakHeight = std(magNoG);
[pks,locs] = findpeaks(magNoG,'MINPEAKHEIGHT',minPeakHeight);
行走步數(shù)即求得的峰值數(shù)。
numSteps = numel(pks)
峰值位置可以通過(guò)加速度幅值數(shù)據(jù)進(jì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;
清理
關(guān)閉加速度傳感器并清理 mobiledev。
m.AccelerationSensorEnabled = 0;
clear m;
總結(jié)
以上是生活随笔為你收集整理的matlab数据求加速度,通过从移动设备获取加速度数据对进行计步的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: oracle 10.2.0.4 rac
- 下一篇: “身外何足言”下一句是什么