2011-12-18 4 views
1

GPS를 사용하여 Android 애플리케이션을 개발 중입니다. 15 분의 1 분에 평균 속도를 표시하는 기능을 구현하고 싶습니다. 유닉스의 CPU 부하와 같은 것. 두 번째로 이동 한 거리를 누적하여 평균을 쉽게 계산하고 경과 시간으로 나눌 수 있지만 이동 평균을 계산하는 현명한 방법은 생각할 수 없습니다.GPS에서 평균 이동 속도를 계산하는 방법은 무엇입니까?

분명히 ID는 가장 오래된 값을 삭제하는 동안 매초마다 배열의 마지막 위치와 현재 위치 사이의 거리를 두어 ID를 얻을 수 있습니다.

나는 이것을하는 깔끔한 방법을 찾고있다. 꽤 정직이 그것에 대해 갈

답변

2

이미 제안한대로 전체 기간에 대한 모든 값을 저장해야합니다. 그 이유는 이동 평균에 대한 이전 값의 기여를 "잊어 버려야"할 필요가 있기 때문입니다. 이 값의 위치 (즉, 저장하지 않은 경우)를 모르면 정확하게 수행 할 수 없습니다.

귀하의 경우 15 분 동안 1 초당 1 값은 15 * 60 = 900 데이터 포인트에 해당하며 이는 정상입니다.

업데이트 할 때마다 전체 배열에 대해 합계를 수행 할 필요가 없습니다. 데이터 포인트 수, 새로운 값 및 그 값에서 "잊어 버린"값에서 새로운 이동 평균을 계산할 수 있습니다 순간 :

여기
new_average = (n * old_average - x_forget + x_new) 

, n 데이터 포인트의 수 (귀하의 경우 900)이며, x_forget는 "잊고"하고 x_new 최신 값 값입니다. 그런 다음 배열 앞면에 x_forget을 놓고 끝에 x_new을 저장하십시오. 배열 대신 링크 된 목록을 통해 구현 된 큐를 사용할 수 있습니다.

4

Heres는 한 가지 방법 :

당신이 위치 매 초마다 큐에 901 개 샘플을 유지 샘플링하는 경우, 가치 (1 추가) 15 분 이잖아. 위치 0은 가장 최근의 측정이며 효과적으로 현재 위치입니다. 마지막으로 X 분 동안의 평균 속도에 대한

:

s = X * 60; 
point1 = postion_queue[0]; // this is your current position 
point2 = postion_queue[s]; // this is your position s seconds ago 
d = distance_between_points(point1, point2); 
speed = d/s; 

speed 지금, 초당 단위 거리 mph로 변환, 또는 당신이 필요로하는 단위를 킬로미터 또는 무엇이든된다. 1 분에서 15 분 사이의 평균에 X 값을 다르게 사용할 수 있습니다.

관련 문제