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

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

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

댓글

이 블로그의 인기 게시물

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

바로 프로젝트 적용 가능한 FIR Filter (low/high/band pass filter )를 c나 python으로 만들기

간단한 cfar 알고리즘에 대해

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

python winsound를 이용한 윈도우 환경에서 소리 재생 예제