본문 바로가기
Control system engineering

[제어시스템공학-6] Kalman Filter(칼만필터) 구현 - 쉬운예제

by 노마드공학자 2021. 1. 28.

[제어시스템공학-1] Average Filter(평균필터) https://limitsinx.tistory.com/69

[제어시스템공학-2] Moving Average Filter(이동평균필터) https://limitsinx.tistory.com/70

[제어시스템공학-3] Low Pass Filter(저주파  통과필터) https://limitsinx.tistory.com/71

[제어시스템공학-4] Kalman Filter(칼만필터) 개념정리(1) https://limitsinx.tistory.com/72

[제어시스템공학-5] Kalman Filter(칼만필터) 개념정리(2) https://limitsinx.tistory.com/73

 

※이 전글에서 정리한 코드/문법은 재설명하지 않으므로, 참고부탁드립니다

※해당 글은 PC에서 보기에 최적화 되어있습니다.


앞의 칼만필터 개념 2부작을 통해, 칼만필터의 이론적 과정에 대해 한번 정리를 해보았는데요

이번에는 이 개념들을 코드로 정리하여 예제를 한번 구현해보는 방식으로 진행해보겠습니다.

 

Input value

 

요번에 구현해볼 예제는 간단합니다.

 

평균이 10이고 Noise를 많이주어 이리저리 튀는값들을 칼만필터를 통해 정리를 해보는 코드입니다.

 

칼만필터를 적용한 결과값은 아래와 같이 나옵니다.

 

Kalman Filter 결과값

 

아주아주 잘 추종하는 모습을 보여줄 수 있습니다.

 

이제 이것을 어떻게 구현했는지 코드분석을 진행해볼텐데요

 

코드분석이랄것도 없는게, 칼만필터 수식을 그대로 "타이핑" 해주었을 뿐입니다.

 

칼만필터는 어렵지않아(2019,김성필)


[코드분석-1]

해당글부터 보시는 분들은 이전 "칼만필터 개념정리2부작" 글을 읽고 와주시기 바랍니다.

(글 상단부 링크)

 

제가 개념설명에서 언급했던대로 정말 간단하지 않나요??

위의 수식들을 정말 그대로 "옮겨놓은것" 뿐입니다.

해당 코드는 칼만필터의 x추정값, 오차공분산추정값, Kalman gain, x추정값, 오차공분산예측값을 얻는 본체입니다.

 

 

[코드분석-2]

 

Input으로 주는 데이터입니다.

 

평균10에 +-5정도의 오차가 랜덤하게 생기도록 구현한 코드입니다.

 

 

[코드분석-3]

1초간격으로 100초간의 노이즈를 가진 input data를 칼만필터를 통과시키고, plotting까지 하는 코드 Main부입니다.

 


이번에 구현한 예제는

 

"Average Filter"로도 구현가능한, 간단한 예제였습니다.

 

다음글에서는 "Moving Average"만이 구현가능했던 문제에 대해 칼만필터는 어떻게 쫓아가는지 구현해보도록 하겠습니다.

 

 

※ 참고

"칼만필터는 어렵지 않아" (2019,김성필)

댓글