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

در اینترنت، از جمله در Habré، می توانید اطلاعات زیادی در مورد فیلتر Kalman پیدا کنید. اما یافتن یک مشتق آسان قابل هضم از خود فرمول ها دشوار است. بدون نتیجه گیری، همه این علم به عنوان نوعی شمنیسم تلقی می شود، فرمول ها مانند مجموعه ای از نمادها بدون چهره به نظر می رسند، و مهمتر از همه، بسیاری از گزاره های ساده ای که در سطح یک نظریه نهفته است فراتر از درک است. هدف از این مقاله صحبت در مورد این فیلتر به زبانی قابل دسترس خواهد بود.
فیلتر کالمن یک ابزار قدرتمند برای فیلتر کردن اطلاعات است. اصل اصلی آن این است که هنگام فیلتر کردن، از اطلاعات فیزیک خود پدیده استفاده می شود. به عنوان مثال، اگر داده‌های سرعت‌سنج یک خودرو را فیلتر می‌کنید، اینرسی خودرو به شما این حق را می‌دهد که جهش‌های خیلی سریع در سرعت را به عنوان خطای اندازه‌گیری درک کنید. فیلتر کالمن جالب است زیرا به تعبیری بهترین فیلتر است. ما در زیر با جزئیات بیشتری صحبت خواهیم کرد که دقیقاً معنای کلمات "بهترین" چیست. در پایان مقاله نشان خواهم داد که در بسیاری از موارد می توان فرمول ها را به حدی ساده کرد که تقریباً چیزی از آنها باقی نمی ماند.

برنامه آموزشی

قبل از آشنایی با فیلتر کالمن، پیشنهاد می کنم چند تعاریف و حقایق ساده را از تئوری احتمال یادآوری کنیم.

مقدار تصادفی

وقتی می گویند یک متغیر تصادفی داده شده است، منظورشان این است که این کمیت می تواند مقادیر تصادفی بگیرد. مقادیر متفاوتی را با احتمالات مختلف می گیرد. وقتی مثلاً یک قالب را می‌چرخانید، مجموعه‌ای از مقادیر مجزا حذف می‌شوند:. برای مثال، وقتی صحبت از سرعت یک ذره سرگردان می شود، واضح است که باید با مجموعه ای پیوسته از مقادیر سروکار داشت. مقادیر حذف شده یک متغیر تصادفی را با علامت نشان می دهیم، اما گاهی اوقات، از همان حرف استفاده می کنیم که برای نشان دادن یک متغیر تصادفی استفاده می کنیم.
در مورد مجموعه ای پیوسته از مقادیر، متغیر تصادفی با چگالی احتمال مشخص می شود، که به ما دیکته می کند که احتمال اینکه متغیر تصادفی در یک همسایگی کوچک از یک نقطه با طول "بیفتد" برابر است با. همانطور که از تصویر می بینیم، این احتمال برابر است با مساحت مستطیل سایه دار زیر نمودار:

اغلب در زندگی، زمانی که چگالی احتمال برابر باشد، متغیرهای تصادفی گاوسی هستند.

می بینیم که تابع شکل زنگی است که در مرکز یک نقطه و با عرض مشخصه مرتبه است.
از آنجایی که ما در مورد توزیع گاوسی صحبت می کنیم، گناه است که ذکر نکنیم از کجا آمده است. همانطور که اعداد در ریاضیات کاملاً ثابت هستند و در غیرمنتظره‌ترین مکان‌ها رخ می‌دهند، توزیع گاوسی نیز ریشه عمیقی در نظریه احتمال دارد. یک جمله قابل توجه که تا حدی حضور همه جانبه گاوسی را توضیح می دهد، موارد زیر است:
اجازه دهید یک متغیر تصادفی با توزیع دلخواه وجود داشته باشد (در واقع، محدودیت هایی برای این خودسری وجود دارد، اما آنها اصلا سختگیرانه نیستند). بیایید آزمایش هایی را انجام دهیم و مجموع مقادیر "افتاده" متغیر تصادفی را محاسبه کنیم. بیایید بسیاری از این آزمایش ها را انجام دهیم. واضح است که هر بار مقدار متفاوتی از مبلغ دریافت خواهیم کرد. به عبارت دیگر، این مجموع خود یک متغیر تصادفی با قانون توزیع معین خود است. به نظر می رسد که به اندازه کافی بزرگ، قانون توزیع این مجموع به توزیع گاوسی تمایل دارد (به هر حال، عرض مشخصه "زنگ" مانند رشد می کند). بیشتر در ویکی پدیا بخوانید: قضیه حد مرکزی. در زندگی، اغلب مقادیری وجود دارد که از تعداد زیادی متغیر تصادفی مستقل با توزیع مساوی تشکیل شده اند و بنابراین بر اساس گاوسی توزیع می شوند.

منظور داشتن

مقدار متوسط ​​یک متغیر تصادفی همان چیزی است که در حد به دست می آوریم اگر آزمایش های زیادی انجام دهیم و میانگین حسابی مقادیر کاهش یافته را محاسبه کنیم. میانگین به روش های مختلفی نشان داده می شود: ریاضیدانان دوست دارند با (انتظار) نشان دهند و ریاضیدانان خارجی با (انتظار). فیزیکدانان از طریق یا. ما به روش خارجی تعیین خواهیم کرد:.
به عنوان مثال، برای توزیع گاوسی، میانگین است.

پراکندگی

در مورد توزیع گاوسی، ما به وضوح می بینیم که متغیر تصادفی ترجیح می دهد در نزدیکی مقدار میانگین خود سقوط کند. همانطور که از نمودار مشاهده می شود، پراکندگی مشخصه مقادیر سفارش است. اگر توزیع آن را بدانیم، چگونه می توانیم این گسترش مقادیر را برای یک متغیر تصادفی دلخواه تخمین بزنیم. می توانید نموداری از چگالی احتمال آن رسم کنید و عرض مشخصه را با چشم تخمین بزنید. اما ما ترجیح می دهیم در مسیر جبری حرکت کنیم. شما می توانید طول متوسط ​​انحراف (مدول) را از میانگین پیدا کنید:. این مقدار تخمین خوبی از پراکندگی مشخصه مقادیر خواهد بود. اما من و شما به خوبی می دانیم که استفاده از ماژول ها در فرمول ها یک سردرد است، بنابراین این فرمول به ندرت برای تخمین گسترش مشخصه استفاده می شود.
یک راه ساده تر (از نظر محاسبات ساده) یافتن است. این مقدار واریانس نامیده می شود و اغلب به آن اشاره می شود. ریشه واریانس را انحراف معیار می نامند. انحراف استاندارد تخمین خوبی از گسترش یک متغیر تصادفی است.
به عنوان مثال، برای یک توزیع گاوسی، می‌توانیم محاسبه کنیم که واریانس تعریف شده در بالا دقیقاً برابر است، به این معنی که انحراف معیار برابر است، که به خوبی با شهود هندسی ما مطابقت دارد.
در واقع یک کلاهبرداری کوچک در اینجا پنهان است. واقعیت این است که در تعریف توزیع گاوسی، زیر نشانگر عبارت است. این دو در مخرج دقیقاً طوری است که انحراف معیار برابر با ضریب باشد. یعنی خود فرمول توزیع گاوسی به شکلی تیز شده نوشته شده است تا انحراف معیار آن را در نظر بگیریم.

