전자/신호 및 시스템
이동평균 필터 프로그램 코드
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가 임의로 변하면 비정상적인 출력이 계속해서 나오고 시간이 지나도 정상적으로 회복되지 못한다.
반응형