فیلتر کالمن در متلب – راهنمای کاربردی

۱۴۶۶ بازدید
آخرین به‌روزرسانی: ۱۳ اردیبهشت ۱۴۰۲
زمان مطالعه: ۱۹ دقیقه
دانلود PDF مقاله
فیلتر کالمن در متلب – راهنمای کاربردیفیلتر کالمن در متلب – راهنمای کاربردی

در آموزش‌های قبلی مجله فرادرس با فیلتر کالمن آشنا شدیم. فیلتر کالمن معادل مشاهده‌گر برای رگولاتورهای مرتبه دوم خطی است و به همین دلیل تخمین‌گر مرتبه دوم خطی نیز نامیده می‌شود. در این آموزش، ضمن بیان مختصر مفاهیم، با پیاده‌سازی فیلتر کالمن در متلب آشنا خواهیم شد.

997696

فیلتر کالمن گسسته

از آنجایی که تخمین با استفاده از فیلتر کالمن با اندازه‌گیری و انتشار حالت گره خورده است، درک پیاده‌سازی گسسته آن‌ ساده‌تر است. سیستم زیر را در نظر بگیرید:

Xk+1=AXk+Buk+Fwk\large X _ { k + 1 } = A X _ { k } + B u _ { k } + F w _ { k }

که در آن، wkw _ k نامعینی دینامیک سیستم است که به عنوان یک فرایند گاوسی با کوواریانس E(wkwkT)=QE(w_k w_k^T ) = Q نمایش داده شده است. متغیرهای حالت XkX_k نیز با فرایندهای دو به دو گوسی مستقل با کوواریانس PkP _ k مدل می‌شوند. شرایط اولیه نیز حالت X(0)=X0X(0) = X_0 و کوواریانس P0P_0 هستند.

اندازه‌گیری به صورت زیر تقریب زده شده است:

Yk=CXk+Duk+vk\large Y _ k = C X _ k + D u _ k + v _ k

که در آن، vkv _ k نامعینی در اندازه‌گیری با کواریانس E(vkvkT)=RE(v_k v_k^T ) = R است.

۱. انتشار حالت

دینامیک سیستم به صورت زیر بیان می‌شود:

Xk+1=AXk+Buk+Fwk\large X _ { k + 1 } = A X _ { k } + B u _ { k } + F w _ { k }

برای جداسازی تخمین‌های حالت قبل و بعد از اندازه‌گیری، موارد زیر را تعریف می‌کنیم:

  • XkkX _ {k|k} به عنوان تخمین بعد از اندازه‌گیری در گام kk
  • Xk+1kX _ { k + 1 |k} به عنوان تخمین حالت بعد از دنبال کردن دینامیک سیستم

بنابراین، مقدار بعدی قابل انتظار حالت به صورت زیر خواهد بود:

E(Xk+1k)=AE(Xkk)+BE(uk)+E(Fwk)\large E ( X _ { k + 1 | k } ) = A E ( X _ { k | k } ) + B E ( u _ k ) + E ( F w _ k )

X^k+1k=AX^kk+Buk\large \hat { X } _ { k + 1 | k } = A \hat { X } _ {k | k } + B u _ k

خطای بین تخمین حالت و امید ریاضی، قبل از اندازه‌گیری به صورت زیر نمایش داده می‌شود:

Xk+1kX^k+1k=AXkk+Buk+Fwk(AXˉkk+Buk)\large X _ { k + 1 | k } - \hat { X } _ { k + 1 | k } = A X _ { k | k } + B u _ k + F w _ k - ( A \bar { X } _ { k | k } + B u _ k )

ek+1k=Xk+1kXˉk+1k=Aekk+Fwk\large e _ { k + 1 | k } = X _ { k + 1 | k } - \bar { X } _ { k + 1 | k } = A e _ { k | k } + F w _ k

بنابراین، کوواریانس حالت قبل از اندازه‌گیری برابر خواهد بود با:

Pk+1k=E(ek+1kek+1kT)=P((Xk+1kXˉk+1k)(Xk+1kXˉk+1k)T)\large P _ { k + 1 | k } = E ( e _ { k + 1 | k } e _ { k + 1 | k } ^ { - T } ) = P ( ( X _ { k + 1 | k } - \bar { X } _ { k + 1 | k} ) ( X _ { k + 1 | k } - \bar { X } _ { k + 1 | k } ) ^ T )

