회원가입 ID/PW 찾기

1) 지식 창고는 본인이 작성한 콘텐츠(팁/노하우/리소스/강좌 등)을 무료 혹은 가상화폐인 납포인트를 통해 공유하는 공간입니다.
2) 본인이 작성한 콘텐츠에 대해서만 지식 창고에 등록할 수 있으며, 저작권에 위배되는 콘텐츠는 사전경고 없이 삭제될 수 있습니다.
3) 콘텐츠 구매 및 첨부파일 다운로드는 회원그룹 '연구원' 이상 가능하오니, 경험치를 쌓아 진급한 후에 이용 부탁드립니다.
4) 무료 콘텐츠의 본문은 구매절차 없이 즉시 이용할 수 있으며, 판매 납포인트가 있는 콘텐츠는 구매 후 이용할 수 있습니다.
5) 콘텐츠 판매에 따른 납포인트 수익은 지정한 비율(50%)에 따라 판매자에게 지급하며, 납포인트 수익을 통해 진급을 빨리할 수 있습니다.
6) 구매 후 평가를 하면 구매 납포인트의 20%를 돌려 드립니다.

콘텐츠 수 1,041
판매자 commidi 판매 납포인트 무료 평점 0점 / 총 0명 참여

안녕하세요 commidi 입니다 ...
맨날 뜨내기처럼 구경만 하고 다니다..."포인트가 없습니다" 라는 메시지를 보고 망연자실해 있다가.
글을 조금은 써야 할듯 해서..이렇게 올려봅니다.
질답란은 열심히 활동하시는 분들이 많아서 제가 껴들..자리가 없는거 같고..ㅡㅡ

어치든 간에 한번 올려봅니다...게시판의 내용에 맞지 않으면 운영자님께서 다른 곳으로 옮겨주셔도 좋습니다.

* AD(Analog to Digital)컨버팅을 위한 칼만필터의 사용 *

보통 센서류를 하다보면...AD컨버터를 사용하게 될 경우가 상당히 많습니다. 왜냐면 센서들이 일반적으로
저항, 전압, 전류 등의 형태로 아웃풋을 출력하는 경우가 많거든요..
물론 통신으로 센서값을 출력해 주는 센서들도 있지만 제가 생각하기에는 80%이상은 아날로그값으로
출력하는 합니다..(주관적인 생각임..ㅡㅡ) 이런 점에서 AD컨버터가 상대적으로 중요한 부분을 차지한다고 볼 수 있습니다.

그런데 마이컴등에서 AD값을 받다보면 이런 저런 이유에서(레퍼런스 전압의 문제, 시스템 전압의 흔들림..등등) 획득된
AD값이 상당히 많이 흔들리게 됩니다. 좀 전문용어를 사용하면 노이즈가 생긴다고 하죠..
이런 노이즈를 제거하기위해서 하드웨어적으로는 Low Pass필터를 사용하기도 하고 소프트 웨어적으로는 IIR(recursive), FIR(NonRecursive)등의 방식의 디지틀 필터를  많이 사용하기도 하죠..(함께 사용하기도 하구요)

여기에서는 디지틀 필터중에 IIR계열의 Kalman필터를 사용하는 방법을 말씀드리겠습니다.
여러분들 께서 아직 AD컨버터를 사용하시면서 필터를 사용하고 있지 않으시다면 사용하시기를 추천드립니다.

거두절미하고, Kalman 필터를 공부하려면 확률에 대한 기본적인 지식이 있으셔야 이해에 도움이 될 수 있습니다.
확률부분이나 랜덤변수등을  지면에서 설명하면 답이 나오지 않아서..ㅡㅡ 싹 줄이고..정확히 AD컨버터에 칼만
필터를 사용하는 부분만 알려드리도록 하겠습니다. 물론 칼만필터가 AD컨버팅용 필터로만 사용되는건 아니고
로봇의 위치추정이나 SLAM등 여러분야에 골고루 사용되고 있습니다. 

더 자세한 내용은 아래 링크를 참고하시면 되겠습니다.
http://www.cs.unc.edu/~welch/media/pdf/kalman_intro.pdf

