
저주파 통과 필터(low pass filter)
2019, Jun 22
- 출처 : 칼만필터는 어렵지 않아
- 저주파 통과 필터(low pass filter)는 이름 그대로 저주파 신호는 통과시키고 고주파 신호는 걸러내는 필터를 말합니다.
- 저주파 통과 필터는 노이즈 제거용으로 많이 사용되는데 대개 측정하려는 신호는 저주파이고 노이즈는 고주파 성분으로 되어 있기 때문입니다.
- 저주파 통과 필터는 특정 수식의 필터를 지칭하는 고유 명사가 아니라 저주파만 통과시키는 특성을 가진 모든 필터를 총칭하는 일반 명사입니다.
- 이번 글에서는 저주파 통과 필터 중에서 가장 간단한 1차(first order) 저주파 통과 필터만 다룰 예정입니다.
- 먼저 이동 평균 필터의 한계에 대하여 먼저 다뤄 보도록 하겠습니다.
- 이동 평균 필터를 실제로 사용해보면 노이즈를 제거하면서 변화 추이를 반영하는게 생각보다 쉽지 않을 수 있습니다.
- 그 이유는 다음 식을 보면서 설명드리겠습니다.
- ¯xk=xk−n+1+xk−n+2+⋯+xkn
- =1nxk−n+1+1nxk−n+2+⋯+1nxk
- 위 식을 보면 이동 평균 필터에서는 모든 데이터에 동일한 가중치 1/n을 부여합니다.
- 즉, 가장 최근의 데이터 xk와 가장 오래된 데이터 xk−n+1을 같은 비중으로 평균에 반영하는 것입니다.
- 타당한 이유가 있는 경우를 제외하면 시간에 따른 변화가 있는 데이터는 가장 최근에 있는 데이터가 가장 중요한 것은 의심의 여지가 없습니다.
- 자동차, 비행기 같이 빠르게 움직이는 물체의 입력값은 사실 10초전 1초전 데이터는 0.1초전 데이터에 비하면 의미가 거의 없을 수도 있습니다.
- 하지만 이동 평균은 모든 측정값에 동일한 가중치를 두고 처리합니다. 심지어 측정값의 변화가 클수록 이 약점은 더 두드러집니다.
- 따라서 이동평균필터를 변화가 심한 신호에 적용하면, 노이즈 제거와 변화 민감성을 동시에 달성하기가 어렵습니다.
- 그러면 최근 측정값에는 높은 가중치를 주고, 오래된 값일수록 가중치를 낮게 주면 어떻게 될까요??
1차 저주파 통과 필터
- 최근 측정값에 높은 가중치를 주는 방법으로 앞에서 언급한 1차 저주파 통과 필터가 있습니다.
- ¯xk=α¯xk−1+(1−α)xk (0<α<1)
- 이 식은 앞의 글 평균 필터에서 정의한 식과 동일 합니다.
- 평균 필터에서의 α=k−1k 였었습니다.
- 저주파 통과 필터에는 반면 평균과 전혀 상관없는 값입니다. 따라서 여기에서는 평균이라는 용어는사용하지 않고 추정값(estimated value)라는 용어를 쓰겠습니다.
- 그러면 추정값 xk가 과연 이동 평균 필터의 단점을 보완하는지 알아보겠습니다.
- ¯xk=α¯xk−1+(1−α)xk
- =α{α¯xk−2+(1−α)xk−1}+(1−α)xk
- =α2¯xk−2+α(1−α)xk−1+(1−α)xk
- 여기서 측정 데이터 xk−1,xk에 곱해진 계수 α,1−α를 비교해 보면
- 0<α<1 범위를 가지므로 α(1−α)<1−α의 관계가 성립합니다.
- 즉 최근 측정값 (xk)이 이전 측정값(xk−1) 보다 더 큰 가중치를 가지고 있음을 알 수 있습니다.
- 한 스텝 더 진행해 보도록 하겠습니다.
- ¯xk=α2¯xk−2+α(1−α)xk−1+(1−α)xk
- =α2{α¯xk−3+(1−α)xk−2}+α(1−α)xk−1+(1−α)xk
- =α3¯xk−3+α2(1−α)¯xk−2+α(1−α)xk−1+(1−α)xk
- 이 때, 각 계수의 관계는 α2(1−α)<α(1−α)<1−α 이므로 최근 값과 멀어질수록 값이 기하급수적으로 작아집니다.
- 이러한 가중치 차별화 덕분에 저주파 통과 필터는 노이즈 제거와 변화 민감성이라는 상충되는 요구를 이동평균 필터보다 더 잘 충족시킵니다.
- 그리고 위에서 살펴본 1차 저주파 통과 필터를 지수 가중 이동 평균 필터 라고 부르기도 합니다.
- 저주파 통과 필터의 식을 보면 파라미터 α는 어떻게 정해주면 될까요?
- 사실 이 값을 어떻게 정해주냐에 따라서 성능이 좋아질수도 나빠질수도 있습니다.
- 저주파 통과 필터의 α는 이동 평균 필터의 n과 역할이 유사합니다.
- 계수 α의 값에 따라서 어느 순간 부터는 값이 너무 작아져서 오래된 값은 무시 되기 때문에 n과 역할이 비슷하다고 생각하시면 됩니다.
- 그러면 α의 값은 어떻게 정하는 것이 좋은지 살펴보겠습니다.
- 결과적으론 α가 작으면 노이즈는 많지만 변화에 민감합니다.
- 반면 α가 크면 노이즈를 제거하지만 변화에 둔감합니다.
- 저주파 통과 필터 식은 ¯xk=α¯xk−1+(1−α)xk 입니다.
- 먼저 α가 작으면 상대적으로 1−α는 커지게 됩니다. 결국 추정값 계산에 측정값 xk가 더 많이 반영되게 됩니다.
- 이렇게 되면 저주파 통과 필터는 노이즈 제거보다는 측정값의 변화에 더 민감해집니다. 그래서 α가 작을 때 추정값에 노이즈가 더 많이 나타나는 것입니다.
- 반면에 α가 커지면 추정값(¯xk−1)의 비중이 더 커지게 되어 추정값이 직전 추정값과 크게 달라지지 않게 됩니다.
- 따라서 α가 크면 노이즈가 줄어들고 추정값 그래프의 변화가 무뎌지는 이유가 됩니다.
- 먼저 α가 작으면 상대적으로 1−α는 커지게 됩니다. 결국 추정값 계산에 측정값 xk가 더 많이 반영되게 됩니다.
저주파 통과 필터 코드
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차 저주파 통과 필터의 수식은 매우 단순하며 이동 평균 필터에 비해 좋은 특성을 가지고도 있습니다.
- 이 덕분에 측정 신호의 변화 추이를 이동평균 필터보다 더 잘 감지해 낼 수 있습니다.