Pk+1k=AE(ekkekkT)AT+E(FwkwkTFT)\large P _ { k + 1 | k } = A E ( e _{ k | k } e _ { k | k } ^ T ) A ^ T + E ( F w _ k w _ k ^ T F ^ T )

در نتیجه، انتشار کواریانس خطا به صورت زیر است:

Pk+1k=APkkAT+FQFT.\large P _ { k + 1 | k } = A P _ { k | k } A ^ T + F Q F ^ T .

۲. به‌روزرسانی

اکنون کوواریانس تخمین حالت‌ها را پس از اندازه‌گیری به‌روز می‌کنیم. اندازه‌گیری به صورت زیر است:

Yk+1=CXk+1k+Duk+1+vk+1\large Y _ { k + 1 } = C X _ { k + 1 | k } + D u _ { k + 1 } + v _ { k + 1 }

امید ریاضی اندازه‌گیری برابر است با:

Y^k+1=CX^k+1k+Duk+1.\large \hat { Y } _ { k + 1 } = C \hat { X } _ { k + 1 | k } + D u _ { k + 1 } .

خطای بین تخمین حالت و میانگین نیز به صورت زیر نوشته می‌شود:

Yk+1Y^k+1=CXk+1k+Duk+1+vk+1(CX^k+1k+Duk+1)\large Y _ { k + 1 } - \hat { Y } _ { k + 1 } = C X _ { k + 1 | k } + D u _ { k + 1 } + v _ { k + 1 } - ( C \hat { X } _ { k + 1 | k } + D u _ { k + 1 } )

eY,k+1=Cek+1k+vk+1\large e _ { Y , k + 1 } = C e _ { k + 1 | k } + v _ { k + 1 }

کوواریانس خطای اندازه‌گیری قبل از انجام اندازه‌گیری برابر است با:

E(eY,k+1eY,k+1T)=E((Cek+1k+vk+1)(Cek+1k+vk+1)T)E(eY,k+1eY,k+1T)=E((Cek+1k+vk+1)(ek+1kTCT+vk+1T))=CPk+1kCT+R\large \begin{align*} E ( e _ { Y , k + 1 } e _ { Y , k + 1 } ^ T ) & = E ( ( C e _ { k + 1 | k } + v _ { k + 1 } ) ( C e _ { k + 1 | k } + v _ { k + 1 } ) ^ T ) \\ E ( e _ { Y , k + 1} e _ { Y , k + 1 } ^ T ) & = E ( ( C e _ { k +1 | k } + v _ { k + 1} ) ( e_ { k + 1 | k } ^ T C ^ T + v _ { k + 1 } ^ T ) ) \\ & = C P _ { k + 1 | k } C^ T + R \end{align*}

به‌روزرسانی حالت پس از اندازه‌گیری

حالت پس از اندازه‌گیری به صورت زیر به‌روزرسانی می‌شود:

X^k+1k+1=X^k+1k+Kk+1(Yk+1(CX^k+1k+Duk+1))X^k+1k+1=X^k+1k+Kk+1eY,k+1X^k+1k+1=X^k+1k+Kk+1Cek+1k+Kk+1vk+1\large \begin{align*} \hat { X } _ { k + 1 | k + 1 } & = \hat { X } _ { k + 1 | k } + K _ { k + 1 } ( Y _ { k +1 } - ( C \hat { X } _ { k + 1 | k } + D u _ { k + 1 } ) ) \\ \hat { X } _ { k + 1 | k + 1 } & = \hat { X } _ { k + 1 | k } + K _ { k + 1 } e _ { Y , k + 1 } \\ \hat { X } _ { k + 1 | k + 1 } & = \hat { X } _ { k + 1 | k } + K _ { k + 1 } C e _ { k + 1 | k } + K _ { k + 1 } v _ { k + 1 } \end {align*}

یعنی تخمین حالت بر اساس خطای بین اندازه‌گیری واقعی و اندازه‌گیری چشم‌داشتی تخمین حالت به‌روز می‌شود. هدف، یافتن Kk+1K _ {k+1} به گونه‌ای است که اختلاف بین حالت واقعی و تخمین آن کمینه شود.

می‌خواهیم بهره‌ای را به گونه‌‌ای انتخاب کنیم که خطای بین تخمین حالت پسین (عقبی)‌ و حالت واقعی را کمینه کند.