우선 그림을 보시면 칼만필터는 "Predict"(예측)부분과 "Correct"(정정) 부분으로 크게 나뉩니다.
우선 예측 부분의 1식에서 A는 시스템과 관련된 부분인데 그냥 1로 두시면 되겠습니다.
즉 예측값 x-는 이전 값과 같다고 생각하는 겁니다. 그 다음에 입력 Uk 부분은 0으로 생각하시면 되겠습니다.
단순히 여기서는 필터로 사용하려고 하기 때문에 이렇게 했다라고 생각하시면 되겠습니다.
에러에 대한 공분산값인 Pm- 는 좌측의 2식에서 구해집니다. 여기에서 Q값은 화이트 노이즈를 표현하는 내용 이라고
생각하시면 됩니다. A는 원래 행렬이지만 여기에서는 1을 사용하시면 됩니다.
즉  Pk- = P(k-1)- + Q 라고 생각하시면 되겠습니다.

이렇게 구해진 xk- 와 Pk- 값을 가지고 오른쪽 Correct 부분으로 넘어옵니다.
오른쪽 첫번째식에서 칼만게인 Kk 값이 구해지게 됩니다. Pk-는 위에서 구한 값을 사용하면 되고
H도 행렬인데 여기도 1로 사용을 하시면 되겠습니다. (HT는 H의 트랜스포즈 메트릭슨데 이것도 1이겠죠?)
다시 정리하면 Kk = Pk- / (Pk- + R ) 이 되겠습니다. 여기에서 R은 시스템 노이즈를 표현하는 값이 되겠습니다.
이렇게 Kk를 구하고 나면 드디어 필터가 적용된 값을 구할 차례 입니다.
아까도 말씀드렸다시피 H = 1 을 넣으시면 됩니다. Zk 는 측정된 값을 의미 합니다. 즉 다시말하면 여러분들이
AD컨버팅으로 획득한 값을 의미 합니다. xk- 는 predict 부분에서 구해진 값 입니다.
다시 적으면 xk = xk- + Kk(zk - xk-) => 텍스트로만 했더니 식이 좀 이상하게 보이네요..(zk 다음의 - 는 마이너스고
xk- 는 한문자로 생각하시면 됩니다. ㅡㅡ)  => 그림의 식을 잘 보세요.;
그럼 필터링된 x값을 구했구요..다음3번식은 "predict"식에서 사용한 Pk값을 구하는 부분입니다. I 는 단위행렬이므로
1 을 사용하시면 됩니다.

이렇게 구해진 Pk, xk를 구해서 왼쪽의 Predict식에 넣어서 계속 반복하시면 됩니다.  R값과 Q값을 어떻게
셋팅하느냐에 따라서 필터의 특징이 달라지게 됩니다. 간단히 C에서 구현하는 방법을 그림의 밑에 보입니다.


뭘 잘 못했는지 그림이 잘 첨부가 안되는 군요...우선 첨부파일을 보시면 되겠습니다.


#define Q    0.00001
#define R    0.001

float g_xPredict ;
float g_x ;
float g_PPredict ;
float g_P ;
float g_K ;
float g_z ;

float calcKalman( float a_MeasuredValue )
 {
        float l_z ;
        // predict..
        g_xPredict=g_x;
        g_PPredict=g_P + Q;
        // predict..

       
        // Correct..
        g_K=g_PPredict/(g_PPredict + R);
        l_z=a_MeasuredValue ;
        g_x=g_xPredict+g_K*(l_z-g_xPredict);
        g_P=(1 - g_K)*g_PPredict;
        return g_x ;
        // Correct..
}

테스트한 결과값은 동영상으로 보여드리겠습니다.
음 동영상은 용량 제한때문에 안될거 같습니다..ㅡㅡ   2.2MB ...
그냥 첨부파일로..올립니다.
빨간색 선은 Raw데이터구요...노란색선이 필터링된 값 입니다.


그럼 이만.

항상 행복하세요....


