Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

모바일 기기에서 가속도 데이터를 캡처하여 걸음 수 세기

이 예제에서는 Android™ 또는 iOS 모바일 기기에서 가속도 데이터를 수집하고 이를 사용하여 이동한 걸음 수를 세는 방법을 보여줍니다.

이 예제를 수행하려면 Signal Processing Toolbox™가 필요합니다.

모바일 기기 설정하기

MATLAB®에서 모바일 기기로부터 데이터를 수신하려면 모바일 기기에 MATLAB Mobile™ 앱을 설치하고 설정해야 합니다.

MATLAB Mobile 설정에서 MathWorks® Cloud에 로그인합니다.

모바일 기기에 대한 연결 만들기

MATLAB Mobile의 명령 화면에서 mobiledev 명령을 사용하여 모바일 기기를 나타내는 객체를 만듭니다.

m = mobiledev;

출력에 mobiledev 객체가 앱에 대한 연결을 성공적으로 설정했음을 나타내는 Connected: 1이 표시되어야 합니다.

데이터 수집 준비하기

기기의 가속도 센서를 활성화합니다.

m.AccelerationSensorEnabled = 1;

데이터 수집 시작하기

센서를 활성화하면 MATLAB Mobile의 센서 화면에 센서가 측정한 현재 데이터가 표시됩니다. Logging 속성을 사용하면 센서 데이터를 mobiledev로 보내기 시작할 수 있습니다.

m.Logging = 1;

이제 기기가 센서 데이터를 전송합니다.

기록하는 동안 기기를 들고 있거나 주머니에 넣은 상태로 걷습니다. 그러면 기기 방향에 상관없이 세 좌표축 모두에서 가속도가 변합니다.

데이터 수집 중지하기

Logging 속성을 다시 사용하여 기기가 mobiledev로 센서 데이터를 보내는 것을 중지하도록 합니다.

m.Logging = 0;

기록된 데이터 가져오기

accellog를 사용하여 기기에서 mobiledev로 전송된 XYZ 가속도 데이터와 타임스탬프를 가져옵니다.

[a,t] = accellog(m);

원시 센서 데이터 플로팅하기

세 좌표축 모두에서 기록된 가속도 데이터를 함께 플로팅할 수 있습니다.

plot(t,a);
legend('X', 'Y', 'Z');
xlabel('Relative time (s)');
ylabel('Acceleration (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('Time (s)');
ylabel('Acceleration (m/s^2)');

이 플롯에서 가속도 크기의 평균이 0이 아님을 알 수 있습니다. 데이터에서 평균을 빼면 중력과 같은 모든 일정한 효과가 제거됩니다.

magNoG = mag - mean(mag);

plot(t,magNoG);
xlabel('Time (s)');
ylabel('Acceleration (m/s^2)');

이제 플로팅된 데이터가 0에 중심을 두며 가속도 크기의 피크를 확실히 보여줍니다. 각 피크는 걷는 동안 취한 걸음에 해당합니다.

이동한 걸음 수 세기

findpeaks는 가속도 크기 데이터의 국소 최댓값을 구하는 데 사용하는 Signal Processing Toolbox의 함수입니다. 최소 높이에서 1 표준편차 위에 해당하는 피크만 걸음으로 처리됩니다. 이 임계값은 실험을 통해 걸을 때 사람의 움직임 수준, 바닥면의 딱딱한 정도 등에 맞게 조정해야 합니다.

minPeakHeight = std(magNoG);

[pks,locs] = findpeaks(magNoG,'MINPEAKHEIGHT',minPeakHeight);

이동한 걸음 수는 단순히 발견한 피크 수에 해당합니다.

numSteps = numel(pks)

피크 위치는 가속도 크기 데이터로 시각화할 수 있습니다.

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;

정리하기

가속도 센서를 끄고 mobiledev를 지웁니다.

m.AccelerationSensorEnabled = 0;

clear m;