Xk+1X^k+1k+1=Xk+1X^k+1kKk+1Cek+1kKk+1vk+1ek+1k+1=(IKk+1C)ek+1kKk+1vk+1\large \begin{align*} X _ { k + 1 } - \hat { X } _ { k + 1 | k + 1 } & = X _ { k + 1 } - \hat { X } _ { k + 1 | k } - K _ { k + 1 } C e _ { k + 1 | k } -K _ { k + 1 } v _ { k + 1 } \\ e _ { k + 1 | k + 1 } & = ( I - K _ { k + 1 } C ) e _ { k + 1 | k } - K _ { k + 1 } v _ { k + 1 } \end {align*}

بنابراین، کوواریانس پسین برابر است با:

Pk+1k+1=E(ek+1k+1ek+1k+1T)=E(((IKk+1C)ek+1kKk+1vk+1)((IKk+1C)ek+1kKk+1vk+1)T)=(IKk+1C)E(ek+1kek+1kT)(IKk+1C)T+Kk+1E(vk+1vk+1T)Kk+1TPk+1k+1=(IKk+1C)Pk+1k(IKk+1C)T+Kk+1RKk+1TPk+1k+1=(IKk+1C)Pk+1k(IKk+1C)T+Kk+1RKk+1TPk+1k+1=Pk+1kKk+1CPk+1kPk+1kCTKk+1T+Kk+1(CPk+1kCT+R)Kk+1T\large \begin{align*} P _ { k + 1 | k + 1 } & = E ( e _ { k + 1 | k + 1 } e _ { k + 1 | k + 1 } ^ T ) \\ & = E \left ( ( (I - K _ { k + 1 } C ) e _ { k + 1 | k } - K _ { k + 1 } v _ { k + 1 } ) ( ( I - K _ { k + 1 } C ) e _ { k + 1 | k } - K _ { k + 1 } v _ { k + 1 } ) ^ T \right ) \\ & = ( I - K _ { k + 1 } C ) E ( e _ { k + 1 | k } e _ { k + 1 | k } ^ T ) ( I - K _ { k + 1 } C ) ^ T + K _ { k + 1 } E ( v _ { k + 1 } v _ { k + 1 } ^ T ) K _ { k + 1} ^ T \\ P _ { k + 1 | k + 1 } & = ( I - K _ { k + 1 } C ) P _ { k + 1 | k } ( I - K _ { k + 1 } C ) ^ T + K _ { k + 1 } R K _ { k + 1 } ^ T \\ P _ { k + 1 | k + 1 } & = ( I - K _ { k + 1 } C ) P _ { k + 1 | k } ( I - K _ { k + 1 } C ) ^ T + K _ { k + 1 } R K _ { k + 1 } ^ T \\ P _ { k + 1 | k + 1 } & = P _ { k + 1 | k } - K _ { k + 1 } C P _ { k + 1 | k } - P _ { k + 1 | k } C ^ T K _ { k + 1 } ^ T + K _ { k + 1 } ( C P _ { k + 1 | k } C ^ T + R ) K _ { k + 1 } ^ T \end {align*}

از آنجایی که اثر ماتریس کوواریانس خطای بین تخمین حالت و به‌ روز رسانی اندازه‌‌گیری است، بنابراین، ماتریس بهره‌ای که ماتریس کوواریانس را کمینه می‌کند، جواب بهینه است. با مشتق‌گیری نسبت به بهره، داریم:

tr(Pk+1k+1)Kk+1=2(CPk+1k)T+2Kk+1(CPk+1kCT+R)=0\large \frac { \partial tr ( P _ { k + 1 | k + 1 } ) } { \partial K _ { k + 1 } } = - 2 ( C P _ { k + 1 | k } ) ^ T + 2 K _ { k +1 } ( C P _ { k + 1 | k } C ^ T + R ) = 0

در نتیجه:

Kk+1=Pk+1kCT(CPk+1kCT+R)1\large K _ { k + 1 } = P _ { k + 1 | k } C ^ T ( C P _ { k + 1 | k } C ^ T + R ) ^ { - 1 }

با جایگذاری Kk+1K_{k+1} در عبارت کوواریانس پسین، داریم:

