재귀 필터 세 종류
➡️ 이 필터들은 신호 처리
분야에서 굉장히 많이 쓰이는 기본 필터들
배치식(batch expression)
: 데이터를 모두 모아서 한꺼번에 계산하는 식
예) 평균 계산하는 식
재귀식(recursive expression)
이 아니다.평균을 구하는 간단한 수식을 재귀식으로 바꿔보자!
위의 식을 아래와 같이 정리한 형태를 평균 필터라고 부른다.
평균 필터는 평균 계산 외에 센서 초기화
에도 유용하게 쓰인다.
예) 디지털 체중계의 무게 센서는 영점이 계속 바뀐다.
따라서 전원을 켜면 처음에는 일정 시간 동안 센서의 출력값을 모아서 평균을 내고, 이 값을 영점으로 잡는 초기화 작업이 필요하다.
평균 필터를 구현한 AvgFilter
함수를 살펴보자.
이 함수는 데이터 x를 인자로 받아 평균을 반환!
AvgFilter
함수 호출이 끝난 다음에도 직전 평균값(prevAvg)과 데이터 개수(k)는 계속 보관해야 한다.
➡️ persistent 변수로 선언
AvgFilter
함수의 초기화
if문 내부의 persistent 변수 초기화는 AvgFilter 함수가 처음 호출될 때 한 번만 실행
최초의 호출인지 아닌지는 isempty
내장 함수로 firstRun
변수가 비어있는지 테스트해보면 알 수 있다!
AvgFilter
함수를 검증하기 위해 테스트 프로그램을 만들어보자!
배터리의 전압을 측정하는데, 잡음이 심해서 잴 때마다 그 값이 달랐다.
그래서 일정 시간 동안 측정 데이터를 모아서 평균을 내보기로 했다.
전압은 0.2초 간격으로 측정한다.
아래는 측정 전압과 평균 필터의 출력값을 비교한 그래프이다.
측정 전압은 위아래로 변동이 심하지만, 평균 필터 출력의 추이는 안정되어 있다
데이터가 쌓여가면서 측정 잡음은 제거되고 차츰 원래의 평균 전압에 근접해 간다.
➡️ 이처럼 물리량의 측정값을 평균하면 잡음이 제거된다!
참고)