profile
빛나는 영혼 2007.10.15 15:08
우어우어 좋은자료 감사해요.
profile
행복하면 2007.10.15 18:45
움.. 무슨 말인지는 잘 이해가 되지 않지만.. ㅋㅋ

감사합니다.. ㅋ
profile
아크마 2007.10.17 02:49

오 올만에 좋은 자료가 올라왔네요..ㅋㅋ 자료 감사합니다. 이건 대체 어느 카테고리로 보내야할지 난감합니다;;

제어관련 책에서 자주등장하는 칼만필터....언제나 먼 당신~ㅋㅋ

profile
마이돌이 2007.10.22 11:17

좋은 자료 감사합니다.. 그런데 첨부한 그림이 안나오네요..

profile
환상 2007.12.09 20:43
어버버버버버버버버버 +_+

눈을 빛내며 해당글을 보고 열심히 스터디중입니다~ 감사합니다 적용해볼게요~
profile
환상 2007.12.09 23:28
사진을 보고싶은데... 다운권한이 없다네요 ㅠ
profile
아크마 2007.12.10 00:19
없나요?? 버그인가...음..ㅠㅠ 확인해보겠습니다.

profile
환상 2007.12.10 01:34
앗! 감사감사~ ^^ 꼭 보고~ 싶어요~ 큭.
profile
아크마 2007.12.10 01:45

헛 자주 들어오시는 지옥을 보여드리겠습니다. 사진대신.ㅋ. 절 따라오세요 고고

profile
아크마 2007.12.10 02:04

한글파일명 버그인가보군요..한글 파일만 안되네요^^ 으하핫;;

profile
환상 2007.12.10 02:23
헉헉헉!! commidi 님에게 재업요청을 해야겠어요~ 후훗
profile
commidi 2007.12.10 02:43
두세네..번째 파일들은...그냥..실험결과 파일이니깐...안보셔도 이해 하시는데는..지장 없으실거 같은데요..?
링크된 문서파일을..다운받아보시면...아주 자세한 내용을 아실 수 있습니다..^^:
profile
환상 2007.12.10 17:47
허접하지만 결과자료 동영상 첨부했어요 ^^;;;
profile
jino 2007.12.14 10:27

감사합니다.....

profile
탱이뭉아 2007.12.23 09:27

감사 합니다 ~~^^

profile
이상수 2008.05.27 00:28
와... 잘 볼게요
profile
수줍은머리칼 2008.07.15 11:30
좋은 자료 감사합니다.. 근데 넘 어렵다는..ㄷㄷ
profile
고나영 2008.10.15 11:31
RS-232랑 ADC 좀 배워야 하는데 정보 감사합니다.
비록 뭔말인지는;; ㅋㅋ
profile
바람이고픈 2008.10.21 08:05
어렵네요,,,
profile
buffett 2008.11.10 00:17
이번에 시작했는데 이해하려면 시간좀 투자해야겠네요.^^
profile
우앙 2008.11.11 12:05
감사합니다
profile
꿀꿀 2008.11.19 17:30
좋은정보 감사요  ~! ㅋ
profile
김뱅 2008.12.09 22:16
감사합니ㅏ.
profile
천류향 2009.09.09 00:18
칼만 필터....... ;; 박사 학위 논문 꺼리도 되는 녀석..... 이해 안돼 ㅠㅠ
profile
초초롱보 2009.10.14 19:50
좋은정보 감사합니다.
profile
별보는아이 2009.11.24 18:25
궁금증만 많을뿐 이건  참 ;;;; ㄷㄷㄷ
profile
김코더 2009.12.16 10:14
잘 보았습니다.
profile
tiger2 2009.12.17 13:31
좋은 정보 감사합니다.^^
profile
엄친아 2010.01.01 19:23
이거 어려운 내용같아용..
profile
고고바 2010.01.16 20:12
감사합니다 잘봤습니다
profile
순정이 2010.02.02 14:03
감사합니다.
profile
좋지 2010.02.02 17:37
감사합니다....
profile
좋지 2010.02.04 08:40
감사합니다...
profile
좋지 2010.02.06 00:10
감사..^^
profile
전국대표이사 2010.04.01 15:34
역시 많은 공부가 되고 공부가 필요한 곳이네요 ㅎㅎ
profile
호댕이 2010.04.08 10:44
우와-감사합니다^^
profile
졸업하자 2010.04.29 00:07
감사합니다^^
profile
버섯 2010.05.01 14:43
감사합니다.^^
profile
도리형 2010.06.01 11:19
감사합니다.^^
profile
나청주산다 2011.02.10 23:04