Pk+1k+1=Pk+1kKk+1CPk+1kKk+1CTPk+1kT+Pk+1kCT(CPk+1kCT+R)1(CPk+1kCT+R)Kk+1T\large P _ { k + 1 | k + 1 } = P _ { k + 1 | k } - K _ { k + 1 } C P _ { k + 1 | k } - K _ { k + 1 } C ^ T P _ { k + 1 | k } ^ T + P _ { k + 1 | k } C ^ T ( C P _ { k + 1 | k } C ^ T + R ) ^ { - 1 } ( C P_ { k + 1 | k } C ^ T + R ) K _ { k + 1 } ^ T

Pk+1k+1=Pk+1kKk+1CPk+1kKk+1CTPk+1kT+Pk+1kCTKk+1T\large P _ { k + 1 | k + 1 } = P _ { k + 1 | k } - K _ { k + 1 } C P _ { k + 1 | k } - K _ { k + 1 } C ^ T P _ { k + 1 | k } ^ T + P _ { k + 1 | k } C ^ T K _ { k + 1 } ^ T

Pk+1k+1=Pk+1kKk+1CPk+1k=(IKk+1C)Pk+1k\large P _ { k + 1 | k + 1 } = P _ { k + 1 | k } - K _ { k + 1 } C P _ { k + 1 | k } = ( I - K _ { k + 1 } C ) P _ { k + 1 | k }

فرم نهایی فیلتر کالمن

فرم نهایی الگوریتم فیلتر کالمن به صورت زیر است:

۱. انتشار حالت

X^k+1k=AX^kk+Buk\large \hat { X } _{ k + 1 | k } = A \hat { X } _ {k | k } + B u _ k

Pk+1k=APkkAT+FQFT.\large P _ { k + 1 | k } = A P _ { k | k } A ^ T + F Q F ^ T .

۲. به‌روزرسانی اندازه‌گیری

eY,k+1=y(k+1)(CX^k+1k+Duk+1)\large e _ { Y , k + 1 } = y ( k + 1 ) - ( C \hat { X } _ {k + 1 | k } + D u _ { k + 1 } )

Sk+1=(CPk+1kCT+R)\large S _ { k + 1 } = ( C P _ { k + 1 | k } C ^ T + R )

Kk+1=Pk+1kCTSk+11\large K _ { k + 1 } = P _ { k + 1 | k } C ^ T S _ { k + 1 } ^ { - 1 }

X^k+1k+1=X^k+1k+Kk+1eY,k+1\large \hat { X } _ { k + 1 | k + 1 } = \hat { X } _ { k + 1 | k } + K _{ k + 1 } e _ { Y , k + 1 }

Pk+1k+1=(IKk+1C)Pk+1k\large P _ { k + 1 | k + 1 } = ( I - K _ { k + 1 } C ) P _ { k + 1 | k }

فیلتر کالمن در متلب (گسسته)

در این بخش، مثال‌هاییی از پیاده‌سازی فیلتر کالمن در متلب (گسسته) را ارائه خواهیم کرد.

مثال ۱

ابتدا فیلتر کالمن را برای تخمین حالت‌ها در ساده‌ترین مورد که یک فرایند و اندازه‌گیری قطعی داریم، اعمال می‌‌کنیم. سیستم زیر را در نظر بگیرید:

X¨=u\large \ddot{X} = u

که اندازه‌گیری y=Xy = X است. می‌خواهیم یک مشاهده‌گر را به گونه‌ای تشکیل دهیم که X^X\hat{X} \rightarrow X.

سیستم را به صورت زیر تقریب می‌زنیم:

X1(t+1)=X1(t)+δtX2X2(t+1)=δtu\large \begin{align*} X _ 1 ( t + 1 ) & = X _ 1 ( t ) + \delta t X _ 2 \\ X _ 2 ( t + 1 ) & = \delta t u \end {align*}

اندازه‌گیری به صورت زیر تقریب زده می‌شود:

y=X+v\large y = X + v

که در آن، vv یک فرایند گاوسی با میانگین صفر و واریانس 10810 ^ { - 8 } است. توجه کنید از آنجایی که سیستم قطعی است، از یک مقدار بسیار کوچک کوواریانس اندازه‌گیری RR استفاده می‌کنیم. برنامه زیر، پیاده‌سازی فیلتر کالمن در متلب را برای تخمین حالت نشان می‌دهد. از آنجایی که کواریانس حالت‌ها را از قبل نمی‌دانیم، در ابتدا فرض می‌کنیم یک ماتریس واحد باشد. حالت‌ها در یک تکرار تخمین زده می‌شوند و خطا سریعاً به صفر میل می‌کند.

