앞서 포스팅한 "이동평균 필터 - 이동평균의 재귀식 R 코드"와 동일한 예제를 통해 저주파 통과 필터의 성능을 검증해 보기로 하자. 위 이동평균 필터의 R코드에서 이동평균 필터 부분을 저주파 통과 필터로 바꾼 것 말고는 코드가 거의 같다.
rm(list = ls())
set.seed(123)
z = c(as.matrix(read.csv("SonarAlt.csv")))
alpha = 0.7
Nsamples = 500
Xsaved = rep(0, Nsamples)
Xmsaved = rep(0, Nsamples)
prevX = Xmsaved[1] = z[1];
for (n in 2:Nsamples)
{
xm = z[n];
xlpf = alpha*prevX + (1-alpha)*xm
prevX = xlpf;
Xsaved[n] = xlpf;
Xmsaved[n] = z[n];
}
dt = 0.02
t = seq(0, length = Nsamples, by=dt)
plot(t, Xmsaved)
points(t, Xsaved, col="red")
가중치를 조절하는 α를 값이 0.7인 상수로 지정했는데, 경우에 따라서는 실행 중에 바뀌기도 한다. 그리고 추정값이 초기에 측정값과 너무 동떨어지지 않도록, 직전 추정값(prevX)를 0 대신 첫 번째 측정 데이터로 초기화했다.
아래 그래프에 저주파 통과 필터의 추정값과 측정 데이터를 비교했다. 그래프를 보면 측정 데이터의 잡음이 잘 제거되고, 고도 변화 추이도 잘 나타나 있다. 시간 지연도 이동평균 필터보다 개선되었다.
그렇다고 저주파 통과 필터가 이동평균 필터보다 항상 시간 지연이 적은 것은 아니다. 측정 데이터의 특성에 알맞게 α를 선정했는지가 중요하다. 1차 저주파 통과 필터의 α는 이동평균 필터의 데이터 개수(k)와 비슷한 역할을 한다. 이 값으로 잡음 제거와 변화 추종 성능을 절충할 수 있다.
그럼 α에 따라 1차 저주파 통과 필터의 추정값이 어떻게 바뀌는지 알아보자. 다음 그림은 α=0.4와 α=0.9일 때 추정 값을 비교한 그래프이다. 전자는 빨간 색 선, 후자는 파란 색 선으로 표시하였다.
α가 작은 값이면 잡음이 더 많고, α가 크면 잡음이 줄어든 대신 시간 지연이 더 커졌다. 왜 이런 경향이 나타나는 것일까?
α가 작으면 1-α 값은 상대적으로 더 커진다. 따라서 추정값에 측정값이 더 많이 반영된다. 이렇게 되면 저주파 통과 필터는 잡음 제거보다는 측정값의 변화에 더 민감해진다. 그래서 α가 작을 때 추정값에 잡음이 더 많이 나타났던 것이다.
반대로 α가 크면 직전 추정값의 비중이 더 커진다. 그러면 추정값이 직전 추정값에서 별로 달라지지 않는다. α가 크면 잡음이 줄어들고 추정값 그래프의 변화가 무뎌지는 이유가 여기에 있다.
'노트 > Kalman Filter' 카테고리의 다른 글
칼만 필터 알고리즘 - 잡음의 공분산 (0) | 2016.04.30 |
---|---|
칼만 필터 알고리즘 - 시스템 모델 (0) | 2016.04.09 |
칼만 필터 알고리즘 - 예측 과정 (0) | 2016.04.01 |
칼만 필터 알고리즘 - 추정 과정 (0) | 2016.03.22 |
칼만 필터 알고리즘 - 개요 (0) | 2016.03.19 |
저주파 통과 필터 - 1차 저주파 통과 필터 (0) | 2016.03.14 |
이동평균 필터 - 이동평균의 재귀식을 사용할 때의 한계 (0) | 2016.03.14 |
이동평균 필터 - 이동평균의 재귀식 R 코드 (0) | 2016.03.14 |
이동평균 필터 - 이동평균의 재귀식 (0) | 2016.03.11 |
평균 필터 - 평균의 재귀식 R 코드 (0) | 2016.03.10 |