متغیرهای تصادفی مستقل

متغیرهای تصادفی وابسته هستند و نه. تصور کنید که دارید یک سوزن را روی هواپیما می اندازید و مختصات هر دو سر آن را یادداشت می کنید. این دو مختصات وابسته هستند، با این شرط که فاصله بین آنها همیشه برابر با طول سوزن باشد، با هم مرتبط هستند، اگرچه مقادیر تصادفی هستند.
متغیرهای تصادفی در صورتی مستقل هستند که نتیجه اولی کاملاً مستقل از نتیجه دومی باشد. اگر متغیرهای تصادفی مستقل باشند، مقدار متوسط ​​حاصلضرب آنها برابر است با حاصلضرب مقادیر میانگین آنها:

اثبات

برای مثال داشتن چشمان آبی و فارغ التحصیلی از دبیرستان با مدال طلا متغیرهای تصادفی مستقل هستند. اگر مثلاً مدال آوران طلای چشم آبی هستند، پس مدال آوران چشم آبی. این مثال به ما می گوید که اگر متغیرهای تصادفی با چگالی احتمال آنها داده شوند و استقلال این مقادیر در این واقعیت بیان می شود که چگالی احتمال ( مقدار اول حذف شد و دومی) با فرمول پیدا می شود:

بلافاصله از این نتیجه می شود که:

همانطور که می بینید، اثبات برای متغیرهای تصادفی انجام می شود که دارای یک طیف پیوسته از مقادیر هستند و با چگالی احتمال آنها ارائه می شوند. در موارد دیگر، ایده اثبات مشابه است.

فیلتر کالمن

فرمول بندی مسئله

بیایید با مقداری که اندازه گیری می کنیم نشان دهیم و سپس فیلتر کنیم. این می تواند مختصات، سرعت، شتاب، رطوبت، بوی بد، دما، فشار و غیره باشد.
بیایید با یک مثال ساده شروع کنیم که ما را به فرمول یک مسئله کلی سوق می دهد. تصور کنید که ما یک ماشین رادیویی داریم که فقط می تواند رفت و برگشت داشته باشد. با دانستن وزن خودرو، شکل، سطح جاده و غیره، نحوه تاثیر جوی استیک کنترل کننده بر سرعت حرکت را محاسبه کردیم.

سپس مختصات خودرو طبق قانون تغییر می کند:

در زندگی واقعی، ما نمی توانیم در محاسبات خود اغتشاشات کوچکی را که روی ماشین اعمال می شود (باد، دست اندازها، سنگریزه در جاده) در نظر بگیریم، بنابراین سرعت واقعی ماشین با سرعت محاسبه شده متفاوت خواهد بود. یک متغیر تصادفی به سمت راست معادله نوشته شده اضافه می شود:

ما یک سنسور GPS روی ماشین تحریر نصب کرده ایم که سعی می کند مختصات واقعی ماشین را اندازه گیری کند و البته نمی تواند آن را دقیقا اندازه گیری کند اما با خطا اندازه گیری می کند که آن هم یک متغیر تصادفی است. در نتیجه، داده های اشتباهی از سنسور دریافت می کنیم:

وظیفه این است که با دانستن خوانش اشتباه حسگر، یک تقریب خوب برای مختصات واقعی ماشین پیدا کنید.
در فرمول بندی وظیفه کلی، هر چیزی می تواند مسئول مختصات (دما، رطوبت ...) باشد و عبارت مسئول کنترل سیستم از بیرون با (در مثال با ماشین) نشان داده می شود. معادلات برای خواندن مختصات و حسگر به این صورت خواهد بود:

بیایید با جزئیات در مورد آنچه می دانیم بحث کنیم:

شایان ذکر است که وظیفه فیلترینگ یک کار ضد آلیاسینگ نیست. ما سعی نمی کنیم داده های حسگر را صاف کنیم، بلکه سعی می کنیم نزدیک ترین مقدار را به مختصات واقعی بدست آوریم.

الگوریتم کالمن

ما با استقرا استدلال خواهیم کرد. تصور کنید که در مرحله ی هفتم مقدار فیلتر شده را از سنسور پیدا کرده ایم که به خوبی مختصات واقعی سیستم را تقریب می زند. فراموش نکنید که ما معادله ای را می دانیم که تغییر مختصات مجهول را کنترل می کند:

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

این ضریب را ضریب کالمن می نامند. این بستگی به مرحله تکرار دارد، بنابراین نوشتن آن صحیح تر است، اما در حال حاضر، برای اینکه فرمول های محاسباتی به هم نریزند، شاخص آن را حذف می کنیم.
ما باید ضریب کالمن را انتخاب کنیم تا مقدار مختصات بهینه حاصل نزدیکترین مقدار به مقدار واقعی باشد. به عنوان مثال، اگر بدانیم سنسور ما بسیار دقیق است، به خواندن آن بیشتر اعتماد خواهیم کرد و به مقدار وزن بیشتری (نزدیک به یک) خواهیم داد. اگر حسگر، برعکس، کاملاً نادرست باشد، ما بیشتر بر روی مقدار پیش بینی شده تئوری تمرکز خواهیم کرد.
به طور کلی، برای یافتن مقدار دقیق ضریب کالمن، فقط باید خطا را به حداقل برسانید:

ما از معادلات (1) (آنهایی که در کادر با پس زمینه آبی هستند) برای بازنویسی عبارت خطا استفاده می کنیم:

اثبات

اکنون زمان آن است که در مورد معنای حداقل کردن خطا صحبت کنیم؟ از این گذشته، خطا، همانطور که می بینیم، خود یک متغیر تصادفی است و هر بار مقادیر متفاوتی به خود می گیرد. در واقع، هیچ رویکرد یکسانی برای تعریف اینکه به معنای حداقل بودن خطا است، وجود ندارد. همانطور که در مورد واریانس یک متغیر تصادفی، زمانی که سعی کردیم عرض مشخصه گسترش آن را تخمین بزنیم، در اینجا ساده ترین معیار را برای محاسبات انتخاب می کنیم. میانگین خطای مربع را به حداقل می رسانیم:

بیایید آخرین عبارت را بنویسیم:

اثبات

از این واقعیت که همه متغیرهای تصادفی موجود در عبارت for مستقل هستند، نتیجه می‌شود که تمام عبارات متقاطع برابر با صفر هستند:

ما از این واقعیت استفاده کردیم که فرمول واریانس بسیار ساده تر به نظر می رسد:.

این عبارت زمانی که (مشتق را برابر با صفر می کنیم) یک مقدار حداقل به خود می گیرد:

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

وظیفه ما انجام شده است. ما یک فرمول تکراری برای محاسبه ضریب کالمن دریافت کردیم.
بیایید دانش کسب شده خود را در یک چارچوب خلاصه کنیم:

مثال

کد متلب

همه را پاک کن؛ N = 100% تعداد نمونه a = 0.1% شتاب sigmaPsi = 1 sigmaEta = 50; k = 1: N x = k x (1) = 0 z (1) = x (1) + normrnd (0، sigmaEta); برای t = 1: (N-1) x (t + 1) = x (t) + a * t + normrnd (0، sigmaPsi). z (t + 1) = x (t + 1) + normrnd (0, sigmaEta)؛ پایان؛ % فیلتر kalman xOpt (1) = z (1); eOpt (1) = sigmaEta; برای t = 1: (N-1) eOpt (t + 1) = sqrt ((sigmaEta ^ 2) * (eOpt (t) ^ 2 + sigmaPsi ^ 2) / (sigmaEta ^ 2 + eOpt (t) ^ 2 + sigmaPsi ^ 2)) K (t + 1) = (eOpt (t + 1)) ^ 2 / sigmaEta ^ 2 xOpt (t + 1) = (xOpt (t) + a * t) * (1-K (t +1)) + K (t + 1) * z (t + 1) پایان; نمودار (k، xOpt، k، z، k، x)

تحلیل و بررسی

اگر نحوه تغییر ضریب کالمن را با گام تکرار ردیابی کنیم، می توان نشان داد که همیشه تا یک مقدار مشخص ثابت می شود. به عنوان مثال، هنگامی که خطاهای rms سنسور و مدل به یکدیگر مربوط می شوند، آنگاه نمودار ضریب کالمن بسته به مرحله تکرار به صورت زیر است:

در مثال بعدی بحث خواهیم کرد که چگونه این می تواند زندگی ما را بسیار آسان کند.

مثال دوم

در عمل، اغلب اتفاق می افتد که ما اصلاً چیزی در مورد مدل فیزیکی چیزی که فیلتر می کنیم نمی دانیم. به عنوان مثال، شما می خواهید خوانش های شتاب سنج مورد علاقه خود را فیلتر کنید. شما از قبل نمی دانید با چه قانونی قصد دارید شتاب سنج را بچرخانید. بیشترین اطلاعاتی که می توانید بدست آورید، واریانس خطای سنسور است. در چنین شرایط دشواری، تمام ناآگاهی از مدل حرکت می تواند به یک متغیر تصادفی هدایت شود:

اما، صادقانه بگوییم، چنین سیستمی به هیچ وجه شرایطی را که ما بر روی متغیر تصادفی اعمال کردیم برآورده نمی کند، زیرا اکنون تمام فیزیک حرکت ناشناخته برای ما در آنجا پنهان است و بنابراین نمی توان گفت که در لحظات مختلف مدل خطاها مستقل از یکدیگر هستند و مقادیر میانگین آنها صفر است. در این مورد، به طور کلی، نظریه فیلتر کالمن قابل اجرا نیست. اما ما به این واقعیت توجه نخواهیم کرد، بلکه احمقانه تمام فرمول های عظیم را اعمال می کنیم و ضرایب را با چشم انتخاب می کنیم تا داده های فیلتر شده زیبا به نظر برسند.
اما شما می توانید مسیر متفاوت و بسیار ساده تری را انتخاب کنید. همانطور که در بالا دیدیم، ضریب کالمن همیشه به سمت یک مقدار با افزایش تثبیت می شود. بنابراین به جای انتخاب ضرایب و یافتن ضریب کالمن با استفاده از فرمول های پیچیده، می توان این ضریب را همیشه ثابت در نظر گرفت و فقط این ثابت را انتخاب کرد. این فرض تقریباً هیچ چیز را خراب نمی کند. اولاً، ما قبلاً به طور غیرقانونی از نظریه کالمن استفاده می کنیم و ثانیاً ضریب کالمن به سرعت به یک ثابت تثبیت می شود. در نتیجه، همه چیز بسیار ساده خواهد شد. به طور کلی، ما به هیچ فرمولی از نظریه کالمن نیاز نداریم، فقط باید یک مقدار قابل قبول پیدا کنیم و آن را در فرمول تکرار شونده قرار دهیم:

نمودار زیر داده های یک حسگر خیالی را نشان می دهد که به دو روش مختلف فیلتر شده است. به شرطی که از فیزیک پدیده چیزی ندانیم. راه اول صادقانه است، با تمام فرمول های نظریه کالمن. و دومی ساده شده است، بدون فرمول.

همانطور که می بینیم، روش ها تقریباً مشابه هستند. یک تفاوت کوچک فقط در ابتدا مشاهده می شود، زمانی که ضریب کالمن هنوز تثبیت نشده است.

بحث

همانطور که دیدیم، ایده اصلی فیلتر کالمن یافتن ضریبی است که مقدار فیلتر شده است

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

بنابراین فیلتر کالمن را فیلتر خطی می نامند.
می توان ثابت کرد که فیلتر کالمن بهترین فیلتر خطی است. بهترین حالت به این معناست که میانگین مربعات خطای فیلتر حداقل است.

مورد چند بعدی

کل نظریه فیلتر کالمن را می توان به حالت چند بعدی تعمیم داد. فرمول‌های موجود در آنجا کمی ترسناک‌تر به نظر می‌رسند، اما ایده اشتقاق آنها مانند حالت یک بعدی است. می توانید آنها را در این مقاله عالی مشاهده کنید: http://habrahabr.ru/post/140274/.
و در این فوق العاده ویدئونمونه ای از نحوه استفاده از آنها تجزیه و تحلیل شده است.

فیلترهای وینر برای فرآیندهای پردازش یا بخش هایی از فرآیندها به طور کلی (پردازش بلوک) مناسب هستند. برای پردازش متوالی، تخمین فعلی سیگنال در هر چرخه ساعت، با در نظر گرفتن اطلاعات وارد شده به ورودی فیلتر در طول فرآیند مشاهده، مورد نیاز است.

