बुनियाद से Kalman Filter सीखें
(kalmanfilter.net)- Kalman Filter एक ऐसा algorithm है जो measurement noise और अज्ञात बाहरी कारकों वाले सिस्टम में वर्तमान state का अनुमान लगाता है और भविष्य की भविष्यवाणी करता है; इसका उपयोग tracking, navigation, robotics और control जैसे क्षेत्रों में होता है
- 1D radar उदाहरण में विमान की दूरी (r) और वेग (v) मापे जाते हैं, और state vector (\boldsymbol{x}=[r, v]^T) तथा covariance matrices (\boldsymbol{P}, \boldsymbol{R}, \boldsymbol{Q}) के साथ state और uncertainty दोनों को एक साथ संभाला जाता है
- शुरुआती measured values दूरी 10,000m और वेग 200m/s हैं, और 5 सेकंड के sampling interval तथा constant-velocity model को लागू करने पर अगली predicted position 11,000m बनती है
- prediction चरण में state transition matrix (\boldsymbol{F}) से state को propagate किया जाता है, और (\boldsymbol{F}\boldsymbol{P}\boldsymbol{F}^T+\boldsymbol{Q}) से covariance निकाला जाता है, जिससे velocity uncertainty और process noise के कारण position uncertainty बढ़ने का असर शामिल होता है
- update चरण में नई measurement को न पूरी तरह मान लिया जाता है, न पूरी तरह छोड़ा जाता है; Kalman Gain के जरिए prediction और measurement को weighted तरीके से मिलाकर estimate की uncertainty घटाई जाती है, और इसके बाद filter prediction और update को दोहराता रहता है
Kalman Filter किस समस्या को हल करता है
- Kalman Filter uncertainty वाले सिस्टम में state estimation और future prediction करने वाला algorithm है
- यह उन स्थितियों को संभालता है जहाँ measurement noise हो या अज्ञात बाहरी कारक सिस्टम को प्रभावित कर रहे हों
- object tracking, navigation, robotics और control में यह एक core tool की तरह इस्तेमाल होता है
- computer mouse trajectory estimation में यह hand tremor और noise को कम करके अधिक stable movement path बना सकता है
- financial market analysis में यह noisy market data से stock price trend पहचानने में, और weather domain में मौसम पूर्वानुमान में उपयोग किया जाता है
- यह tutorial जटिल गणित को पहले रखने के बजाय numerical examples से intuition बनाने का तरीका अपनाता है
- इसमें यह भी शामिल है कि गलत तरीके से डिज़ाइन किया गया Kalman Filter किसी वस्तु को सही तरह track नहीं कर पाता
- लक्ष्य यह है कि पाठक concepts और mathematics को समझकर खुद design और implementation कर सके
सीखने का मार्ग
- दिया गया learning path तीन चरणों में बँटा है
- single-page overview: इसमें core concepts और आवश्यक equations को derivation के बिना समझाया गया है, और basic statistics व linear algebra का ज्ञान मान लिया गया है
- free example-based web tutorial: tutorial में numerical examples से intuition बनाया जाता है और Kalman Filter equations की derivation तक step-by-step ले जाया जाता है
- पुस्तक: Kalman Filter from the Ground Up में 14 पूरी तरह हल किए गए numerical examples, performance graphs और tables, Extended Kalman Filter और Unscented Kalman Filter, sensor fusion, तथा implementation guidelines शामिल हैं
radar tracking में prediction क्यों ज़रूरी है
- radar को विमान track करने के लिए एक narrow beam को बार-बार target की दिशा में aim करना पड़ता है, इसलिए अगला beam भेजते समय future position का prediction ज़रूरी होता है
- prediction विफल होने पर beam गलत दिशा में जा सकता है और tracking खो सकती है
- इसके लिए ऐसा dynamic model चाहिए जो बताए कि विमान समय के साथ कैसे चलता है
- सरल 1D उदाहरण में सिर्फ विमान की वह सीधी रेखा वाली गति मानी जाती है जिसमें वह radar की ओर आ रहा हो या उससे दूर जा रहा हो
- state को radar से दूरी (r) के रूप में परिभाषित किया जाता है
- radar pulse के भेजने-लेने के समय और प्रकाश की गति का उपयोग करके दूरी (r) निकालता है
- Doppler effect का उपयोग करके velocity (v) भी मापी जा सकती है
- मान लें कि (t_0) पर दूरी 10,000m और velocity 200m/s को बहुत ऊँची accuracy और precision के साथ मापा गया
- sampling interval (\Delta t=5s) है
- constant-velocity model में displacement (\Delta r=v\cdot\Delta t) होता है
- predicted position (10,000+200\cdot5=11,000m) होगी
measurement noise और process noise
- वास्तविक radar measurements perfect नहीं होते; एक ही समय पर एक ही विमान को कई radars मापें तो परिणाम थोड़ा अलग आ सकता है
- यह बदलाव measurement noise के कारण होता है
- सिर्फ estimate ही नहीं, बल्कि estimate कितना भरोसेमंद है, यह भी साथ में निकालना पड़ता है
- dynamic model भी वास्तविक motion को पूरी तरह नहीं समझा पाता
- भले ही मान लें कि विमान constant velocity से चल रहा है, हवा जैसे बाहरी कारक वास्तविक motion बदल सकते हैं
- ऐसे unpredictable प्रभावों को process noise से मॉडल किया जाता है
- Kalman Filter current state estimate, future state prediction, और दोनों की uncertainty एक साथ देता है
- इसे state estimation uncertainty को न्यूनतम करने वाले optimal algorithm के रूप में प्रस्तुत किया जाता है
radar उदाहरण में state representation और initialization
- उदाहरण में सिस्टम की state एक vector है जिसमें विमान की दूरी (r) और velocity (v) शामिल हैं
[ \boldsymbol{x}=\left[\begin{matrix}r\v\\end{matrix}\right] ]
- vectors को lowercase bold और matrices को uppercase bold में लिखा जाता है
- Kalman Filter को पहली measurement से initialize किया जाता है
- (t_0) पर measured values दूरी 10,000m और velocity 200m/s हैं
- measurement vector इस प्रकार है
[ \boldsymbol{z}_0=\left[\begin{matrix}10{,}000\200\\end{matrix}\right] ]
- measured values exact system state नहीं, बल्कि noise से प्रभावित random variables हैं
- distance measurement का standard deviation (4m) है
- velocity measurement का standard deviation (0.5m/s) है
- variance standard deviation का square होता है, इसलिए measurement covariance matrix (\boldsymbol{R}_0) इस प्रकार है
[ \boldsymbol{R}_0=\left[\begin{matrix}16&0\0&0.25\\end{matrix}\right] ]
- इस उदाहरण में माना गया है कि distance और velocity measurement errors आपस में संबंधित नहीं हैं, इसलिए covariance matrix के off-diagonal elements को 0 रखा गया है
- initialization के समय केवल एक measurement होती है, इसलिए measurement को initial state estimate के रूप में इस्तेमाल किया जा सकता है
[ \boldsymbol{\hat{x}}_{0,0}=\boldsymbol{z}_0=\left[\begin{matrix}10{,}000\200\\end{matrix}\right] ]
- यह तरीका केवल initialization चरण में ही संभव है
prediction चरण: state और covariance propagation
- अगली state की prediction के लिए constant-velocity dynamic model का उपयोग किया जाता है
[ v_1=v_0=v ]
[ r_1=r_0+v_0\Delta t ]
- matrix form में state prediction इस प्रकार है
[ {\hat{\boldsymbol{x}}}{1,0}=\boldsymbol{F}{\hat{\boldsymbol{x}}}{0,0} ]
- (\boldsymbol{F}) state transition matrix है, और (\Delta t=5s) होने पर prediction परिणाम यह है
[ {\hat{\boldsymbol{x}}}_{1,0}
\left[\begin{matrix}1&5\0&1\\end{matrix}\right] \left[\begin{matrix}10,000\200\\end{matrix}\right]
\left[\begin{matrix}11,000\200\\end{matrix}\right] ]
- सामान्य state extrapolation, यानी prediction equation, इस प्रकार है
[ {\hat{\boldsymbol{x}}}{n+1,n}=\boldsymbol{F}{\hat{\boldsymbol{x}}}{n,n}+\boldsymbol{G}\boldsymbol{u}_n ]
- (\boldsymbol{u}_n) input variable है
- (\boldsymbol{G}) input transition matrix है
- इस उदाहरण में कोई input नहीं है, इसलिए (\boldsymbol{u}_n=0)
- covariance को केवल (\boldsymbol{F}\boldsymbol{P}) से नहीं निकाला जाता
- क्योंकि covariance में variance और covariance के squared terms शामिल होते हैं
- जब process noise न हो, तब covariance extrapolation equation यह है
[ \boldsymbol{P}{n+1,n}=\boldsymbol{F}\boldsymbol{P}{n,n}\boldsymbol{F}^T ]
- उदाहरण में initial covariance (\boldsymbol{P}_{0,0}) को propagate करने पर परिणाम यह मिलता है
[ \boldsymbol{P}_{1,0}
\left[\begin{matrix}22.25&1.25\1.25&0.25\\end{matrix}\right] ]
- velocity variance (0.25m^2/s^2) बनी रहती है
- distance variance (16m^2) से बढ़कर (22.25m^2) हो जाती है
- velocity uncertainty समय के साथ distance uncertainty में बदलती जाती है
process noise को शामिल करना
- केवल constant-velocity assumption से विमान की वास्तविक motion को पूरी तरह समझना कठिन है
- हवा जैसे अज्ञात बाहरी कारक velocity को प्रभावित कर सकते हैं
- ऐसे unpredictable प्रभावों को process noise (\boldsymbol{Q}) से व्यक्त किया जाता है
- process noise को शामिल करने वाली covariance prediction equation इस प्रकार है
[ \boldsymbol{P}{n+1,n}=\boldsymbol{F}\boldsymbol{P}{n,n}\boldsymbol{F}^T+\boldsymbol{Q} ]
- उदाहरण में random acceleration का standard deviation (\sigma_a=0.2m/s^2) माना गया है
- variance (\sigma_a^2=0.04m^2/s^4) है
- (\Delta t=5s) पर process noise matrix यह है
[ \boldsymbol{Q}
\left[\begin{matrix}6.25&2.5\2.5&1\\end{matrix}\right] ]
- process noise जोड़ने के बाद predicted covariance यह बनती है
[ \boldsymbol{P}_{1,0}
\left[\begin{matrix}28.5&3.75\3.75&1.25\\end{matrix}\right] ]
update चरण: measurement और prediction का संयोजन
- (t_1) पर दूसरी measurement इस प्रकार है
[ \boldsymbol{z}_1= \left[\begin{matrix}11{,}020\202\\end{matrix}\right] ]
- इस measurement में तेज noise spike के कारण पहली measurement की तुलना में signal-to-noise ratio कम है और uncertainty अधिक है
- distance measurement का standard deviation (6m) है
- velocity measurement का standard deviation (1.5m/s) है
- measurement covariance matrix इस प्रकार है
[ \boldsymbol{R}_1= \left[\begin{matrix}36&0\0&2.25\\end{matrix}\right] ]
- (t_1) पर पिछला predicted state और नई measurement, दोनों उपलब्ध हैं
- predicted covariance (\boldsymbol{P}_{1,0}) के diagonal elements (28.5), (1.25) हैं
- measurement covariance (\boldsymbol{R}_1) के diagonal elements (36), (2.25) हैं
- इस स्थिति में prediction uncertainty measurement uncertainty से कम है
- Kalman Filter न तो नई measurement को जस का तस उपयोग करता है, न केवल prediction को बनाए रखता है
- यह prediction और measurement को weighted average के रूप में मिलाता है
- जिस ओर uncertainty कम होती है, उसे अधिक weight दिया जाता है
- 1D form में संयोजन इस प्रकार है
[ \hat{x}{1,1}=K_1z_1+(1-K_1)\hat{x}{1,0} ]
- (K_1) Kalman Gain है, जो तय करता है कि measurement और prediction को कितना weight दिया जाए
- जब तक model assumptions सही हों, यह updated estimate की uncertainty को न्यूनतम करता है
state update और innovation
- matrix form में state update equation इस प्रकार है
[ \hat{\boldsymbol{x}}_{1,1}
\hat{\boldsymbol{x}}_{1,0} + \boldsymbol{K}_1(\boldsymbol{z}1-\hat{\boldsymbol{x}}{1,0}) ]
- सामान्य रूप से measurement और system state एक ही physical quantity को नहीं दर्शाते
- digital thermometer electrical signal मापता है, लेकिन system state temperature हो सकता है
- ऐसे में predicted state को measurement domain में बदलने के लिए observation matrix (\boldsymbol{H}) की ज़रूरत होती है
- सामान्य state update equation इस प्रकार है
[ \hat{\boldsymbol{x}}_{1,1}
\hat{\boldsymbol{x}}_{1,0} + \boldsymbol{K}_1(\boldsymbol{z}1-\boldsymbol{H}\hat{\boldsymbol{x}}{1,0}) ]
- (\boldsymbol{z}1-\boldsymbol{H}\hat{\boldsymbol{x}}{1,0}) को innovation या residual कहा जाता है, और यह नई जानकारी को दर्शाता है
- उदाहरण में state और measurement दोनों दूरी और velocity हैं, इसलिए (\boldsymbol{H}) identity matrix है
Kalman Gain की गणना
- 1D Kalman Gain इस प्रकार है
[ K_n=\frac{p_{n,n-1}}{p_{n,n-1}+r_n} ]
- (p_{n,n-1}) predicted state variance है
- (r_n) measurement variance है
- multivariate Kalman Filter में Kalman Gain एक matrix बन जाता है, और यह इस प्रकार है
[ \boldsymbol{K}n= \boldsymbol{P}{n,n-1}\boldsymbol{H}^T \left( \boldsymbol{H}\boldsymbol{P}_{n,n-1}\boldsymbol{H}^T+\boldsymbol{R}_n \right)^{-1} ]
- उदाहरण में (t_1) के लिए निकाला गया Kalman Gain यह है
[ \boldsymbol{K}_1= \left[\begin{matrix}0.4048&0.6377\0.0399&0.3144\\end{matrix}\right] ]
- matrix inverse को MATLAB के
inv(A)या Python केnumpy.linalg.inv(A)से निकाला जा सकता है- वास्तविक implementation में explicit inverse निकालने के बजाय MATLAB के
A\bया Python केnumpy.linalg.solve(A, b)की तरह linear system को सीधे solve करना आम तौर पर बेहतर होता है
- वास्तविक implementation में explicit inverse निकालने के बजाय MATLAB के
update का परिणाम और covariance में कमी
- उदाहरण में innovation यह है
[ \boldsymbol{z}1-\hat{\boldsymbol{x}}{1,0}
\left[\begin{matrix}20\2\\end{matrix}\right] ]
- Kalman Gain लागू करने पर correction term यह बनती है
[ \boldsymbol{K}_1 \left[\begin{matrix}20\2\\end{matrix}\right]
\left[\begin{matrix}9.37\1.43\\end{matrix}\right] ]
- updated state estimate यह है
[ \hat{\boldsymbol{x}}_{1,1}
\left[\begin{matrix}11{,}009.37\201.43\\end{matrix}\right] ]
- multivariate covariance update के लिए अक्सर Joseph form उपयोग की जाती है
[ \boldsymbol{P}_{n,n}
(\boldsymbol{I}-\boldsymbol{K}n\boldsymbol{H}) \boldsymbol{P}{n,n-1} (\boldsymbol{I}-\boldsymbol{K}_n\boldsymbol{H})^T + \boldsymbol{K}_n\boldsymbol{R}_n\boldsymbol{K}_n^T ]
- literature में इसका simplified form भी अक्सर दिखता है
[ \boldsymbol{P}_{n,n}
(\boldsymbol{I}-\boldsymbol{K}n\boldsymbol{H}) \boldsymbol{P}{n,n-1} ]
- exact arithmetic में दोनों forms एक जैसा परिणाम देते हैं
- computer implementation में Joseph form सामान्यतः numerical stability के लिए बेहतर होती है
- उदाहरण में simplified covariance update का उपयोग करके यह परिणाम मिलता है
[ \boldsymbol{P}_{1,1}
\left[\begin{matrix}14.57&1.43\1.43&0.71\\end{matrix}\right] ]
- updated estimate की uncertainty, prediction uncertainty और measurement uncertainty दोनों से कम है
- predicted covariance के diagonal elements (28.5), (1.25) हैं
- measurement covariance के diagonal elements (36), (2.25) हैं
- updated covariance के diagonal elements (14.57), (0.71) हैं
- सिद्धांततः नई जानकारी, चाहे उसकी uncertainty अधिक हो, estimate uncertainty को कम करती है
- वास्तविक systems में कभी-कभी अविश्वसनीय measurements को reject करना पड़ता है
अगला prediction और दोहराव वाला loop
- Iteration 1 का prediction चरण Iteration 0 की तरह ही किया जाता है
- फर्क सिर्फ इतना है कि शुरुआती बिंदु updated (\hat{\boldsymbol{x}}{1,1}) और (\boldsymbol{P}{1,1}) होते हैं
- state prediction इस प्रकार है
[ \hat{\boldsymbol{x}}_{2,1}
\boldsymbol{F}\hat{\boldsymbol{x}}_{1,1}
\left[\begin{matrix}12,016.5\201.43\\end{matrix}\right] ]
- covariance prediction इस प्रकार है
[ \boldsymbol{P}_{2,1}
\boldsymbol{F}\boldsymbol{P}_{1,1}\boldsymbol{F}^\top+\boldsymbol{Q}
\left[\begin{matrix}52.86&7.47\7.47&1.71\\end{matrix}\right] ]
- नई measurement के बिना समय बीतने पर दोनों variances फिर बढ़ते हैं
- velocity uncertainty, distance uncertainty को और बढ़ाती है, इसलिए distance variance अधिक तेज़ी से बढ़ती है
- Kalman Filter शुरुआत में एक बार initialize होने के बाद लगातार prediction और update को दोहराने वाली संरचना में काम करता है
- prediction, state transition model के जरिए current estimate और covariance को अगले समय बिंदु तक propagate करता है
- update, नई measurement और prediction को Kalman Gain से मिलाकर current state और uncertainty को refresh करता है
1 टिप्पणियां
Hacker News की राय
हर बार जब “beginner tutorial” देखता हूँ तो उम्मीद लगती है, लेकिन अक्सर निराशा होती है, और इस बार भी अपवाद नहीं था
शुरुआत अच्छी होती है, लेकिन फिर कोई concept या अहम term ठीक से समझाए बिना आगे बढ़ जाते हैं। यहाँ मैं इस हिस्से पर अटक गया: “random variable को probability density function से समझाया जाता है, और probability density function को moments से characterize किया जाता है। probability values के moments, random variable की powers की expected values होते हैं।”
समझ नहीं आया कि यह probability value के exponent की expected value है, या probability value को किसी power पर उठाकर उसकी expected value, और यह भी नहीं कि सिर्फ probability value ही क्यों नहीं, बल्कि power खास क्यों है। लगता है जैसे लेखक अपनी सोच की flow के बीच में अचानक आसान तरीके से समझाना छोड़ देते हैं, या शायद बुनियादी concepts को खुद ही ठीक से नहीं समझते, इसलिए दूसरों को समझा नहीं पाते—यह खीझ पैदा करता है। Udemy जैसा हो तो अच्छा है, जहाँ instructor से सवाल पूछ सकते हैं; किताब के लेखक से जवाब पाने का कोई रास्ता नहीं होता
लेखक अगर सिर्फ एक बार भी पर्याप्त explanation न दे, तो पूरी चीज़ ढह जाती है, और feedback loop हो तो बहुत मदद मिलती है। अगर नहीं है, तो आखिरकार खुद जिम्मेदारी लेकर अज्ञात शब्दों और phrases को खोजना पड़ता है। “random variable” या “probability density function” जैसे expressions जिन्हें आप पूरी तरह नहीं समझते, उन्हें खोजिए, और Wikipedia, ChatGPT, textbooks, videos आदि से gaps भरिए। यह process recursive है, इसलिए फिर और अनजान concepts आएँगे, लेकिन नीचे उतरते रहना है। tutor की value भी इसी depth-first search को अच्छी तरह guide करने में है। नए क्षेत्र में आम तौर पर main text से ज्यादा समय background knowledge भरने में लगता है, और अगली बार मिलते-जुलते topic पर यह तेज़ हो सकता है
अजीब लगता है कि undergraduate और graduate school से गुजरने के बाद भी इतना बुनियादी concept मेरे भीतर internalize नहीं हो पाया
इसलिए वे चीज़ें भूल जाती हैं जिन्हें आप खुद obvious मानते हैं। 3blue1brown videos में भी मुझे ऐसी ही समस्या महसूस होती है। videos खूबसूरत हैं, लेकिन समझ पैदा नहीं होती; जो लोग पहले से जानते हैं वे familiar concepts को साफ-सुथरे रूप में व्यक्त होते देखकर सिर हिलाते हैं, लेकिन मेरे जैसे लोगों के लिए prerequisites बहुत ज्यादा लगते हैं
Kalman filter समझने के लिए पहले probability की basics और Gaussian distribution का महत्व जानना पड़ता है। mathematical derivation मानकर चलता है कि संबंधित probability distributions सभी Gaussian distributions हैं, और Gaussian distribution 1st और 2nd moments जान लेने पर uniquely निर्धारित हो जाता है। आखिरकार moments की introduction से बचा नहीं जा सकता, और उसके बाद काफी कठिन math आती है। Kalman filter आसान topic नहीं है, और Rudolf Kalman ने एक interview में कहा था कि अगर उनका filter न होता तो अमेरिका की moon landing असंभव होती
simple univariate case से शुरू करके उसे modify और generalize किया जा सकता है, इसलिए मैंने हमेशा सोचा है कि Kalman filter सिखाने का यह एक अच्छा तरीका हो सकता है
कुछ साल पहले मैंने Kalman की छोटी lecture series सुनी थी, और उन्होंने observed data के साथ सीधे काम करने की खूबी पर बहुत जोर दिया था
उनका मानना था कि अगर पहले model assume करके उसे data पर fit करने की कोशिश करें, तो bias पैदा होता है। इस principle के अच्छे उदाहरण के रूप में उन्होंने Newton की Principia का ज़िक्र किया। उनका explanation था कि Newton ने Kepler के laws को explain करने वाला model ढूँढने की कोशिश नहीं की, बल्कि मुख्य रूप से geometric arguments का उपयोग करके Kepler के laws से inverse-square law of gravitation derive किया। वे शानदार speaker थे और उनके opinions भी strong थे;当然, उन्होंने Kalman filter का idea भी समझाया, लेकिन मेरे काम में उसका सीधे उपयोग नहीं था, इसलिए details बहुत पहले भूल गया
मैंने ऐसे scientists और engineers के साथ काम किया है जिन्होंने असल में बेहद complex और well-known systems deploy किए हैं, और ऐसे लोग fashionable algorithms को लेकर आम तौर पर skeptical होते हैं और अक्सर first principles से शुरू करते हैं। 90% मामलों में एक साधारण linear Kalman filter—या कभी-कभी motion model तक के बिना—काफी होता था
हाल ही में एक दोस्त ने side project के लिए Kalman filter implementation करने को कहा, इसलिए मैंने कई resources और यह website पढ़ी, लेकिन अब भी समझ नहीं आ रहा कि इसे implement कैसे करूं
सब कुछ “बाकी उल्लू बना दीजिए” जैसा लगता है। काश कोई ऐसा resource होता जो programmer की तरह समझाता, जैसे sigma notation के बजाय array iteration से। मेरी समझ के मुताबिक Kalman filter position, velocity और शायद acceleration के moving average जैसा दिखता है, और sensor जो value बताता है उसके बजाय “actual value” estimate करने के लिए इन तीन values का इस्तेमाल करता है
हालांकि पहले dynamics को describe करने वाला math लिखना पड़ता है। Kalman filter किसी खास system dynamics पर Bayes theorem apply करने जैसा है, और measurement मिलने पर current state estimate को कैसे update करना है, और उस measurement के बाद अगले measurement से पहले system dynamics uncertainty को कैसे प्रभावित करती है, इसे बार-बार apply करता है। जिस चीज़ को track कर रहे हैं वह समय के साथ कैसे बदलती है, यह बताने वाला dynamics model पहले चाहिए। उसके बिना implementation का confusing होना तय है। Bayes filter या particle filter पहले पढ़ना matrices के बिना भी concept समझने में मदद कर सकता है। यह बात हमेशा खटकती है कि math जाने बिना भी software developer बना जा सकता है; web pages बनाने के लिए शायद ऐसा हो, लेकिन जितना ज़्यादा math पता होगा, problems को model और solve करने की आपकी range उतनी ही बड़ी होगी
अहम बात यह है कि उस state के आधार पर estimate करना, और measurement मिलने के बाद दोनों जानकारी का इस्तेमाल करके next state को बार-बार adjust करना। Formula समझ आ जाए तो coding खुद काफी आसान है। यह resource मदद कर सकता है: http://bilgin.esme.org/BitsAndBytes/KalmanFilterforDummies
External control और process noise जोड़े जा सकते हैं, और internal state values के vector के रूप में represent होती है। साथ ही internal state observations में कैसे transform होती है, इसके लिए linear model और observation noise भी चाहिए।
x model state है, F linear state transition model है
x(t+1) = F x(t), Q process noise की covariance matrix है, इसलिए असल मेंx(t+1) = F x(t) + N(0,Q), H linear observation model है, R observation noise की covariance matrix है, और u व B optional external control vector और उसके effect का तरीका हैं।N(0,Q)mean 0 और covariance Q वाला normal distribution है।उदाहरण के लिए किसी moving object में model state position x और velocity v हो सकती है। Radar आदि से आम तौर पर केवल position observe होती है और current velocity observe नहीं कर सकते, इसलिए observation model सिर्फ position निकालने वाला होता है। Kalman filter करने से पहले ऐसा “उल्लू” पहले होना चाहिए, और process कैसा है इसके आधार पर आपको खुद तय करना पड़ता है। Kalman filter बताता है कि जब state transition model और observations दोनों में noise हो, तो हर time point पर actual state vector को optimally कैसे estimate करें। कई tutorials चुने हुए process model वाले हिस्से और Kalman filter वाले हिस्से को मिलाकर समझाते हैं, इसलिए confusion होता है; और 1D constant model जैसे बहुत छोटे examples में dynamics model equation के अंदर गायब हो जाता है, जिससे confusion और बढ़ता है
शुरुआती कुछ chapters Kalman filter और information filter को अच्छी तरह cover करते हैं
जब आपको पता हो कि sensor measurements में noise है, तो कई samples का average लेकर actual value के ज्यादा करीब estimate पाने की कोशिश की जाती है, और sensor noise की मात्रा पता हो तो कितने samples average करने हैं इसका अंदाजा भी लग जाता है। यहां सभी sensed values या inferred values को mean और variance से parameterize किए गए Gaussian distribution के रूप में estimate किया जा रहा है, ऐसा मान सकते हैं।
Acceleration, velocity और position वाले physical system में, time t पर position p और velocity v हो तो t+dt पर position लगभग
p+(v*dt)होगी। Acceleration estimate से velocity भी update की जा सकती है, और अगर system controlled है तो commanded force से acceleration model भी update किया जा सकता है। लेकिन initial estimate में uncertainty होती है, इसलिए इस process model को ही आगे चलाते रहने पर uncertainty लगातार बढ़ती जाएगी और आखिरकार बेकार हो जाएगी।Kalman filter sensor information और process model को combine करके, केवल इनमें से एक का इस्तेमाल करने की तुलना में, interest वाली quantity को बेहतर estimate करने की technique है। हर time step पर यह previous state estimate के आधार पर process model से state predict करता है, और current sensor measurement से mean और uncertainty update करता है। Basic Kalman filter में मान लिया जाता है कि process model linear है और सभी estimates simple Gaussian distributions हैं, फिर model और sensor में से किस पर कितना भरोसा करना है, यह Kalman gain नाम के multiplication factor से तय होता है
Kalman filter पर एक और step-by-step video tutorial playlist: https://www.youtube.com/watch?v=CaCcOwJPytQ&list=PLX2gX-ftPV...
Intuition मिल जाने के बाद Kalman filter सच में बहुत interesting है, और particle filter भी handle व visualize करने में मजेदार होते हैं
मेरे पास यह book है और मैंने इसे real problems में काफी successfully use किया है
कई बार दोबारा पढ़ने पर भी कुछ हिस्से follow करने में awkward लगते हैं, लेकिन कुल मिलाकर काफी अच्छी है
इससे जुड़ा एक और अच्छा article: Is the Kalman filter a low-pass filter? Sometimes!
https://jbconsulting.substack.com/p/is-the-kalman-filter-jus...
मैंने इसे एक video में virtual camera movement की jitter कम करने के लिए use किया था, जहां face के आसपास real-time crop किया जा रहा था। Detected face position stream को Kalman filter worker को भेजता था और stable camera position stream वापस मिलती थी
जब computing resources सीमित हों, तो Kalman filter बेहतरीन है, लेकिन व्यक्तिगत रूप से मैं particle filter जैसे नए और ज़्यादा advanced models को ज़्यादा पसंद करता हूं
particle filter का फायदा यह है कि यह non-linear physics और non-Gaussian distributions वाली जटिल स्थितियों को संभाल सकता है। उदाहरण के लिए, vehicle GPS हाल की turning history के आधार पर road map का उपयोग करके असंभव locations को हटा सकता है। Gaussian filter ऐसा नहीं कर सकता और बस कुछ blocks को ढकने वाला धुंधला-सा blob बना देता है
और यह भी जानना चाहूंगा कि offline processing के लिए particle filter के अलावा कोई नया या ज़्यादा advanced model recommend करने लायक है या नहीं
2007 में मैं एक ad-tech company में था, जहां CEO और research team Google और MSN networks पर ad campaigns को optimize करने के लिए Kalman filter पर अटके हुए थे
मेरी याद के मुताबिक इसका कुछ असर था, लेकिन अब मैं patent application नहीं ढूंढ पा रहा हूं, और Zeta और Walmart ने उस technology को खरीद लिया था
Kalman filter समझाने वाले लेख लगभग हमेशा इस तरह शुरू होते हैं: “intuitive example के तौर पर thermostat के बारे में सोचिए। समझ गए? बढ़िया! अब इसे और intuitive बनाने के लिए advanced linear algebra देखते हैं”
सोच रहा हूं कि क्या किसी ने ऐसा Kalman filter explanation देखा है जो सीधे maths में छलांग न लगाता हो
आंखें बंद करके दीवार की ओर चलें तो समय के साथ अपनी position को लेकर आपका confidence घटता जाता है, और जैसे ही उंगली दीवार को छूती है, position को लेकर confidence अचानक बढ़ जाता है। पहला हिस्सा prediction step है और दूसरा हिस्सा measurement update। linear algebra बस Gaussian noise वाले linear dynamical system में उन weights को calculate करने का तरीका है
Kalman filter normal distribution जैसी statistical assumptions करता है, इसलिए कम-से-कम statistics और mean·covariance matrix की समझ होनी चाहिए। अगर इतना है, तो https://sites.ualberta.ca/~dwiens/stat679/meinhold&singpurwa... के section 4 से पहले तक आप follow कर पाएंगे। section 4 के बाद वाला हिस्सा actual implementation के लिए जरूरी mathematical calculations को आगे बढ़ाता है, इसलिए वह ज्यादा अतिरिक्त समझ नहीं देता
पहले हर चीज़ को 1D में handle करके फिर multi-dimensional problem तक expand करने का तरीका concepts पकड़ने में वाकई मदद करता है। lecture playlist शायद यह है: https://youtube.com/playlist?list=PLAwxTw4SYaPkCSYXw6-a_aAoX...
Kalman filter वाला हिस्सा “Tracking Intro - Artificial Intelligence for Robotics” video से शुरू होता है। free lecture भी शायद यहां है, लेकिन access के लिए login चाहिए: https://www.udacity.com/course/intro-to-artificial-intellige...
Kalman के बारे में ज्यादा नहीं जानता था, इसलिए इस website के introductory articles पढ़े, लेकिन बात खास समझ में नहीं आई
sample graph के बारे में सोचते हुए यह मुझे कहीं ज्यादा समझने में आसान exponential moving average जैसा लगा। Google पर comparison ढूंढा तो Stats Stack Exchange में कहा गया था कि “random walk + noise” के लिए EMA Kalman जितना ही अच्छा है, और Brown University में Joseph J. LaViola के 2003 paper ने दिखाया कि double exponential smoothing algorithm quality में Kalman और extended Kalman के बराबर है, जबकि 135 गुना तेज़ और ज्यादा simple है।
double exponential smoothing, Kalman से कहीं ज्यादा समझने में आसान है, इसलिए अगर मान लें कि LaViola paper सही है, तो Kalman को समझने में मैं और effort नहीं लगाने वाला