저주파 통과 필터(low pass filter)

저주파 통과 필터(low pass filter)

2019, Jun 22    



  • 출처 : 칼만필터는 어렵지 않아
  • 저주파 통과 필터(low pass filter)는 이름 그대로 저주파 신호는 통과시키고 고주파 신호는 걸러내는 필터를 말합니다.
  • 저주파 통과 필터는 노이즈 제거용으로 많이 사용되는데 대개 측정하려는 신호는 저주파이고 노이즈는 고주파 성분으로 되어 있기 때문입니다.
  • 저주파 통과 필터는 특정 수식의 필터를 지칭하는 고유 명사가 아니라 저주파만 통과시키는 특성을 가진 모든 필터를 총칭하는 일반 명사입니다.
    • 이번 글에서는 저주파 통과 필터 중에서 가장 간단한 1차(first order) 저주파 통과 필터만 다룰 예정입니다.


  • 먼저 이동 평균 필터의 한계에 대하여 먼저 다뤄 보도록 하겠습니다.
  • 이동 평균 필터를 실제로 사용해보면 노이즈를 제거하면서 변화 추이를 반영하는게 생각보다 쉽지 않을 수 있습니다.
  • 그 이유는 다음 식을 보면서 설명드리겠습니다.
  •  ¯xk=xkn+1+xkn+2++xkn
  •  =1nxkn+1+1nxkn+2++1nxk
  • 위 식을 보면 이동 평균 필터에서는 모든 데이터에 동일한 가중치 1/n을 부여합니다.
    • 즉, 가장 최근의 데이터 xk와 가장 오래된 데이터 xkn+1을 같은 비중으로 평균에 반영하는 것입니다.
    • 타당한 이유가 있는 경우를 제외하면 시간에 따른 변화가 있는 데이터는 가장 최근에 있는 데이터가 가장 중요한 것은 의심의 여지가 없습니다.
  • 자동차, 비행기 같이 빠르게 움직이는 물체의 입력값은 사실 10초전 1초전 데이터는 0.1초전 데이터에 비하면 의미가 거의 없을 수도 있습니다.
  • 하지만 이동 평균은 모든 측정값에 동일한 가중치를 두고 처리합니다. 심지어 측정값의 변화가 클수록 이 약점은 더 두드러집니다.
  • 따라서 이동평균필터를 변화가 심한 신호에 적용하면, 노이즈 제거와 변화 민감성을 동시에 달성하기가 어렵습니다.
  • 그러면 최근 측정값에는 높은 가중치를 주고, 오래된 값일수록 가중치를 낮게 주면 어떻게 될까요??


1차 저주파 통과 필터


  • 최근 측정값에 높은 가중치를 주는 방법으로 앞에서 언급한 1차 저주파 통과 필터가 있습니다.
  •  ¯xk=α¯xk1+(1α)xk   (0<α<1)
  • 이 식은 앞의 글 평균 필터에서 정의한 식과 동일 합니다.
    • 평균 필터에서의 α=k1k 였었습니다.
  • 저주파 통과 필터에는 반면 평균과 전혀 상관없는 값입니다. 따라서 여기에서는 평균이라는 용어는사용하지 않고 추정값(estimated value)라는 용어를 쓰겠습니다.
  • 그러면 추정값 xk가 과연 이동 평균 필터의 단점을 보완하는지 알아보겠습니다.
  •  ¯xk=α¯xk1+(1α)xk
  •  =α{α¯xk2+(1α)xk1}+(1α)xk
  •  =α2¯xk2+α(1α)xk1+(1α)xk
  • 여기서 측정 데이터 xk1,xk에 곱해진 계수 α,1α를 비교해 보면
    •  0<α<1 범위를 가지므로 α(1α)<1α의 관계가 성립합니다.
  • 즉 최근 측정값 (xk)이 이전 측정값(xk1) 보다 더 큰 가중치를 가지고 있음을 알 수 있습니다.


  • 한 스텝 더 진행해 보도록 하겠습니다.
  •  ¯xk=α2¯xk2+α(1α)xk1+(1α)xk
  •  =α2{α¯xk3+(1α)xk2}+α(1α)xk1+(1α)xk
  •  =α3¯xk3+α2(1α)¯xk2+α(1α)xk1+(1α)xk
  • 이 때, 각 계수의 관계는 α2(1α)<α(1α)<1α 이므로 최근 값과 멀어질수록 값이 기하급수적으로 작아집니다.
  • 이러한 가중치 차별화 덕분에 저주파 통과 필터는 노이즈 제거와 변화 민감성이라는 상충되는 요구를 이동평균 필터보다 더 잘 충족시킵니다.
  • 그리고 위에서 살펴본 1차 저주파 통과 필터를 지수 가중 이동 평균 필터 라고 부르기도 합니다.


  • 저주파 통과 필터의 식을 보면 파라미터 α는 어떻게 정해주면 될까요?
  • 사실 이 값을 어떻게 정해주냐에 따라서 성능이 좋아질수도 나빠질수도 있습니다.
    • 저주파 통과 필터의 α는 이동 평균 필터의 n과 역할이 유사합니다.
    • 계수 α의 값에 따라서 어느 순간 부터는 값이 너무 작아져서 오래된 값은 무시 되기 때문에 n과 역할이 비슷하다고 생각하시면 됩니다.
  • 그러면 α의 값은 어떻게 정하는 것이 좋은지 살펴보겠습니다.


  • 결과적으론 α가 작으면 노이즈는 많지만 변화에 민감합니다.
  • 반면 α가 크면 노이즈를 제거하지만 변화에 둔감합니다.
  • 저주파 통과 필터 식은 ¯xk=α¯xk1+(1α)xk 입니다.
    • 먼저 α가 작으면 상대적으로 1α는 커지게 됩니다. 결국 추정값 계산에 측정값 xk가 더 많이 반영되게 됩니다.
      • 이렇게 되면 저주파 통과 필터는 노이즈 제거보다는 측정값의 변화에 더 민감해집니다. 그래서 α가 작을 때 추정값에 노이즈가 더 많이 나타나는 것입니다.
    • 반면에 α가 커지면 추정값(¯xk1)의 비중이 더 커지게 되어 추정값이 직전 추정값과 크게 달라지지 않게 됩니다.
      • 따라서 α가 크면 노이즈가 줄어들고 추정값 그래프의 변화가 무뎌지는 이유가 됩니다.


저주파 통과 필터 코드


class LPF:
    # 이전 스텝의 예측값
    prevX = 0
    
    # 측정값 x와 상수 알파를 입력 받아 low pass filter를 수행합니다.
    def lpf(self, x, alpha):
        # low pass filter 
        x_lpf = alpha * self.prevX + (1 - alpha)*x
        # 이전 스텝 값 갱신
        self.prevX = x_lpf
        return x_lpf      


  • 1차 저주파 통과 필터의 수식은 매우 단순하며 이동 평균 필터에 비해 좋은 특성을 가지고도 있습니다.
  • 이 덕분에 측정 신호의 변화 추이를 이동평균 필터보다 더 잘 감지해 낼 수 있습니다.