با فیلتر وینر، هر نمونه سیگنال جدید نیاز به محاسبه مجدد وزن فیلتر دارد. در حال حاضر، فیلترهای تطبیقی ​​گسترده شده اند، که در آن اطلاعات جدید دریافتی برای تصحیح مداوم ارزیابی سیگنال قبلی (ردیابی هدف در رادار، سیستم های کنترل خودکار در کنترل و غیره) استفاده می شود. فیلترهای تطبیقی ​​از نوع بازگشتی که به عنوان فیلتر کالمن شناخته می شوند، مورد توجه خاص قرار دارند.

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

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

مشکل تخمین پارامتر

یکی از مسائل تئوری تصمیم گیری های آماری که از اهمیت عملی بالایی برخوردار است، مسئله تخمین بردارهای حالت و پارامترهای سیستم ها است که به صورت زیر فرموله شده است. فرض کنید لازم است مقدار پارامتر برداری $ X $ را تخمین بزنیم، که برای اندازه گیری مستقیم غیرقابل دسترسی است. در عوض، پارامتر دیگری $ Z $، بسته به $ X $ اندازه گیری می شود. مشکل برآورد پاسخ به این سوال است: با دانستن $ Z $ چه چیزی می توان در مورد X $ گفت. در حالت کلی، روش ارزیابی بهینه بردار X $ بستگی به معیار پذیرفته شده کیفیت ارزیابی دارد.

به عنوان مثال، رویکرد بیزی به مسئله تخمین پارامتر نیازمند اطلاعات پیشینی کاملی در مورد خواص احتمالی پارامتری است که تخمین زده می‌شود، که اغلب غیرممکن است. در این موارد، آنها به روش حداقل مربعات (OLS) متوسل می شوند که به اطلاعات پیشینی بسیار کمتری نیاز دارد.

اجازه دهید کاربرد OLS را برای حالتی در نظر بگیریم که بردار مشاهداتی $ Z $ با یک مدل خطی به بردار تخمین پارامتر $ X $ مربوط می شود و مشاهده شامل نویز $ V $ است که با پارامتر تخمینی همبستگی ندارد:

$ Z = HX + V $، (1)

که در آن $ H $ یک ماتریس تبدیل است که رابطه بین کمیت های مشاهده شده و پارامترهای تخمین زده شده را توصیف می کند.

تخمین X $ برای به حداقل رساندن خطای مربع به صورت زیر نوشته می شود:

$ X_ (оц) = (H ^ TR_V ^ (- 1) H) ^ (- 1) H ^ TR_V ^ (- 1) Z $, (2)

اجازه دهید نویز $ V $ همبستگی نداشته باشد، در این مورد ماتریس $ R_V $ فقط ماتریس هویت است و معادله تخمین ساده تر می شود:

$ X_ (ots) = (H ^ TH) ^ (- 1) H ^ TZ $, (3)

نوشتن به صورت ماتریسی تا حد زیادی باعث صرفه جویی در کاغذ می شود، اما ممکن است برای برخی غیرعادی باشد. مثال زیر که از مونوگراف Yu. M. Korshunov، "مبانی ریاضی سایبرنتیک" گرفته شده است، همه اینها را نشان می دهد.
مدار الکتریکی زیر موجود است:

مقادیر مشاهده شده در این مورد، قرائت دستگاه های $ A_1 = 1 A، A_2 = 2 A، V = 20 B $ است.

علاوه بر این، مقاومت $ R = 5 $ اهم مشخص است. لازم است از نقطه نظر معیار حداقل میانگین مربعات خطا، مقادیر جریان های I_1 $ و I_2 $ را به بهترین نحو برآورد کنید. مهمترین چیز در اینجا این است که بین مقادیر مشاهده شده (خوانش ابزار) و پارامترهای برآورد شده رابطه وجود دارد. و این اطلاعات از بیرون وارد می شود.

در این مورد، اینها قوانین Kirchhoff هستند، در مورد فیلتر (که بیشتر مورد بحث قرار خواهد گرفت) - یک مدل خودرگرسیون از یک سری زمانی، که وابستگی مقدار فعلی به موارد قبلی را فرض می کند.

بنابراین، دانش قوانین Kirchhoff، که هیچ ارتباطی با تئوری تصمیمات آماری ندارد، این امکان را ایجاد می کند که بین مقادیر مشاهده شده و پارامترهای تخمین زده شده ارتباط برقرار کند (که مهندسی برق را مطالعه کرده است - آنها می توانند بررسی کنند، بقیه خواهند داشت. حرفشان را قبول کنند):

$$ z_1 = A_1 = I_1 + \ xi_1 = 1 $$

$$ z_2 = A_2 = I_1 + I_2 + \ xi_2 = 2 $$

$$ z_2 = V / R = I_1 + 2 * I_2 + \ xi_3 = 4 $$

به صورت برداری است:

$$ \ begin (vmatrix) z_1 \\ z_2 \\ z_3 \ end (vmatrix) = \ begin (vmatrix) 1 & 0 \\ 1 & 1 \\ 1 & 2 \ end (vmatrix) \ begin (vmatrix) I_1 \ \ I_2 \ end (vmatrix) + \ begin (vmatrix) \ xi_1 \\ \ xi_2 \\ \ xi_3 \ پایان (vmatrix) $$

یا $ Z = HX + V $، که در آن

$$ Z = \ begin (vmatrix) z_1 \\ z_2 \\ z_3 \ end (vmatrix) = \ begin (vmatrix) 1 \\ 2 \\ 4 \ end (vmatrix); H = \ begin (vmatrix) 1 & 0 \\ 1 & 1 \\ 1 & 2 \ end (vmatrix); X = \ begin (vmatrix) I_1 \\ I_2 \ end (vmatrix); V = \ شروع (vmatrix) \ xi_1 \\ \ xi_2 \\ \ xi_3 \ پایان (vmatrix) $$

با در نظر گرفتن مقادیر تداخل بدون همبستگی، برآورد I 1 و I 2 را با روش حداقل مربعات مطابق با فرمول 3 پیدا می کنیم:

$ H ^ TH = \ begin (vmatrix) 1 & 1 & 1 \\ 0 & 1 & 2 \ end (vmatrix) \ begin (vmatrix) 1 & 0 \\ 1 & 1 \\ 1 & 2 \ end (vmatrix) = \ begin (vmatrix) 3 & 3 \\ 3 & 5 \ end (vmatrix); (H ^ TH) ^ (- 1) = \ frac (1) (6) \ begin (vmatrix) 5 & -3 \\ -3 & 3 \ end (vmatrix) $;

$ H ^ TZ = \ شروع (vmatrix) 1 & 1 & 1 \\ 0 & 1 & 2 \ end (vmatrix) \ begin (vmatrix) 1 \\ 2 \\ 4 \ end (vmatrix) = \ شروع (vmatrix) 7 \\ 10 \ پایان (vmatrix)؛ X (ots) = \ frac (1) (6) \ begin (vmatrix) 5 & -3 \\ -3 & 3 \ end (vmatrix) \ begin (vmatrix) 7 \\ 10 \ پایان (vmatrix) = \ frac (1) (6) \ begin (vmatrix) 5 \\ 9 \ end (vmatrix) $;