감사합니다.~

profile
컴쟁이 2012.06.22 00:06
감사요...
profile
에어런 2014.01.18 21:56
좋은감사드립니다!
profile
시나브로69 2017.06.24 15:23
좋은 자료 감사합니다.
search
List of Articles
번호 분류 제목 평점 포인트 판매자 등록일 구매수 조회 수
공지 공공의 목적으로 공유하고자 하는 소프트웨어는 '소프트웨어 자료실'에 업로드를 요청드립니다.
공지 구매후 평점 댓글을 남겨주시면 구매포인트의 20%를 돌려드립니다.
241 마이크로프로세서 BIM433 과 8051 회로도 [4] 무료 리숙 2007-10-21 0 7065
240 마이크로프로세서 마이크로프로세서란? [23] 무료 라이언상병 2007-10-20 0 5482
239 마이크로프로세서 ISP(In System Programming) GENDER 회로도입니다. [4] 무료 아크마 2007-10-19 0 3618
» 마이크로프로세서 맨날 구경만 하다가..(AD컨버팅을 위한 Kalman Filter) [43] 무료 commidi 2007-10-15 0 7003
237 펌웨어 & 코딩언어 아스키표(ASCII TABLE) [4] 무료 나니오 2007-10-13 0 1635
236 펌웨어 & 코딩언어 네트워크 기본용어 정리 [5] 무료 나니오 2007-10-13 0 1755
235 머신러닝, AI & 알고리즘 Java를 이용한 정렬 알고리즘(쉘) [1] 무료 나루 2007-10-11 0 3877
234 머신러닝, AI & 알고리즘 Java를 이용한 정렬 알고리즘(삽입) [2] 무료 나루 2007-10-11 0 3758
233 머신러닝, AI & 알고리즘 Java를 이용한 정렬 알고리즘(교환) [1] 무료 나루 2007-10-11 0 3003
232 머신러닝, AI & 알고리즘 Java를 이용한 정렬 알고리즘(선택) [5] 무료 나루 2007-10-11 0 2785
231 펌웨어 & 코딩언어 c언어 기초명령어 모음 [47] 무료 라이언상병 2007-10-10 0 6996
230 펌웨어 & 코딩언어 리눅스 기본명령 초보강좌 [5] 무료 라이언상병 2007-10-10 0 1643
229 마이크로프로세서 영상처리 자료입니다. [7] 무료 챠리스만 2007-10-09 0 4134
228 마이크로프로세서 초음파 센서 사용하기 [19] 무료 땡중 2007-10-09 0 5054
227 마이크로프로세서 초음파 센서 srf-04 제어에 관한 내용과 생각 [9] 무료 아크마 2007-10-08 0 4656
226 펌웨어 & 코딩언어 Visual C++을 이용한 시리얼 통신 [23] 무료 뺘쑝 2007-10-06 0 6292
225 마이크로프로세서 IDE to CF 변환회로도 [2] 무료 나임 2007-10-06 0 3967
224 마이크로프로세서 전자 자물쇠(비밀번호) 만들기 [8] 무료 뺘쑝 2007-10-04 0 5732
223 마이크로프로세서 도트매트릭스(dot matrix) 회로도 [9] 무료 아크마 2007-10-04 0 7151
222 펌웨어 & 코딩언어 [ 영문판 번역 ] Visual C++ " CView " [4] 무료 뺘쑝 2007-10-03 0 1259
  • 한 나라가 위대한 작가를 가진다는 것은 제2의 정부를 가지는 것과 같이 위험한 일이다.
    - 솔제니친
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.