2014-11-30 1 views
-1

새로운 iPhone6 ​​기압계를 사용하여 고도의 변화를 표시하는 응용 프로그램을 만듭니다. 출력 데이터에는 잡음이 있기는하지만 5 점 이동 평균을 적용하여 부드러운 데이터를 얻고 싶습니다.iPhone 기압계에서 과거 5 개의 고도 값을 평균하는 방법

여기에 가장 최근의 타임 스탬프에서 이전 타임 스탬프까지의 고도 차이를 계산해야하는 코드가 있습니다.

CGFloat degree = (_altData.relativeAltitude.floatValue - _prevAltData.relativeAltitude.floatValue) 

이전 3 개의 데이터를 저장하고 다시 검색해야합니다. 미리 감사드립니다. Xcode를 처음 접했고 정말 도움이 될 것입니다.

+0

그래서, 당신은 어떻게 저장 해야할지 모르거나 평균을하는 법을 모릅니다. –

+0

나는 지난 3 개의 고도를 저장하는 방법을 모른다. _altData와 _prevAltData를 사용하여 현재 (x) 고도와 이전 (x-1) 고도가 어떻게 x-2, x-3 및 x-4를 얻을 수 있습니까? 감사 – Rik

답변

0

스토어 그들을 = 5 windowSize의 고정 배열 :

// array of last altitudes for calculating average 
int[] a = new int[windowSize]; 

1) 새로운 데이터가 마지막 인덱스에 저장 도착 : 프로그램 초기화 할 때 이 somwhere

a[windowSize - 1] = new_altitude, 

2)를 계산 평균.

double avg = 0; 
    for (int i = 0; i < windowSize; i++) { 
     avg += a[i]; 
    } 
    avg = avg/windowSize; 

3) 모든 요소를 ​​현재 색인 -1에 복사하여 다음 요소를위한 공간을 만듭니다.

for (int i = 1; i < windowSize; i++) { 
    a[i-1] = a[i]; 
} 

그게 전부입니다.

실제로는 창이 완전히 채워지지 않은 경우 매우 복잡 할 수 있으므로 평균을 출력하기 전에 배열이 완전히 채워질 때까지 기다려주십시오.

앱에 따라 첫 번째 단계로 3 단계를 수행 할 수 있지만 []의 요소는 항상 실제 존재하는 데이터라는 이점이 있습니다.
3), 1), 2) 단계는 순진한 시각에서 조금 나아졌습니다.

관련 문제