بنابراین $ I_1 = 5/6 = 0.833 A $; $ I_2 = 9/6 = 1.5 A $.

وظیفه فیلتراسیون

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

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

ابتدا، برآوردی از ارزش فعلی $ x_n $ بر اساس $ k $ موجود از آخرین مقادیر سری زمانی $ z_n، z_ (n-1)، z_ (n-2) \ نقطه z_ بدست می آوریم. (n- (k-1)) $. مدل مشاهده مانند مسئله تخمین پارامتر است:

واضح است که $ Z $ یک بردار ستونی است که از مقادیر مشاهده شده سری زمانی $ z_n، z_ (n-1)، z_ (n-2) \ نقطه z_ (n- (k-1)) تشکیل شده است. $, $ V $ - بردار-ستون تداخل $ \ xi _n, \ xi _ (n-1), \ xi_ (n-2) \ نقطه \ xi_ (n- (k-1)) $، تحریف واقعی علامت. نمادهای $ H $ و $ X $ به چه معنا هستند؟ به عنوان مثال، بردار ستون $ X $ می توانیم در مورد چه چیزی صحبت کنیم اگر تنها چیزی که لازم است تخمینی از ارزش فعلی سری زمانی باشد؟ و منظور از ماتریس تبدیل $ H $ اصلا مشخص نیست.

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

در این مورد، پارامترهای این مدل خاص برآورد می شود. هنگام انتخاب یک مدل تولید سیگنال مناسب، به یاد داشته باشید که هر تابع تحلیلی را می توان در یک سری تیلور گسترش داد. یکی از ویژگی های شگفت انگیز سری تیلور این است که شکل یک تابع در هر فاصله محدود $ t $ از نقطه ای $ x = a $ به طور منحصر به فرد توسط رفتار تابع در یک همسایگی بی نهایت کوچک از نقطه $ x = a تعیین می شود. $ (در مورد مشتقات آن از مرتبه های اول و بالاتر صحبت می کنیم).

بنابراین وجود سری تیلور به این معنی است که تابع تحلیلی دارای ساختار داخلی با جفت بسیار قوی است. برای مثال، اگر خودمان را به سه عضو سری تیلور محدود کنیم، مدل تولید سیگنال به این صورت خواهد بود:

$ x_ (n-i) = F _ (- i) x_n $, (4)

$$ X_n = \ شروع (vmatrix) x_n \\ x "_n \\ x" "_ n \ پایان (vmatrix)؛ F _ (- i) = \ شروع (vmatrix) 1 & -i & i ^ 2/2 \\ 0 & 1 & -i \\ 0 & 0 & 1 \ end (vmatrix) $$

یعنی، فرمول 4، برای یک مرتبه معین از چند جمله ای (در مثال، 2 است) بین مقدار $ n $ -امین سیگنال در توالی زمانی و $ (n-i) $ -th برقرار می کند. بنابراین، بردار حالت تخمین زده شده در این مورد، علاوه بر مقدار واقعی برآورد شده، مشتقات اول و دوم سیگنال را نیز شامل می شود.

در تئوری کنترل خودکار، چنین فیلتری را فیلتر استاتیسم مرتبه دوم می نامند. ماتریس تبدیل $ H $ برای این مورد (تخمین بر اساس نمونه های فعلی و $ k-1 $ انجام می شود) به این صورت است:

$$ H = \ start (vmatrix) 1 & -k & k ^ 2/2 \\ - & - & - \\ 1 & -2 & 2 \\ 1 & -1 & 0.5 \\ 1 & 0 & 0 \\ پایان (vmatrix) $$

همه این اعداد با این فرض که فاصله زمانی بین مقادیر مشاهده شده مجاور ثابت و برابر با 1 است از سری تیلور به دست می آیند.

بنابراین، وظیفه فیلتر تحت فرضیات ما به کار تخمین پارامترها کاهش یافته است. در این مورد، پارامترهای مدل تولید سیگنال اتخاذ شده تخمین زده می شود. و تخمین مقادیر بردار حالت $ X $ طبق همان فرمول 3 انجام می شود:

$$ X_ (ots) = (H ^ TH) ^ (- 1) H ^ TZ $$

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

فرمول 3 را می توان به راحتی به صورت برنامه ای پیاده سازی کرد، برای این کار باید ماتریس $ H $ و ستون برداری مشاهدات $ Z $ را پر کنید. این فیلترها نامیده می شوند فیلترهای حافظه محدود، زیرا آنها از آخرین مشاهدات $ k $ برای بدست آوردن تخمین فعلی $ X_ (نه) $ استفاده می کنند. در هر چرخه مشاهده جدید، یک چرخه جدید به مجموعه مشاهدات فعلی اضافه می شود و چرخه قدیمی کنار گذاشته می شود. این فرآیند کسب نمرات نامیده می شود پنجره کشویی.

افزایش فیلترهای حافظه

فیلترهای با حافظه محدود این عیب اصلی را دارند که پس از هر مشاهده جدید، لازم است مجدداً یک محاسبه مجدد کامل از کلیه داده های ذخیره شده در حافظه انجام شود. علاوه بر این، محاسبه برآوردها را می توان تنها پس از جمع آوری نتایج اولین مشاهدات k $ شروع کرد. یعنی این فیلترها زمان گذرای طولانی دارند.

برای مقابله با این نقص، لازم است از فیلتر حافظه پایدار به فیلتری با آن تغییر دهید حافظه در حال رشد... در چنین فیلتری، تعداد مقادیر مشاهده شده که تخمین برای آنها انجام می شود باید با عدد n مشاهده فعلی منطبق باشد. این امکان به دست آوردن تخمین هایی را می دهد که از تعداد مشاهدات برابر با تعداد اجزای بردار تخمینی X $ شروع می شود. و این با ترتیب مدل اتخاذ شده مشخص می شود، یعنی چند عبارت از سری تیلور در مدل استفاده شده است.

در عین حال، با افزایش n، خواص صاف کننده فیلتر بهبود می یابد، یعنی دقت تخمین ها افزایش می یابد. با این حال، اجرای مستقیم این رویکرد با افزایش هزینه های محاسباتی همراه است. بنابراین، فیلترهای حافظه در حال رشد به عنوان پیاده سازی می شوند عود کننده.