نمودار حالت و تخمین آن

مثال ۲

از فیلتر کالمن می‌توان برای تخمین پارامتر نیز استفاده کرد. سیستم دینامیکی زیر را در نظر بگیرید:

X1˙=X2+αX2˙=u\large \begin{align*} \large \dot { X _ 1 } & = X _ 2 + \alpha \\ \dot { X _ 2 } & = u \end {align*}

که در آن، α\alpha پارامتری نامعلوم است. تنها اندازه‌گیری y=X1+vy = X_1 + v را داریم که در آن، vv یک فرایند گاوسی با واریانس R=0.1R = 0.1 است. می‌توانیم از فیلتر کالمن استفاده کرده و پارامتر نامعلوم را تخمین بزنیم. ابتدا یک حالت جدید به سیستم اضافه می‌کنیم که خودش یک پارامتر است. همچنین دینامیکی را معرفی می‌کنیم که مشتق آن برابر با صفر است. از آنجایی که پارامتر را به صورت دقیق نمی‌دانیم، یک جمله نویز به دینامیک سیستم اضافه می‌کنیم تا نامعینی در مدل لحاظ شود.

X1(t+1)=X1(t)+δtX2(t)+δtX3(t)X2(t+1)=δtuX3(t+1)=X3(t)+w(t)\large \begin{align*} X _ 1 ( t + 1 ) & = X _ 1 ( t ) + \delta t X _ 2 (t)+ \delta t X _ 3(t) \\ X _ 2 ( t + 1 ) & = \delta t u \\ X _ 3 ( t + 1 ) & = X _ 3 ( t ) + w ( t ) \end {align*}

در معادلات بالا، w(t)w (t) یک فرایند گاوسی با کوواریانس 10410^{-4} است. معادلات بالا را می‌توان به فرم زیر نوشت:

Xt+1=AXt+But+Fwt\large X _ { t + 1 } = A X _ { t } + B u _ { t } + F w _ t

که در آن:

A=[1δtδt000000],              B=[0δt0],              F=[001]\large A = \left [ \begin {array} {ccc} 1 & \delta t & \delta t \\ 0 & 0 & 0 \\ 0 & 0 & 0 \end {array} \right ] , \;\;\;\;\;\;\; B = \left [ \begin {array} {c} 0 \\ \delta t \\ 0 \end {array} \right ] , \;\;\;\;\;\;\; F = \left [ \begin {array} {c} 0 \\ 0 \\ 1 \end {array} \right ]

در ابتدا، کوواریانس حالت را نمی‌دانیم، بنابراین تقریب آن را ۱ در نظر می‌گیریم. البته، اندازه‌گیری دقیق کوواریانس برای تخمین حالت لازم است. بنابراین، شبیه‌سازی را یک بار برای تخمین کوواریانس اجرا می‌کنیم و دوباره آن را اجرا کرده و این فرایند را تکرار می‌کنیم. با تکرار چندباره این فرایند (معمولاً دو بار)، یک تخمین مناسب از پارامتر نامعلوم خواهیم داشت.

موقعیت و سرعت

تخمین پارامتر

مثال ۳

همان‌طور که گفتیم، از فیلتر کالمن می‌توان برای تخمین پارامتر استفاده کرد. باز هم سیستم زیر را در نظر بگیرید:

X1˙=X2+αX2˙=u\large \begin{align*} \dot { X _ 1 } & = X _ 2 + \alpha \\ \dot { X _ 2 } & = u \end {align*}

که در آن، α\alpha پارامتری نامعلوم است. اندازه‌گیری‌های y1=X1+v1y_1 = X_1 + v_1 و y2=X2+v2y_2 = X_2 + v_2 نیز در دسترس هستند، که در آن‌ها v1v_1 و v2v_2 فرایندهای گوسی با واریانس‌های R1=0.1R_1 = 0.1 و R2=0.1R_ 2 = 0.1 هستند. می‌توانیم از فیلتر کالمن استفاده کنیم و پارامتر نامعلوم را تخمین بزنیم:‌

