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

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

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)를 통해 윈도우 화면 미러링 방법

아두이노(arduino) 심박센서 (heart rate sensor) 심박수 측정 example code

Eigen 라이브러리 matrix 사용법

카메라 인터페이스 MIPI CSI에 관하여