واقعیت این است که تا زمان n ما قبلاً یک تخمین $ X _ ((n-1) оц) $ داریم که حاوی اطلاعاتی در مورد تمام مشاهدات قبلی $ z_n، z_ (n-1)، z_ (n-2) \ نقطه z_ (n- (k-1)) $. تخمین X_ $ (nоц) $ از مشاهده بعدی $ z_n $ با استفاده از اطلاعات ذخیره شده در تخمین $ X _ ((n-1)) (\ mbox (оц)) $ بدست می آید. این روش فیلترینگ مکرر نامیده می شود و شامل موارد زیر است:

  • طبق تخمین $ X _ ((n-1)) (\ mbox (оц)) $ تخمین X_n $ را با فرمول 4 با $ i = 1 $: $ X _ (\ mbox (nоtsapriori)) = F_1X _ ((n-1 ) sc) $. این یک برآورد پیشینی است.
  • با توجه به نتایج مشاهدات فعلی $ z_n $، این تخمین پیشینی به یک تخمین واقعی، یعنی پسینی تبدیل می‌شود.
  • این روش در هر مرحله تکرار می شود، از $ r + 1 $ شروع می شود، که $ r $ ترتیب فیلتر است.

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

$ X _ ((n-1) оц) = X _ (\ mbox (nоtsapriori)) + (H ^ T_nH_n) ^ (- 1) h ^ T_0 (z_n - h_0 X _ (\ mbox (nоtsapriori))) $ ، (6)

فیلتر سفارش دوم ما کجاست:

یک فیلتر حافظه در حال رشد بر اساس فرمول 6 یک مورد خاص از یک الگوریتم فیلتر شناخته شده به عنوان فیلتر کالمن است.

در اجرای عملی این فرمول، باید به خاطر داشت که برآورد پیشینی موجود در آن با فرمول 4 تعیین می شود و مقدار $ h_0 X _ (\ mbox (notspriori)) $ اولین جزء بردار $ X است. _ (\ mbox (notspriori)) $.

فیلتر حافظه در حال رشد یک ویژگی مهم دارد. اگر به فرمول 6 نگاه کنید، نمره نهایی حاصل جمع بردار امتیاز پیش بینی شده و عبارت تصحیح کننده است. این تصحیح برای $ n $ کوچک بزرگ است و با افزایش $ n $ کاهش می یابد و به عنوان $ n \ arrow سمت راست \ infty $ به صفر می رسد. یعنی با افزایش n، خواص صاف کننده فیلتر رشد می کند و مدل ذاتی آن شروع به تسلط می کند. اما سیگنال واقعی فقط در مناطق خاصی می تواند با مدل مطابقت داشته باشد، بنابراین دقت پیش بینی بدتر می شود.

برای مبارزه با این، با شروع از حدود $ n $، منع کاهش بیشتر مدت اصلاح اعمال می شود. این معادل تغییر پهنای باند فیلتر است، یعنی برای n کوچک فیلتر گسترده تر است (اینرسی کمتر) و برای n بزرگ اینرسی بیشتر می شود.

شکل 1 و شکل 2 را با هم مقایسه کنید. در شکل اول، فیلتر حافظه زیادی دارد، در حالی که به خوبی صاف می شود، اما به دلیل باند باریک، مسیر تخمین زده شده از مسیر واقعی عقب است. در شکل دوم، حافظه فیلتر کوچکتر است، بدتر هموار می شود، اما مسیر واقعی را بهتر دنبال می کند.

ادبیات

  1. YM Korshunov "مبانی ریاضی سایبرنتیک"
  2. A.V. Balakrishnan "نظریه فیلتراسیون کالمن"
  3. VNFomin "تخمین تکراری و فیلتر تطبیقی"
  4. C.F.N. Cowen، P.M. اعطای "فیلترهای تطبیقی"

Random Forest یکی از الگوریتم های داده کاوی مورد علاقه من است. اولاً، فوق العاده همه کاره است؛ می توان از آن برای حل مشکلات رگرسیون و طبقه بندی استفاده کرد. جستجو برای ناهنجاری ها و انتخاب پیش بینی کننده ها. ثانیاً، این یک الگوریتم است که اعمال نادرست آن واقعاً دشوار است. صرفاً به این دلیل که بر خلاف سایر الگوریتم‌ها، پارامترهای قابل تنظیم کمی دارد. همچنین در هسته خود به طرز شگفت آوری ساده است. و در عین حال از نظر دقت قابل توجه است.

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

او چگونه کار می کند؟ فرض کنید مقداری داده ورودی داریم. هر ستون مربوط به برخی از پارامترها، هر ردیف مربوط به برخی از عناصر داده است.

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


پنجشنبه 10 می 2012

پنجشنبه 12 ژانویه 2012


همین. پرواز 17 ساعته تمام شده است، روسیه در خارج از کشور باقی مانده است. و از پنجره یک آپارتمان دنج 2 خوابه در سانفرانسیسکو، دره معروف سیلیکون، کالیفرنیا، ایالات متحده آمریکا به ما نگاه می کند. بله، این دقیقاً دلیلی است که من اخیراً عملاً نمی نویسم. ما حرکت کردیم.

همه چیز در آوریل 2011 شروع شد، زمانی که من در حال انجام یک مصاحبه تلفنی در Zynga بودم. سپس همه چیز شبیه نوعی بازی به نظر می رسید که هیچ ربطی به واقعیت ندارد و من حتی نمی توانستم تصور کنم که نتیجه آن چه خواهد بود. در ژوئن 2011، زینگا به مسکو آمد و یک سری مصاحبه انجام داد، حدود 60 کاندیدایی که مصاحبه های تلفنی را پشت سر گذاشته بودند در نظر گرفته شدند و حدود 15 نفر از آنها انتخاب شدند (تعداد دقیق را نمی دانم، شخصی بعدا نظرش را تغییر داد، شخصی بلافاصله نظر خود را تغییر داد. رد). مصاحبه به طرز شگفت آوری ساده بود. بدون کار برنامه نویسی، بدون سؤال پیچیده در مورد شکل دریچه ها، عمدتاً توانایی چت آزمایش شد. و دانش، به نظر من، فقط به صورت سطحی ارزیابی شد.

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

دوشنبه اولین روز کاری من بود. این دفتر همه شرایط را برای نه تنها کار، بلکه برای زندگی دارد. صبحانه، ناهار و شام از سرآشپزهای خودمان، انبوهی از غذاهای متنوع در همه جا، سالن بدنسازی، ماساژ و حتی آرایشگاه. همه اینها برای کارمندان کاملاً رایگان است. بسیاری از مردم با دوچرخه به محل کار خود می رسند و چندین اتاق برای نگهداری وسایل نقلیه وجود دارد. به طور کلی، من هرگز با چنین چیزی در روسیه برخورد نکرده ام. با این حال، هر چیزی قیمت خاص خود را دارد، بلافاصله به ما هشدار داده شد که باید زیاد کار کنیم. آنچه "خیلی" است، با معیارهای آنها، برای من خیلی روشن نیست.