X1(t+1)=X1(t)+δtX2+δtX3X2(t+1)=δtuX3(t+1)=X3(t)+w(t)\large \begin{align*} X _ 1 ( t + 1 ) & = X _ 1 ( t ) + \delta t X _ 2 + \delta t X _ 3 \\ X _ 2 ( t + 1 ) & = \delta t u \\ X _ 3 ( t + 1 ) & = X _ 3 ( t ) + w ( t ) \end {align*}

که در آن، w(t)w ( t) یک فرایند گوسی با کوواریانس 10410^{-4} است. مانند مثال قبل، شبیه‌سازی را یک بار برای تخمین کوواریانس اجرا کرده و سپس فرایند را دوباره تکرار می‌کنیم. با تکرار چندباره این فرایند (معمولاً دو بار)، به یک تخمین مناسب برای پارامتر نامعلوم می‌رسیم.

موقعیت و سرعت

تخمین پارامتر

فیلتر کالمن پیوسته

فیلتر کالمن-بوسی (Kalman-Bucy Filter) معادل پیوسته‌زمان فیلتر کالمن است. استخراج و تحلیل فیلتر کالمن برای سیستم‌های پیوسته‌زمان دشوار است، زیرا اندازه‌گیری و حالت‌ها متغیرهایی پیوسته‌اند و به‌روزرسانی پیشین و پسین به صورت شفاف تعریف نشده‌اند. با این حال، با گسسته‌سازی فیلتر پیوسته و میل دادن زمان گسسته‌سازی به صفر، معادلات فیلتر کالمن به دست می‌آیند. در ادامه، این روش را توضیح می‌دهیم.

فرض کنید دینامیک سیستم به صورت زیر است:

X˙=AX+Bu+Fw\large \dot { X } = A X + B u + F w

که در آن، ww یک فرایند گاوسی با میانگین صفر و کوواریانس QQ است و اندازه‌گیری به صورت زیر بیان می‌شود:

y=CX+Du+v\large y = C X + D u + v

فیلتر تخمین زننده حالت از دو معادله دیفرانسیل تشکیل شده است:

X^˙=AX^+Bu+K(yCX^+Du)P˙=AP+PAT+FQFTKRKTK=PCTR1P˙=AP+PAT+FQFTPCTRCP\large \begin{align*} \dot { \hat { X } } & = A \hat { X } + B u + K ( y - C \hat { X } + D u ) \\ \dot { P } & = A P + P A ^ T + F Q F ^ T - K R K ^ T \\ K & = P C ^ T R ^ { - 1 } \\ \dot { P } & = A P + P A ^ T + F Q F ^ T - P C ^ T R C P \end {align*}

لازم به ذکر است که در مورد پیوسته فیلتر کالمن، کوواریانس خطای اندازه‌گیری و کوواریانس پیشین، هر دو، RR هستند. علاوه بر این، در محاسبات بهره مشاهده‌گر معکوس ماتریس کوواریانس نویز RR به کار می‌رود. بنابراین، اگر دو سنسور داشته باشیم که یکی بسیار نویزدار و دیگری بسیار دقیق باشد، فیلتر کالمن مقدار بیشتری را روی سنسور دقیق قرار می‌دهد؛ یعنی سنسوری که نویز پایین‌تری دارد، سهم بیشتری در به‌روزرسانی خواهد داشت. دقت کنید که معادله فوق، مشابه معادله ریکاتی است که در رگولاتور مرتبه دوم خطی به دست می‌آید و می‌توانیم آن را با تکنیکی مشابه حل آن حل کنیم. در مورد خاص زمان بی‌نهایت، معادله ریکاتی به صورت زیر در خواهد آمد:

0=AP+PAT+FQFTPCTRCP\large 0 = A P + P A ^ T + F Q F ^ T - P C ^ T R C P

معادله بالا مشابه معادله ریکاتی جبری است که در آن، به جای AA و BB، ماتریس‌های ATA^T و CTC^T قرار دارند و می‌توان آن‌ را با دستور "care" در متلب حل کرد.

فیلتر کالمن در متلب (پیوسته)

در این بخش، چند مثال از پیاده‌سازی فیلتر کالمن در متلب (پیوسته) را ارائه خواهیم کرد.

مثال ۴

