연속 시퀀스 데이터의 평균 공식

본 글은 연속 시퀀스 데이터의 평균 공식에 관한 내용을 싣고 있다.

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

댓글

이 블로그의 인기 게시물

간단한 cfar 알고리즘에 대해

windows에서 간단하게 크롬캐스트(Chromecast)를 통해 윈도우 화면 미러링 방법

간단한 칼만 필터(Kalman Filter) 소스 코드와 사용 예제

안드로이드(android) 전체 화면 시계 앱(clock app) 예제 코드

mkfs.fat Device or resource busy 에러 해결법