연속 시퀀스 데이터의 평균 공식
본 글은 연속 시퀀스 데이터의 평균 공식에 관한 내용을 싣고 있다.
signal processing 기능 구현 시 데이터의 평균을 필요로 하는 경우가 많다. 기능
구현 시 전체 데이터를 모아 그냥 평균을 낼 수도 있으나, 임베디드 시스템 같이
메모리가 한정적이고, 프로세서의 성능이 좋지 않은 경우 전체 성능에 안 좋은
영향을 줄 수도 있다. 아래의 평균 공식을 사용하면, 별도로 전체 데이터를 모으지
않아도 되고 그때 그때 누적데이터의 평균을 구할 수 있다.
n번째 데이터의 평균
X'(n) = (X1 + X2 + ......+ Xn)/n = (X'(n - 1)*(n - 1) + Xn) / n
위 공식은 아래 처럼 간단하게 구현할 수 있다.
class cautomean
{
private:
double m_mean;
int m_n;
public:
cautomean(){ m_mean = 0; m_n = 0;
}
~cautomean(){}
double put(double data)
{
if (m_n == 0)
{
m_mean = data;
m_n = 1;
}
else
{
m_n++;
m_mean = (m_mean*(m_n - 1) +
data) / m_n;
}
return m_mean;
}
};
위 class를 아래와 같이 테스트 하면,
cautomean automean;
double dmean = 0;
for(int i = 1; i <= 10; i++)
{
dmean = automean.put(i);
}
_trace(TEXT("automean %g\n"), dmean);
_trace(TEXT("(1~10) mean %g\n"), (1+2+3+4+5+6+7+8+9+10)/10.0);
실행 결과는 아래와 같다.
automean 5.5
(1~10) mean 5.5
댓글
댓글 쓰기