سیستمی با معادله x¨=u\ddot{x} = u را در نظر بگیرید که تنها موقعیت آن اندازه‌گیری می‌شود. می‌خواهیم با فرض اینکه کوواریانس نویز اندازه‌گیری واحد بوده و برابر با کوواریانس فرایند است، یک فیلتر کالمن پیوسته برای سیستم ارائه کنیم. برای این منظور، از دستور متلب برای حل معادله ریکاتی استفاده شده است.

موقعیت و سرعت

مثال ۵

سیستم مثال قبل، یعنی x¨=u\ddot{x} = u را در نظر بگیرید که اکنون دو سنسور برای اندازه‌گیری موقعیت دارد: یکی بسیار دقیق (با کوواریانس ۰٫۰۱) و دیگری غیردقیق (با کوواریانس ۱). با فرض اینکه کواریانس فرایند یک ماتریس یکه است، یک فیلتر کالمن برای سیستم ارائه می‌کنیم. با استفاده از دستور "care" در متلب می‌توان برای حل معادله ریکاتی استفاده کرد. بهره‌هایی که از معادله ریکاتی حالت ماندگار به دست می‌آید به صورت زیر است:

Kk=[0.109010.89560.09959.9504]\large K _ k = \left [ \begin {array} {cc} 0 . 1 0 9 0 & 10.8956 \\ 0.0995 & 9.9504 \end{array} \right ]

ماتریس بهره فیلتر کالمن اهمیت بیشتری به داده‌های سنسور دقیق‌تر می‌دهد.

موقعیت و سرعت

کنترل گاوسی درجه دو خطی

کنترل گاوسی درجه دوم خطی یک رویکرد کنترلی است که از رگولاتور درجه دوم خطی (LQR) برای کنترل و برای فیلتر کالمن به منظور تخمین استفاده می‌کند. با توجه به اصل تفکیک تخمین و کنترل، می‌توانیم مشاهده‌گر و کنترل‌کننده را بدون اثرگذاری روی هم به صورت جداگانه طراحی کنیم. برنامه زیر، یک رگولاتور خطی مرتبه دوم برای کنترل و فیلتر کالمن پیوسته را با استفاده از دستور "care" متلب ارائه می‌دهد.

موقعیت و سرعت

جمع‌بندی

فیلترهای کالمن کاربردهای فراوانی در کنترل و پردازش سیگنال دارند. این فیلترها رؤیت‌گرهای مشابه رگولاتورهای مرتبه دوم خطی هستند و می‌توان با استفاده از همان عبارات و با جایگزینی ماتریس سیستم با ترانهاده‌اش، و جایگزینی ماتریس ورودی با ترانهاده ماتریس اندازه‌گیری آن‌ها را به دست آورد. فیلترهای کالمن وقتی در فرایندها و اندازه‌گیری‌هایی به کار می‌روند که مبتنی بر توزیع گاوسی‌اند، بهینه هستند. فیلترهای کالمن را می‌توان برای سیستم‌های غیرخطی نیز بیان کرد.

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

^^

بر اساس رای ۱۱ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
Vivek Yadav
دانلود PDF مقاله
۴ دیدگاه برای «فیلتر کالمن در متلب – راهنمای کاربردی»

سلام. از توضیحتان ممنونم. آیا ممکن است دربارۀ پیاده سازی فیلتر کالمن در ورژن های جدید برنامۀ متلب (که دارای دستور آمادۀ کالمن هستند.)، توضیح بفرمایید. آیا می توان داده های حسگر را به عنوان بردار کنترلی وارد مسأله کرد؟
بسیار ممنون، عرفانی

با سلام؛
از دستور kalman می‌توان برای طراحی فیلتر استفاده کرد:
[kalmanf,L,Mx,Z]=kalman(sys,Q,R);[kalmanf, L, Mx, Z] = kalman (sys, Q, R);
با تشکر از همراهی شما با مجله فرادرس

سلام برای شبیه سازی الگوریتم فیلتر کالمن با استفاده از نرم افزار متلب راهنمایی میخوام

سلام توضیحات وبرنامه عالی،
یسوال من پروژه ایی دارم با فیلترکالمن برای تخمین سطح توسط مقادیر توان و فلو ‌خروجی که همان سطح هست به چه صورت ازین برنامه هاتون استفاده کنم (بصورت گسسته)؟همه داده هارو دارم R.Q. ماتریسهایa,b,c,d

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *