Part 1) 재귀 필터 - Ch1. 평균 필터

Speedwell🍀·2022년 10월 31일
1
post-thumbnail

재귀 필터 세 종류

  1. 평균 필터
  2. 이동평균 필터
  3. 저주파 통과 필터

➡️ 이 필터들은 신호 처리 분야에서 굉장히 많이 쓰이는 기본 필터들



1. 평균 필터

배치식(batch expression)
: 데이터를 모두 모아서 한꺼번에 계산하는 식

  • 예) 평균 계산하는 식

    • 평균의 정의대로 계산한다면, 데이터가 하나 추가되면 모든 데이터를 다시 더한 후 나눠줘야 한다.
      => 이전 결과(앞서 계산한 평균)를 다시 활용하는 재귀식(recursive expression)이 아니다.

평균을 구하는 간단한 수식을 재귀식으로 바꿔보자!


1-1) 평균의 재귀식

재귀식의 장점

  • 재귀식은 이전 결과를 재사용하기 때문에 계산 효율이 좋다!
  • 메모리 저장공간의 측면에서도 재귀식이 더 유리하다.
    • 모든 데이터를 저장할 필요 X
    • 이전 평균값, 추가된 데이터, 데이터 개수만 저장하면 됨


평균의 재귀식 정의

평균 필터 (averaging filter)

위의 식을 아래와 같이 정리한 형태를 평균 필터라고 부른다.

평균 필터는 평균 계산 외에 센서 초기화에도 유용하게 쓰인다.

예) 디지털 체중계의 무게 센서는 영점이 계속 바뀐다. 
따라서 전원을 켜면 처음에는 일정 시간 동안 센서의 출력값을 모아서 평균을 내고, 이 값을 영점으로 잡는 초기화 작업이 필요하다.


1-2) 평균 필터 함수

평균 필터를 구현한 AvgFilter 함수를 살펴보자.
이 함수는 데이터 x를 인자로 받아 평균을 반환!


AvgFilter 함수 호출이 끝난 다음에도 직전 평균값(prevAvg)데이터 개수(k)는 계속 보관해야 한다.
➡️ persistent 변수로 선언

  • Matlab에서 persistent 변수는 함수 호출이 끝난 뒤에도 값이 그대로 유지

AvgFilter 함수의 초기화

  • if문 내부의 persistent 변수 초기화는 AvgFilter 함수가 처음 호출될 때 한 번만 실행

  • 최초의 호출인지 아닌지는 isempty 내장 함수로 firstRun 변수가 비어있는지 테스트해보면 알 수 있다!

    • Matlab에서는 함수가 처음 실행될 때 persistent 변수가 비어있기 때문


1-3) 예제: 전압 측정

AvgFilter 함수를 검증하기 위해 테스트 프로그램을 만들어보자!

배터리의 전압을 측정하는데, 잡음이 심해서 잴 때마다 그 값이 달랐다.
그래서 일정 시간 동안 측정 데이터를 모아서 평균을 내보기로 했다.
전압은 0.2초 간격으로 측정한다.


아래는 측정 전압과 평균 필터의 출력값을 비교한 그래프이다.

측정 전압은 위아래로 변동이 심하지만, 평균 필터 출력의 추이는 안정되어 있다
데이터가 쌓여가면서 측정 잡음은 제거되고 차츰 원래의 평균 전압에 근접해 간다.
➡️ 이처럼 물리량의 측정값을 평균하면 잡음이 제거된다!



요약

  • 재귀식인 평균 필터를 사용하면 직전 평균값과 데이터 개수만 알아도 쉽게 평균을 구할 수 있다.
  • 특히 데이터가 순차적으로 입력되는 경우 평균 필터를 사용하면 데이터를 저장할 필요가 없고 계산 효율도 높다.
  • 만약 데이터를 실시간으로 처리해야 한다면 재귀식 형태의 필터가 필수
  • 실전에서는 재귀식 형태가 아닌 필터는 거의 쓸모가 없다고 말할 수 있다.
  • 평균을 취함으로써 잡음이 제거되는 효과가 있다.

참고)

평균의 재귀식 정의 그림 출처
평균 필터 그림 출처

0개의 댓글