프로그래밍/기록, 개념, 용어

실시간으로 평균 값 구할 때 좋은, 평균 필터 알고리즘.

제페 2021. 4. 25. 12:03
반응형

실시간으로 들어오는 값들로 부터 실시간으로 평균 값을 계산할 때 유용.
이전 값들의 목록 또는 이전 값들의 총 누산 값들을 저장할 필요가 없다.

#include <iostream>

using namespace std;

/// @params prevAvgVal 이전 평균 값.
/// @params numSample 몇 번째 샘플인지.
/// @params sampleVal 샘플 값.
int avg(int prevAvgVal, int numSample, int sampleVal)
{   
    return (prevAvgVal * (numSample - 1) / numSample) + (sampleVal / numSample);
}

int main()
{
    int prevAvgVal = 0;
    int sample = 4;
    int totalAccVal = 0;
    
    for (int numSample = 1; numSample <= sample; ++numSample)
    {
        const int sampleVal = numSample * 100;
        const int avgVal = avg(prevAvgVal, numSample, sampleVal);
        
        totalAccVal += sampleVal;
        
        cout << "sample: " << numSample << endl;
        cout << "sampleVal: " << sampleVal << endl;
        cout << "avgVal: " << avgVal << endl;
        
        cout << endl;
        
        prevAvgVal = avgVal;
    }
    
    // 일반적으로 평균 구하는 방법과 비교를 위해 찍어 봄.
    cout << "avgVal: " <<  totalAccVal / sample << endl;
    
    return 0;
}

 

결과는 아래와 같이 나온다.

아래 링크한 글이 이해하기 쉽게 정리 됨.

실시간 데이터의 평균을 효율적으로 구하기 | Evans Library (evan-moon.github.io)

 

실시간 데이터의 평균을 효율적으로 구하기

이번 포스팅에서는 실시간으로 빠르게 쌓이는 데이터들의 평균을 효율적으로 구할 수 있는 방법에 대해서 간단하게 설명하려고 한다. 이런 실시간 데이터의 평균을 구해야하는 경우는 생각보

evan-moon.github.io

 

반응형