با این حال، امیدوارم با وجود حجم کار، بتوانم وبلاگ نویسی را برای آینده قابل پیش بینی از سر بگیرم و شاید در مورد زندگی و کار آمریکایی به عنوان برنامه نویس در آمریکا چیزی به شما بگویم. صبر کن و ببین. در همین حال، سال نو و کریسمس را به همه تبریک می گویم و به زودی شما را می بینم!


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

نتیجه<- NULL for(i in (1:length(divs[,1]))){ d <- divs if (d$Divs>0) (سعی کنید ((به نقل از<- getSymbols(d$Symbol, src="Finam", from="2010-01-01", auto.assign=FALSE) if (!is.nan(quotes)){ price <- Cl(quotes) if (length(price)>0) (dd<- d$Divs result <- rbind(result, data.frame(d$Symbol, d$Name, d$RegistryDate, as.numeric(dd)/as.numeric(price), stringsAsFactors=FALSE)) } } }, silent=TRUE) } } colnames(result) <- c("Symbol", "Name", "RegistryDate", "Divs") result


به طور مشابه، می توانید آمار سال های گذشته را بسازید.

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

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

این برای چیست؟

هر دستگاه اندازه گیری دارای مقداری خطا است، می تواند تحت تأثیر تعداد زیادی تأثیرات خارجی و داخلی قرار گیرد، که منجر به این واقعیت می شود که اطلاعات از آن نویز است. هر چه داده ها پر سر و صداتر باشند، پردازش چنین اطلاعاتی دشوارتر می شود.

فیلتر یک الگوریتم پردازش داده است که نویز و اطلاعات غیر ضروری را حذف می کند. در فیلتر کالمن می توان اطلاعات پیشینی در مورد ماهیت سیستم، رابطه متغیرها تنظیم کرد و بر این اساس تخمین دقیق تری ساخت، اما حتی در ساده ترین حالت (بدون وارد کردن اطلاعات قبلی). ) نتایج عالی می دهد.

بیایید ساده ترین مثال را در نظر بگیریم - فرض کنید باید سطح سوخت را در مخزن کنترل کنیم. برای انجام این کار، یک سنسور خازنی در مخزن نصب شده است، نگهداری از آن بسیار آسان است، اما دارای معایبی است - به عنوان مثال، وابستگی به سوختی که در حال سوخت گیری است (ثابت دی الکتریک سوخت به عوامل زیادی بستگی دارد، به عنوان مثال، بر روی دما)، تأثیر زیادی از "برجستگی" در مخزن. در نتیجه، اطلاعات از آن نشان دهنده یک "اره" معمولی با دامنه مناسب است. این نوع سنسورها اغلب بر روی تجهیزات معدنی سنگین نصب می شوند (با حجم مخزن اشتباه نگیرید):

فیلتر کالمن

بیایید کمی منحرف شویم و با خود الگوریتم آشنا شویم. فیلتر کالمن از یک مدل دینامیکی سیستم (به عنوان مثال قانون فیزیکی حرکت)، اقدامات کنترلی شناخته شده و بسیاری از اندازه گیری های متوالی برای تشکیل یک تخمین حالت بهینه استفاده می کند. الگوریتم از دو مرحله تکراری تشکیل شده است: پیش بینی و تصحیح. در ابتدا، پیش بینی وضعیت در لحظه بعدی محاسبه می شود (با در نظر گرفتن عدم دقت اندازه گیری آنها). در مرحله دوم، اطلاعات جدید از سنسور مقدار پیش بینی شده را تصحیح می کند (همچنین با در نظر گرفتن عدم دقت و نویز این اطلاعات):

معادلات به صورت ماتریسی ارائه می شوند، اگر جبر خطی را نمی دانید - اشکالی ندارد، یک نسخه ساده شده بدون ماتریس برای مورد با یک متغیر وجود خواهد داشت. در مورد یک متغیر، ماتریس ها به مقادیر اسکالر تبدیل می شوند.

بیایید ابتدا نماد را درک کنیم: زیرنویس لحظه در زمان را نشان می دهد: k - فعلی، (k-1) - قبلی، علامت منفی در بالانویس به این معنی است که پیش بینی کردمقدار متوسط

توضیحات متغیرها در تصاویر زیر ارائه شده است:

می توان برای مدت طولانی و خسته کننده توصیف کرد که همه این ماتریس های انتقال مرموز به چه معنا هستند، اما به نظر من بهتر است سعی کنیم الگوریتم را با استفاده از یک مثال واقعی اعمال کنیم - تا مقادیر انتزاعی معنای واقعی پیدا کنند.

بیایید آن را در عمل امتحان کنیم

بیایید به مثال با سنسور سطح سوخت برگردیم، از آنجایی که وضعیت سیستم با یک متغیر نشان داده می شود (حجم سوخت در مخزن)، ماتریس ها به معادلات معمول تبدیل می شوند:
تعریف مدل فرآیند
برای اعمال فیلتر، ماتریس ها / مقادیر متغیرهایی که دینامیک سیستم و ابعاد F، B و H را تعیین می کنند، ضروری است:

اف- متغیری که دینامیک سیستم را توصیف می کند، در مورد سوخت - این می تواند ضریبی باشد که مصرف سوخت را در حالت بیکار در طول زمان نمونه برداری (زمان بین مراحل الگوریتم) تعیین می کند. اما علاوه بر مصرف سوخت، سوخت گیری نیز وجود دارد ... بنابراین برای سادگی، این متغیر را برابر با 1 می گیریم (یعنی نشان می دهیم که مقدار پیش بینی شده برابر با حالت قبلی خواهد بود).

ب- متغیری که کاربرد عمل کنترل را تعیین می کند. اگر اطلاعات بیشتری در مورد سرعت موتور یا درجه فشار دادن پدال گاز داشتیم، این پارامتر تعیین می کند که مصرف سوخت در طول زمان نمونه برداری چگونه تغییر می کند. از آنجایی که هیچ اقدام کنترلی در مدل ما وجود ندارد (اطلاعاتی در مورد آنها وجود ندارد)، B = 0 را می گیریم.

اچ- ماتریسی که رابطه بین اندازه گیری ها و وضعیت سیستم را تعیین می کند، در حال حاضر بدون توضیح، این متغیر را نیز برابر با 1 می گیریم.

تعریف خواص صاف کنندگی
آر- خطای اندازه گیری را می توان با آزمایش وسایل اندازه گیری و تعیین خطای اندازه گیری آنها تعیین کرد.

س- تعیین نویز فرآیند کار دشوارتری است، زیرا نیاز به تعیین واریانس فرآیند است که همیشه امکان پذیر نیست. در هر صورت، می توانید این پارامتر را انتخاب کنید تا سطح فیلتراسیون مورد نیاز را فراهم کنید.

