전자/신호 및 시스템

이동평균 필터 프로그램 코드

Begi 2022. 5. 11. 20:09
반응형

이동평균 필터는 과거 데이터를 모두 더한 후 갯수만큼 나누면 된다. 하지만, 이러한 방법은 이동평균 윈도우 크기가 커지면 연산량이 매우 많아진다.

 

과거 데이터를 모두 더하지 않고도 다음과 같이 이동평균 필터를 구현할 수 있다. (윈도우 크기 100개)

 

    sum += input;          // 가장 최근 데이터
    sum -= buf[buf_idx];   // 가장 과거 데이터
    buf[buf_idx] = input;
    buf_idx++;
    if(buf_idx>=100) buf_idx = 0;
    output = sum / 100;

 

sum에 가장 과거 데이터를 빼고 가장 최근 데이터를 합하여 윈도우내의 데이터 합을 구한다.

 

이 방식은 buf에 들어있는 데이터의 합과 sum이 동일해야 한다. 만약 실행 도중 sum 값이나 buf가 임의로 변하면 비정상적인 출력이 계속해서 나오고 시간이 지나도 정상적으로 회복되지 못한다.

 

반응형