پیاده سازی در کد
برای رفع عدم درک باقی مانده، اجازه دهید یک الگوریتم ساده شده را در C # (بدون ماتریس و اقدامات کنترلی) پیاده سازی کنیم:

کلاس KalmanFilterSimple1D
{
دو برابر عمومی X0 (دریافت؛ مجموعه خصوصی؛) // حالت پیش بینی شده
دو برابر عمومی P0 (دریافت؛ مجموعه خصوصی؛) // کوواریانس پیش بینی شده

دو برابر عمومی F (دریافت؛ مجموعه خصوصی؛) // ضریب مقدار واقعی به مقدار واقعی قبلی
public double Q (دریافت؛ مجموعه خصوصی؛) // نویز اندازه گیری
عمومی دو برابر H (دریافت؛ مجموعه خصوصی؛) // فاکتور مقدار اندازه گیری شده به مقدار واقعی
عمومی دوبل R (دریافت؛ مجموعه خصوصی؛) // نویز محیط

حالت دوگانه عمومی (دریافت؛ مجموعه خصوصی؛)
کوواریانس دوگانه عمومی (دریافت؛ مجموعه خصوصی؛)

عمومی KalmanFilterSimple1D (q دو برابر، دو برابر r، دو برابر f = 1، دو برابر h = 1)
{
Q = q;
R = r;
F = f;
H = h;
}

SetState void عمومی (وضعیت دوگانه، کوواریانس دوگانه)
{
ایالت = ایالت;
کوواریانس = کوواریانس;
}

صحت خلأ عمومی (اطلاعات مضاعف)
{
// به روز رسانی زمان - پیش بینی
X0 = F * حالت؛
P0 = F * کوواریانس * F + Q;

// به روز رسانی اندازه گیری - تصحیح
var K = H * P0 / (H * P0 * H + R)؛
حالت = X0 + K * (داده - H * X0)؛
کوواریانس = (1 - K * H) * F;
}
}

// کاربرد ...

Var fuelData = GetData ();
var filtered = new list ();

Var kalman = جدید KalmanFilterSimple1D (f: 1, h: 1, q: 2, r: 15); // مجموعه F، H، Q و R
kalman.SetState (fuelData، 0.1)؛ // مقادیر اولیه را برای State و Covariance تنظیم کنید
foreach (var d در سوخت دیتا)
{
kalman.درست (d); // الگوریتم را اعمال کنید

Filtered.Add (kalman.State); // وضعیت فعلی را ذخیره کنید
}

نتیجه فیلتر کردن با این پارامترها در شکل نشان داده شده است (برای تنظیم درجه هموارسازی - می توانید پارامترهای Q و R را تغییر دهید):

جالب ترین چیز خارج از محدوده مقاله باقی مانده است - اعمال فیلتر Kalman برای چندین متغیر، تنظیم رابطه بین آنها و نمایش خودکار مقادیر برای متغیرهای غیر قابل مشاهده. سعی می کنم به محض اینکه فرصت شد موضوع را ادامه دهم.

امیدوارم توضیحات خیلی خسته کننده و پیچیده نباشد، اگر سوال یا توضیحی دارید - به نظرات خوش آمدید)

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

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

در مرحله پیش‌بینی، موارد زیر اتفاق می‌افتد:

  1. پیش بینی وضعیت سیستم:

پیش بینی وضعیت سیستم در زمان فعلی کجاست. - ماتریس انتقال بین حالت ها (مدل پویا سیستم). - پیش بینی وضعیت سیستم در لحظه قبلی در زمان؛ - ماتریس کاربرد عمل کنترل؛ - کنترل عمل در لحظه قبلی در زمان.

  1. پیش بینی کوواریانس خطا:

پیش بینی خطا کجاست - خطا در لحظه قبلی در زمان؛ - کوواریانس نویز فرآیند

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

  1. محاسبه سود کالمن:

سود کالمن کجاست - ماتریسی از اندازه گیری ها که رابطه اندازه گیری ها و حالت ها را نشان می دهد. - کوواریانس نویز اندازه گیری

اندازه گیری در زمان فعلی کجاست

  1. به روز رسانی خطای کوواریانس:

ماتریس هویت کجاست

اگر وضعیت سیستم با یک متغیر توصیف شود، آنگاه = 1، و ماتریس ها به معادلات معمولی تبدیل می شوند.

برای نشان دادن کارایی فیلتر کالمن، آزمایشی با سنسور حجم AVR PIC KY-037 که به میکروکنترلر Arduino Uno متصل است، انجام شد. شکل 1 نموداری از قرائت سنسور بدون فیلتر را نشان می دهد (خط 1). نوسانات آشفته در خروجی سنسور وجود نویز را نشان می دهد.

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

برای اعمال فیلتر، باید مقادیر متغیرها را تعریف کرد، که دینامیک سیستم و ابعاد را تعیین می کند. از آنجایی که هیچ عملیات کنترلی در سیستم وجود ندارد، اجازه دهید برابر با 1 و برابر با 0 باشد. برای تعیین خواص صاف کننده فیلتر، باید مقدار متغیر را محاسبه کرد و همچنین مقدار پارامتر را انتخاب کرد.

متغیر در Microsoft Excel 2010 محاسبه خواهد شد. برای انجام این کار، لازم است انحراف استاندارد برای نمونه قرائت سنسور محاسبه شود. = 0.62. بسته به سطح فیلتراسیون مورد نیاز انتخاب می شود، 0.001 = را می گیریم. در شکل 2، خط دوم نمودار خوانش سنسور را با فیلتر اعمال شده نشان می دهد.

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

از نمودار، می توان نتیجه گرفت که فیلتر با وظیفه فیلتر کردن تداخل مقابله کرد، زیرا در حالت ثابت، نوسانات در قرائت سنسور که از فیلتر عبور کرده اند ناچیز است.

با این حال، فیلتر کالمن یک نقص قابل توجه دارد. اگر مقدار اندازه گیری شده از سنسور بتواند به سرعت تغییر کند، قرائت سنسور فیلتر شده به سرعت مقدار اندازه گیری شده تغییر نخواهد کرد. شکل 3 پاسخ فیلتر کالمن را به جهش در مقدار اندازه گیری شده نشان می دهد.

شکل 3. واکنش فیلتر کالمن به جهش در مقدار اندازه گیری شده

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

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

کتابشناسی - فهرست کتب:

  1. GOST 17657-79. انتقال داده. اصطلاحات و تعاریف. - مسکو: انتشارات خانه استانداردها، 2005. - 2 ص.
  2. فیلتر کالمن // ویکی پدیا. ... تاریخ به روز رسانی: 26.04.2017. URL: http://ru.wikipedia.org/?oldid=85061599 (تاریخ دسترسی: 2017/05/21).