კალმანის ფილტრის გამოყენება სენსორებიდან მიღებული მნიშვნელობების გასაფილტრად. კალმანის ფილტრაცია ოპტიმალური კალმანის ფილტრი

ინტერნეტში, მათ შორის ჰაბრეში, შეგიძლიათ იპოვოთ ბევრი ინფორმაცია კალმანის ფილტრის შესახებ. მაგრამ ძნელია თავად ფორმულების ადვილად ასათვისებელი წარმოშობის პოვნა. დასკვნის გარეშე, მთელი ეს მეცნიერება აღიქმება, როგორც ერთგვარი შამანიზმი, ფორმულები გარეგნულად ემსგავსება სიმბოლოებს და რაც მთავარია, ბევრი მარტივი განცხადება, რომელიც თეორიის ზედაპირზე დევს, გაუგებარია. ამ სტატიის მიზანი იქნება ისაუბროთ ამ ფილტრზე რაც შეიძლება ხელმისაწვდომი ენით.
კალმანის ფილტრი არის მონაცემთა გაფილტვრის მძლავრი ინსტრუმენტი. მისი მთავარი პრინციპია ის, რომ გაფილტვრისას გამოიყენება ინფორმაცია თავად ფენომენის ფიზიკის შესახებ. მაგალითად, თუ თქვენ ფილტრავთ მონაცემებს მანქანის სპიდომეტრიდან, მაშინ მანქანის ინერცია გაძლევთ უფლებას აღიქვათ სიჩქარის ძალიან სწრაფი ნახტომი, როგორც გაზომვის შეცდომა. კალმანის ფილტრი საინტერესოა, რადგან, გარკვეული გაგებით, ის საუკეთესო ფილტრია. ჩვენ უფრო დეტალურად განვიხილავთ ქვემოთ რას ნიშნავს ზუსტად სიტყვა "საუკეთესო". სტატიის ბოლოს მე ვაჩვენებ, რომ ხშირ შემთხვევაში ფორმულები შეიძლება გამარტივდეს იმდენად, რამდენადაც მათგან თითქმის არაფერი დარჩება.

საგანმანათლებლო პროგრამა

სანამ კალმანის ფილტრს გაეცნობი, მე ვთავაზობ გავიხსენო რამდენიმე მარტივი განმარტება და ფაქტი ალბათობის თეორიიდან.

შემთხვევითი მნიშვნელობა

როდესაც ისინი ამბობენ, რომ შემთხვევითი ცვლადია მოცემული, ისინი გულისხმობენ, რომ ამ რაოდენობას შეუძლია მიიღოს შემთხვევითი მნიშვნელობები. იგი იღებს სხვადასხვა მნიშვნელობებს სხვადასხვა ალბათობით. როდესაც აგდებთ, ვთქვათ, კამათელს, ფასეულობების დისკრეტული ნაკრები ამოვარდება :. როდესაც საქმე ეხება, მაგალითად, მოხეტიალე ნაწილაკის სიჩქარეს, მაშინ, ცხადია, უნდა გავუმკლავდეთ ღირებულებების უწყვეტ კომპლექტს. ჩვენ აღვნიშნავთ შემთხვევითი ცვლადის "ამოვარდნილ" მნიშვნელობებს, მაგრამ ზოგჯერ ჩვენ გამოვიყენებთ იმავე ასოს, რომელსაც ვიყენებთ შემთხვევითი ცვლადის აღსანიშნავად:.
მნიშვნელობების უწყვეტი ნაკრების შემთხვევაში, შემთხვევითი ცვლადი ხასიათდება ალბათობის სიმკვრივით, რაც გვკარნახობს, რომ ალბათობა იმისა, რომ შემთხვევითი ცვლადი "ამოვარდება" წერტილის სიგრძის მცირე უბანში ტოლია. როგორც სურათზე ვხედავთ, ეს ალბათობა უდრის გრაფის ქვეშ დაჩრდილული ოთხკუთხედის ფართობს:

ცხოვრებაში საკმაოდ ხშირად, შემთხვევითი ცვლადები არის გაუსი, როდესაც ალბათობის სიმჭიდროვე თანაბარია.

ჩვენ ვხედავთ, რომ ფუნქციას აქვს ზარის ფორმა, რომელიც ორიენტირებულია წერტილში და აქვს რიგის დამახასიათებელი სიგანე.
ვინაიდან ჩვენ ვსაუბრობთ გაუსის განაწილებაზე, ცოდვა იქნება არ აღინიშნოს საიდან გაჩნდა. როგორც რიცხვები მტკიცედ არის დამკვიდრებული მათემატიკაში და გვხვდება ყველაზე მოულოდნელ ადგილებში, ასევე გაუსმა განაწილებამ ღრმა ფესვები მიიღო ალბათობის თეორიაში. ერთი შესამჩნევი განცხადება, რომელიც ნაწილობრივ განმარტავს გაუსის ყოვლისშემძლეობას, არის შემდეგი:
დაე იყოს შემთხვევითი ცვლადი თვითნებური განაწილებით (ფაქტობრივად, არსებობს გარკვეული შეზღუდვები ამ თვითნებობაზე, მაგრამ ისინი საერთოდ არ არის მკაცრი). მოდით ჩავატაროთ ექსპერიმენტები და გამოვთვალოთ შემთხვევითი ცვლადის "გამოტოვებული" მნიშვნელობების ჯამი. მოდით გავაკეთოთ ბევრი ეს ექსპერიმენტი. ნათელია, რომ ყოველ ჯერზე ჩვენ მივიღებთ თანხის განსხვავებულ ღირებულებას. სხვა სიტყვებით რომ ვთქვათ, ეს ჯამი თავისთავად არის შემთხვევითი ცვლადი თავისი გარკვეული განაწილების კანონით. გამოდის, რომ საკმაოდ დიდი, ამ თანხის განაწილების კანონი მიდრეკილია გაუსის განაწილებისკენ (სხვათა შორის, "ზარის" დამახასიათებელი სიგანე იზრდება). წაიკითხეთ მეტი ვიკიპედიაში: ცენტრალური ლიმიტის თეორემა. ცხოვრებაში, ძალიან ხშირად არის რაოდენობა, რომელიც შედგება დიდი რაოდენობით თანაბრად განაწილებული დამოუკიდებელი შემთხვევითი ცვლადებისაგან და, შესაბამისად, განაწილებულია გაუსის მიხედვით.

საშუალო

შემთხვევითი ცვლადის საშუალო მნიშვნელობა არის ის, რასაც ვიღებთ ლიმიტში, თუ ბევრ ექსპერიმენტს ჩავატარებთ და გამოვთვლით ჩამოშვებული მნიშვნელობების არითმეტიკულ საშუალო მაჩვენებელს. საშუალო მნიშვნელობა აღინიშნება სხვადასხვა გზით: მათემატიკოსებს მოსწონთ აღნიშვნა (მოლოდინი) და უცხო მათემატიკოსებს (მოლოდინი). ფიზიკოსები გადიან ან. ჩვენ დავნიშნავთ უცხო გზით:.
მაგალითად, გაუსის განაწილებისთვის საშუალო არის.

დისპერსია

გაუსის განაწილების შემთხვევაში, ჩვენ ნათლად ვხედავთ, რომ შემთხვევითი ცვლადი ამჯობინებს ამოვარდეს მისი საშუალო მნიშვნელობის გარკვეულ უბანში. როგორც გრაფიკიდან ჩანს, რიგის მნიშვნელობების დამახასიათებელი გაფანტვა. როგორ შეგვიძლია შევაფასოთ ღირებულებების ეს გავრცელება თვითნებური შემთხვევითი ცვლადისთვის, თუ ვიცით მისი განაწილება. თქვენ შეგიძლიათ დახაზოთ მისი ალბათობის სიმკვრივის გრაფიკი და შეაფასოთ დამახასიათებელი სიგანე თვალით. მაგრამ ჩვენ გვირჩევნია გავყვეთ ალგებრულ გზას. თქვენ შეგიძლიათ იპოვოთ გადახრის საშუალო სიგრძე (მოდული) საშუალოდან: ეს მნიშვნელობა იქნება ღირებულებების დამახასიათებელი გაფანტვის კარგი შეფასება. მაგრამ მე და თქვენ ძალიან კარგად ვიცით, რომ ფორმულებში მოდულების გამოყენება თავის ტკივილია, ამიტომ ეს ფორმულა იშვიათად გამოიყენება დამახასიათებელი გავრცელების შესაფასებლად.
უფრო მარტივი გზა (მარტივი გამოთვლების თვალსაზრისით) არის პოვნა. ამ მნიშვნელობას ეწოდება ცვალებადობა და ხშირად მოიხსენიება როგორც. ვარიაციის ფესვს ეწოდება სტანდარტული გადახრა. სტანდარტული გადახრა არის შემთხვევითი ცვლადის გავრცელების კარგი შეფასება.
მაგალითად, გაუსის განაწილებისათვის შეგვიძლია გამოვთვალოთ, რომ ზემოთ განსაზღვრული ცვალებადობა ზუსტად თანაბარია, რაც იმას ნიშნავს, რომ სტანდარტული გადახრა თანაბარია, რაც ძალიან კარგად ეთანხმება ჩვენს გეომეტრიულ ინტუიციას.
სინამდვილეში, აქ არის პატარა თაღლითობა დაფარული. ფაქტია, რომ გაუსის განაწილების განსაზღვრებაში ექსპონენტის ქვეშ არის გამოთქმა. ეს ორი მნიშვნელი ზუსტად ისე დგას, რომ სტანდარტული გადახრა ტოლი იქნება კოეფიციენტის. ანუ, გაუსის განაწილების ფორმულა თავად არის დაწერილი სპეციალურად გამკაცრებული ფორმით, რათა განვიხილოთ მისი სტანდარტული გადახრა.

დამოუკიდებელი შემთხვევითი ცვლადები

შემთხვევითი ცვლადები არის დამოკიდებული და არა. წარმოიდგინეთ, რომ თქვენ ნემსს ისვრით თვითმფრინავზე და იწერთ ორივე ბოლოების კოორდინატებს. ეს ორი კოორდინატი არის დამოკიდებული, ისინი დაკავშირებულია იმ პირობით, რომ მათ შორის მანძილი ყოველთვის ტოლია ნემსის სიგრძისა, თუმცა ისინი შემთხვევითი მნიშვნელობებია.
შემთხვევითი ცვლადები დამოუკიდებელია, თუ პირველი მათგანის შედეგი სრულიად დამოუკიდებელია მათგან მეორისგან. თუ შემთხვევითი ცვლადები დამოუკიდებელია, მაშინ მათი პროდუქტის საშუალო ღირებულება უდრის მათი საშუალო მნიშვნელობების პროდუქტს:

მტკიცებულება

მაგალითად, ცისფერი თვალების ქონა და საშუალო სკოლის ოქროს მედლით დამთავრება დამოუკიდებელი შემთხვევითი ცვლადია. თუ არიან ცისფერთვალება, ვთქვათ, ოქროს მედალოსნები, შემდეგ ცისფერთვალება მედლები. ეს მაგალითი გვეუბნება, რომ თუ შემთხვევითი ცვლადები და მათი ალბათობის სიმჭიდროვეთაა მოცემული, მაშინ ამ ღირებულებების დამოუკიდებლობა გამოიხატება იმაში, რომ ალბათობის სიმჭიდროვე (პირველი მნიშვნელობა ამოვარდა, ხოლო მეორე) გვხვდება ფორმულით:

აქედან დაუყოვნებლივ გამომდინარეობს, რომ:

როგორც ხედავთ, მტკიცებულება ხორციელდება შემთხვევითი ცვლადებისთვის, რომლებსაც აქვთ ღირებულებების უწყვეტი სპექტრი და მათი ალბათობის სიმჭიდროვით არის მოცემული. სხვა შემთხვევებში, მტკიცების იდეა მსგავსია.

კალმანის ფილტრი

პრობლემის ფორმულირება

მოდით აღვნიშნოთ იმ მნიშვნელობით, რომელსაც გავზომავთ და შემდეგ გავფილტროთ. ეს შეიძლება იყოს კოორდინატი, სიჩქარე, აჩქარება, ტენიანობა, სუნი, ტემპერატურა, წნევა და ა.
დავიწყოთ მარტივი მაგალითით, რომელიც მიგვიყვანს ზოგადი პრობლემის ჩამოყალიბებაში. წარმოიდგინეთ, რომ ჩვენ გვყავს რადიო კონტროლირებადი მანქანა, რომელსაც მხოლოდ წინ და უკან წასვლა შეუძლია. იცოდა მანქანის წონა, ფორმა, გზის ზედაპირი და ა.შ., ჩვენ გამოვთვალეთ, თუ როგორ მოქმედებს მაკონტროლებელი ჯოისტიკი მოძრაობის სიჩქარეზე.

შემდეგ მანქანის კოორდინატი შეიცვლება კანონის შესაბამისად:

რეალურ ცხოვრებაში, ჩვენ არ შეგვიძლია გავითვალისწინოთ მანქანაში მოქმედი მცირე დარღვევები (ქარი, მუწუკები, კენჭები გზაზე), შესაბამისად, მანქანის რეალური სიჩქარე განსხვავდება გამოთვლილიდან. შემთხვევითი ცვლადი დაემატება წერილობითი განტოლების მარჯვენა მხარეს:

ჩვენ გვაქვს საბეჭდი მანქანაზე დაყენებული GPS სენსორი, რომელიც ცდილობს მანქანის ნამდვილი კოორდინატის გაზომვას და, რა თქმა უნდა, ზუსტად ვერ გაზომავს, მაგრამ ზომავს მას შეცდომით, რაც ასევე შემთხვევითი ცვლადია. შედეგად, ჩვენ ვიღებთ მცდარ მონაცემებს სენსორისგან:

ამოცანა ის არის, რომ მცდარი სენსორის კითხვისას ვიპოვოთ კარგი მიახლოება მანქანის ნამდვილი კოორდინატისთვის.
ზოგადი ამოცანის ფორმულირებისას, ყველაფერი შეიძლება იყოს პასუხისმგებელი კოორდინატზე (ტემპერატურა, ტენიანობა ...), ხოლო ტერმინი, რომელიც პასუხისმგებელია სისტემის გარედან კონტროლზე, აღინიშნება (მაგალითად მანქანასთან). კოორდინატებისა და სენსორების კითხვების განტოლებები ასე გამოიყურება:

მოდით განვიხილოთ დეტალურად რა ვიცით:

აღსანიშნავია, რომ გაფილტვრის ამოცანა არ არის გამამხნევებელი ამოცანა. ჩვენ არ ვცდილობთ მონაცემების გასუფთავებას სენსორიდან, ჩვენ ვცდილობთ მივიღოთ უახლოესი მნიშვნელობა რეალურ კოორდინატთან.

კალმანის ალგორითმი

ჩვენ ვიკამათებთ ინდუქციით. წარმოიდგინეთ, რომ მე –5 საფეხურზე ჩვენ უკვე ვიპოვნეთ სენსორის გაფილტრული მნიშვნელობა, რომელიც კარგად უახლოვდება სისტემის ნამდვილ კოორდინატს. ნუ დაგავიწყდებათ, რომ ჩვენ ვიცით განტოლება, რომელიც აკონტროლებს უცნობი კოორდინატის ცვლილებას:

ამიტომ, სენსორისგან ჯერ არ ვიღებთ მნიშვნელობას, შეგვიძლია ვივარაუდოთ, რომ ერთი ნაბიჯით სისტემა ვითარდება ამ კანონის შესაბამისად და სენსორი აჩვენებს რაღაც ახლობელს. სამწუხაროდ, ჯერჯერობით უფრო ზუსტად ვერაფერს ვიტყვით. მეორეს მხრივ, ნაბიჯზე, ჩვენ გვექნება არაზუსტი სენსორი, რომელიც კითხულობს ჩვენს ხელებს.
კალმანის იდეა ასეთია. ნამდვილ კოორდინატთან საუკეთესო მიახლოების მიზნით, ჩვენ უნდა შევარჩიოთ შუა საფუძველი არაზუსტი სენსორის წაკითხვისა და იმის პროგნოზირებას შორის, თუ რას ველოდით მისგან. ჩვენ წონას მივცემთ სენსორის კითხვას და წონა დარჩება პროგნოზირებულ მნიშვნელობაზე:

კოეფიციენტს ეწოდება კალმანის კოეფიციენტი. ეს დამოკიდებულია გამეორების საფეხურზე, ასე რომ უფრო სწორი იქნება მისი დაწერა, მაგრამ ჯერჯერობით, იმისათვის, რომ არ დავტვირთოთ გაანგარიშების ფორმულები, ჩვენ გამოვტოვებთ მის ინდექსს.
ჩვენ უნდა ავირჩიოთ კალმანის კოეფიციენტი ისე, რომ შედეგად მიღებული ოპტიმალური კოორდინატის მნიშვნელობა იყოს ყველაზე ახლოს ჭეშმარიტთან. მაგალითად, თუ ჩვენ ვიცით, რომ ჩვენი სენსორი არის ძალიან ზუსტი, მაშინ ჩვენ უფრო მეტად ვენდობით მის კითხვას და მნიშვნელობას მივცემთ მეტ წონას (ერთთან ახლოს). თუ სენსორი, პირიქით, სრულიად არაზუსტია, მაშინ ჩვენ უფრო მეტად გავამახვილებთ ყურადღებას თეორიულად პროგნოზირებულ მნიშვნელობაზე.
ზოგადად, კალმანის კოეფიციენტის ზუსტი მნიშვნელობის საპოვნელად, თქვენ უბრალოდ უნდა შეამციროთ შეცდომა:

ჩვენ ვიყენებთ განტოლებებს (1) (ჩარჩოში ლურჯი ფონის მქონე) შეცდომის გამოთქმის გადასაწერად:

მტკიცებულება

ახლა დროა ვიმსჯელოთ რას ნიშნავს გამონათქვამი შეცდომების მინიმიზაცია? ყოველივე ამის შემდეგ, შეცდომა, როგორც ვხედავთ, თავისთავად არის შემთხვევითი ცვლადი და ყოველ ჯერზე იღებს სხვადასხვა მნიშვნელობას. სინამდვილეში, არ არსებობს ცალ-ცალკე მიდგომა იმის დასადგენად, თუ რას ნიშნავს ეს შეცდომა არის მინიმალური. ისევე, როგორც შემთხვევითი ცვლადის ცვალებადობის შემთხვევაში, როდესაც ჩვენ ვცდილობდით შევაფასოთ მისი გავრცელების დამახასიათებელი სიგანე, ასევე აქ შევარჩევთ უმარტივეს კრიტერიუმს გამოთვლებისთვის. ჩვენ მინიმუმამდე დავიყვანთ კვადრატულ შეცდომას:

მოდით დავწეროთ ბოლო გამოთქმა:

მტკიცებულება

იქიდან გამომდინარე, რომ ყველა შემთხვევითი ცვლადი, რომელიც შედის გამოთქმაში, დამოუკიდებელია, აქედან გამომდინარეობს, რომ ყველა "ჯვრის" ტერმინი ნულის ტოლია:

ჩვენ გამოვიყენეთ ის ფაქტი, რომ მაშინ ვარიაციის ფორმულა გაცილებით მარტივად გამოიყურება:

ეს გამოთქმა იღებს მინიმალურ მნიშვნელობას, როდესაც (ჩვენ წარმოებულს ვატოლებთ ნულს):

აქ ჩვენ უკვე ვწერთ გამოთქმას კალმანის კოეფიციენტისთვის საფეხურის ინდექსით, რითაც ჩვენ ხაზს ვუსვამთ, რომ ეს დამოკიდებულია გამეორების საფეხურზე.
ჩვენ ვიცვლით მიღებულ ოპტიმალურ მნიშვნელობას გამოთქმაში, რომელიც ჩვენ მინიმუმამდე დავიყვანეთ. Ჩვენ მივიღეთ;

ჩვენი ამოცანა შესრულებულია. ჩვენ მივიღეთ განმეორებითი ფორმულა კალმანის კოეფიციენტის გამოსათვლელად.
მოდით შევაჯამოთ მიღებული ცოდნა ერთ ჩარჩოში:

მაგალითი

Matlab კოდი

Ყველაფრის გასუფთავება; N = 100% ნიმუშების რაოდენობა a = 0.1% აჩქარების სიგმაპსი = 1 სიგმა ეტა = 50; k = 1: N x = k x (1) = 0 z (1) = x (1) + normrnd (0, sigmaEta); for 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; for 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/.
და ამ მშვენიერ ვიდეოგაანალიზებულია მათი გამოყენების მაგალითი.

Wiener ფილტრები საუკეთესოდ შეეფერება დამუშავების პროცესებს ან ზოგადად პროცესების მონაკვეთებს (ბლოკის დამუშავება). თანმიმდევრული დამუშავებისათვის საჭიროა სიგნალის თითოეული საათის ციკლის შეფასება, დაკვირვების პროცესში ფილტრის შეყვანისას ინფორმაციის გათვალისწინებით.

ვიენერის გაფილტვრით, სიგნალის ყოველი ახალი ნიმუში მოითხოვს ყველა ფილტრის წონის გადაანგარიშებას. ამჟამად, ფართოდ გავრცელდა ადაპტური ფილტრები, რომლებშიც შემომავალი ახალი ინფორმაცია გამოიყენება ადრე გაკეთებული სიგნალის შეფასების უწყვეტად შესასწორებლად (რადარის სამიზნეზე თვალყურის დევნება, კონტროლის ავტომატური სისტემები და ა. განსაკუთრებით საინტერესოა რეკურსიული ტიპის ადაპტური ფილტრები, რომლებიც ცნობილია როგორც კალმანის ფილტრი.

ეს ფილტრები ფართოდ გამოიყენება საკონტროლო მარყუჟებში ავტომატური რეგულირებისა და კონტროლის სისტემებში. სწორედ იქ გამოჩნდნენ ისინი, რასაც მოწმობს ისეთი სპეციფიკური ტერმინოლოგია, რომელიც გამოიყენება მათი მუშაობის აღსაწერად, როგორც სახელმწიფო სივრცე.

ერთ -ერთი მთავარი ამოცანა, რომელიც უნდა გადაწყდეს ნერვული გამოთვლის პრაქტიკაში არის ნერვული ქსელების სწავლის სწრაფი და საიმედო ალგორითმების მოპოვება. ამ მხრივ, შეიძლება სასარგებლო იყოს გამოხმაურების მარყუჟში წრფივი ფილტრების გამოყენება. ვინაიდან სასწავლო ალგორითმები განმეორებითი ხასიათისაა, ასეთი ფილტრი უნდა იყოს თანმიმდევრული რეკურსიული შემფასებელი.

პარამეტრების შეფასების პრობლემა

სტატისტიკური გადაწყვეტილებების თეორიის ერთ -ერთი პრობლემა, რომელსაც დიდი პრაქტიკული მნიშვნელობა აქვს, არის სისტემების სახელმწიფო ვექტორებისა და პარამეტრების შეფასების პრობლემა, რომელიც ჩამოყალიბებულია შემდეგნაირად. დავუშვათ, აუცილებელია შეფასდეს ვექტორული პარამეტრის ღირებულება $ X $, რომელიც მიუწვდომელია პირდაპირი გაზომვისთვის. ამის ნაცვლად, იზომება სხვა პარამეტრი $ Z $, რაც დამოკიდებულია $ X $. შეფასების პრობლემა არის კითხვაზე პასუხის გაცემა: რა შეიძლება ითქვას $ X $, $ Z $ იცის. ზოგად შემთხვევაში, $ 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)

მატრიცის ფორმით წერა მნიშვნელოვნად დაზოგავს ქაღალდს, მაგრამ ზოგისთვის ეს შეიძლება უჩვეულო იყოს. შემდეგი მაგალითი, აღებული იუ.მ.კორშუნოვის მონოგრაფიიდან "კიბერნეტიკის მათემატიკური საფუძვლები", ასახავს ამ ყველაფერს.
შესაძლებელია შემდეგი ელექტრული წრე:

ამ შემთხვევაში დაკვირვებული მნიშვნელობებია მოწყობილობების კითხვა $ A_1 = 1 A, A_2 = 2 A, V = 20 B $.

გარდა ამისა, წინააღმდეგობა $ R = 5 $ Ohm ცნობილია. საჭიროა შეფასდეს საუკეთესოდ, შეცდომის მინიმალური საშუალო კვადრატის კრიტერიუმის თვალსაზრისით, დენების მნიშვნელობები $ I_1 $ და $ I_2 $. აქ ყველაზე მნიშვნელოვანი ის არის, რომ არსებობს გარკვეული კავშირი დაკვირვებულ მნიშვნელობებს (ინსტრუმენტის კითხვას) და სავარაუდო პარამეტრებს შორის. და ეს ინფორმაცია შემოტანილია გარედან.

ამ შემთხვევაში, ეს არის კირჰჰოფის კანონები, გაფილტვრის შემთხვევაში (რომელიც შემდგომში იქნება განხილული) - დროის სერიის ავტორეგრესიული მოდელი, რომელიც ითვალისწინებს მიმდინარე მნიშვნელობის დამოკიდებულებას წინაზე.

ამრიგად, კირხჰოფის კანონების ცოდნა, რომელსაც საერთო არაფერი აქვს სტატისტიკური გადაწყვეტილებების თეორიასთან, შესაძლებელს ხდის კავშირის დამყარებას დაკვირვებულ მნიშვნელობებსა და სავარაუდო პარამეტრებს შორის (ვინც შეისწავლა ელექტროტექნიკა - მათ შეუძლიათ შეამოწმონ, დანარჩენს ექნება რომ მიიღონ თავიანთი სიტყვა):

$$ 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 \ დასასრული (vmatrix) + \ დასაწყისი (vmatrix) \ xi_1 \\ \ xi_2 \\ \ xi_3 \ დასასრული (vmatrix) $$

ან $ Z = HX + V $, სად

$$ Z = \ დაიწყოს (vmatrix) z_1 \\ z_2 \\ z_3 \ end (vmatrix) = \ დაიწყოს (vmatrix) 1 \\ 2 \\ 4 \ end (vmatrix); H = \ დაწყება (vmatrix) 1 & 0 \\ 1 & 1 \\ 1 & 2 \ დასასრული (vmatrix); X = \ დაწყება (vmatrix) I_1 \\ I_2 \ დასასრული (vmatrix); V = \ დაწყება (vmatrix) \ xi_1 \\ \ xi_2 \\ \ xi_3 \ დასასრული (vmatrix) $$

ერთმანეთთან შეუსაბამო ჩარევის მნიშვნელობების გათვალისწინებით, ჩვენ ვპოულობთ I 1 და I 2 შეფასებებს უმცირესი კვადრატების მეთოდით, ფორმულის 3 შესაბამისად:

$ H ^ TH = \ დაწყება (vmatrix) 1 & 1 & 1 \\ 0 & 1 & 2 \ დასასრული (vmatrix) \ დასაწყისი (vmatrix) 1 & 0 \\ 1 & 1 \\ 1 & 2 \ დასასრული (vmatrix) = \ დაწყება (vmatrix) 3 & 3 \\ 3 & 5 \ end (vmatrix); (H ^ TH) ^ ( -1) = \ frac (1) (6) \ დაწყება (vmatrix) 5 & -3 \\ -3 & 3 \ დასასრული (vmatrix) $;

$ H ^ TZ = \ დაწყება (vmatrix) 1 & 1 & 1 \\ 0 & 1 & 2 \ დასასრული (vmatrix) \ დასაწყისი (vmatrix) 1 \\ 2 \\ 4 \ end (vmatrix) = \ დასაწყისი (vmatrix) 7 \ \ 10 \ დასასრული (vmatrix); X (оц) = \ frac (1) (6) \ დაწყება (vmatrix) 5 & -3 \\ -3 & 3 \ end (vmatrix) \ begin (vmatrix) 7 \\ 10 \ end (vmatrix) = \ frac (1) (6) \ დაწყება (vmatrix) 5 \\ 9 \ end (vmatrix) $;

ასე რომ $ I_1 = 5/6 = 0.833 A $; $ I_2 = 9/6 = 1.5 A $.

ფილტრაციის ამოცანა

პარამეტრების შეფასების პრობლემისგან განსხვავებით, რომელთაც აქვთ ფიქსირებული მნიშვნელობები, გაფილტვრის პრობლემისას საჭიროა პროცესების შეფასება, ანუ დროის ცვალებადი სიგნალის მიმდინარე შეფასებების პოვნა, ჩარევის შედეგად დამახინჯებული და, შესაბამისად, მიუწვდომელია პირდაპირი გაზომვისთვის. ზოგადად, ფილტრაციის ალგორითმების ტიპი დამოკიდებულია სიგნალისა და ხმაურის სტატისტიკურ თვისებებზე.

ჩვენ ვივარაუდებთ, რომ სასარგებლო სიგნალი არის დროის ნელა ცვალებადი ფუნქცია, ხოლო ჩარევა არის დაუკავშირებელი ხმაური. ჩვენ გამოვიყენებთ უმცირესი კვადრატების მეთოდს, ისევ სიგნალისა და ჩარევის სავარაუდო მახასიათებლების შესახებ აპრიორული ინფორმაციის ნაკლებობის გამო.

პირველ რიგში, ჩვენ ვიღებთ შეფასებას $ x_n $ მიმდინარე ღირებულების საფუძველზე $ k_ დროის სერიის უახლესი ღირებულებების $ k_ $, 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 \ დასასრული (vmatrix) $$

ანუ, ფორმულა 4, მრავალწევრის მოცემული რიგისთვის (მაგალითში, ეს არის 2) ადგენს კავშირს სიგნალის $ n $ -th მნიშვნელობას დროის თანმიმდევრობით და $ (n -i) $ -th. ამრიგად, ამ შემთხვევაში სავარაუდო მდგომარეობის ვექტორი მოიცავს, ფაქტობრივი სავარაუდო მნიშვნელობის გარდა, სიგნალის პირველ და მეორე წარმოებულებს.

ავტომატური კონტროლის თეორიაში ასეთ ფილტრს ეწოდება მე -2 რიგის ასტატიზმის ფილტრი. ამ შემთხვევაში ტრანსფორმაციის მატრიცა $ H $ (შეფასება ხდება მიმდინარე და $ k-1 $ წინა ნიმუშების საფუძველზე) ასე გამოიყურება:

$$ H = \ დაიწყოს (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_ (არა) $ მიიღება შემდეგი დაკვირვებიდან $ z_n $ შეფასებით შენახული ინფორმაციის გამოყენებით $ X _ ((n-1)) (\ mbox (оц)) $. ამ პროცედურას ეწოდება განმეორებითი გაფილტვრა და მოიცავს შემდეგს:

  • შეფასების მიხედვით $ X _ ((n-1)) (\ mbox (оц)) $ პროგნოზირება $ X_n $ შეფასებით ფორმულა 4-ით $ i = 1 $: $ X _ (\ mbox (notsapriori)) = F_1X _ ((n-1) sc) $. ეს არის აპრიორი შეფასება;
  • ამჟამინდელი დაკვირვების შედეგების მიხედვით $ z_n $, ეს აპრიორი შეფასება გარდაიქმნება ნამდვილ, ანუ შემდგომში;
  • ეს პროცედურა მეორდება ყოველ საფეხურზე, დაწყებული $ r + 1 $, სადაც $ r $ არის ფილტრის შეკვეთა.

განმეორებითი გაფილტვრის საბოლოო ფორმულა ასე გამოიყურება:

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

სადაც ჩვენი მეორე რიგის ფილტრია:

მეხსიერების მზარდი ფილტრი, რომელიც მუშაობს ფორმულა 6 -ის შესაბამისად, არის ფილტრაციის ალგორითმის განსაკუთრებული შემთხვევა, რომელიც ცნობილია როგორც კალმანის ფილტრი.

ამ ფორმულის პრაქტიკული განხორციელებისას აუცილებელია გახსოვდეთ, რომ მასში შემავალი აპრიორი შეფასება განისაზღვრება ფორმულა 4 -ით, ხოლო ღირებულება $ h_0 X _ (\ mbox (notspriori)) $ არის ვექტორის პირველი კომპონენტი $ X _ (\ mbox (notspriori)) $.

მეხსიერების მზარდ ფილტრს აქვს ერთი მნიშვნელოვანი თვისება. თუ გადავხედავთ ფორმულას 6, მაშინ საბოლოო ქულა არის პროგნოზირებული ქულის ვექტორის ჯამი და გამასწორებელი ტერმინი. ეს შესწორება დიდია მცირე $ n $ - ით და მცირდება $ n $ - ის გაზრდით, ნულის ტოლფასია $ n \ rightarrow \ infty $. ანუ, n– ის მატებასთან ერთად იზრდება ფილტრის დამარბილებელი თვისებები და მასში თანდაყოლილი მოდელი იწყებს დომინირებას. მაგრამ რეალური სიგნალი შეიძლება შეესაბამებოდეს მოდელს მხოლოდ გარკვეულ სფეროებში, შესაბამისად, პროგნოზის სიზუსტე უარესდება.

ამის წინააღმდეგ საბრძოლველად, $ n $ - დან, იკრძალება შესწორების ვადის შემდგომი შემცირება. ეს უდრის ფილტრის გამტარუნარიანობის შეცვლას, ანუ მცირე n– ისთვის ფილტრი უფრო ფართოა (ნაკლებად ინერტული), დიდი n– ისთვის ხდება უფრო ინერტული.

შეადარეთ სურათი 1 და სურათი 2. პირველ ფიგურაში, ფილტრს აქვს დიდი მეხსიერება, ხოლო ის კარგად გლუვდება, მაგრამ ვიწრო ზოლის გამო, სავარაუდო ტრაექტორია ჩამორჩება რეალურს. მეორე ფიგურაში, ფილტრის მეხსიერება უფრო მცირეა, ის უარესად გლუვდება, მაგრამ უკეთესად აკონტროლებს რეალურ ტრაექტორიას.

ლიტერატურა

  1. YM კორშუნოვი "კიბერნეტიკის მათემატიკური საფუძვლები"
  2. A.V. ბალაკრიშნანი "კალმანის ფილტრაციის თეორია"
  3. VNFomin "განმეორებითი შეფასება და ადაპტირებული გაფილტვრა"
  4. C.F.N. Cowen, P.M. გრანტი "ადაპტირებული ფილტრები"

შემთხვევითი ტყე არის ჩემი ერთ -ერთი საყვარელი მონაცემთა მოპოვების ალგორითმი. ჯერ ერთი, ის წარმოუდგენლად მრავალმხრივია, მისი გამოყენება შესაძლებელია როგორც რეგრესიის, ასევე კლასიფიკაციის პრობლემების გადასაჭრელად. მოძებნეთ ანომალიები და შეარჩიეთ წინასწარმეტყველები. მეორეც, ეს არის ალგორითმი, რომლის არასწორი გამოყენება მართლაც ძნელია. უბრალოდ იმიტომ, რომ სხვა ალგორითმებისგან განსხვავებით, მას აქვს რამდენიმე კონფიგურირებადი პარამეტრი. ის ასევე გასაკვირი მარტივია მის არსში. და ამავე დროს, აღსანიშნავია თავისი სიზუსტით.

რა არის იდეა ასეთი მშვენიერი ალგორითმის უკან? იდეა მარტივია: ვთქვათ, ჩვენ გვაქვს ძალიან სუსტი ალგორითმი, ვთქვათ. თუ ჩვენ გავაკეთებთ უამრავ განსხვავებულ მოდელს ამ სუსტი ალგორითმის გამოყენებით და მათი პროგნოზის შედეგს საშუალოდ მივიღებთ, მაშინ საბოლოო შედეგი ბევრად უკეთესი იქნება. ეს არის ეგრეთ წოდებული ანსამბლის სწავლება მოქმედებაში. ამიტომ შემთხვევითი ტყის ალგორითმს ეწოდება "შემთხვევითი ტყე", მიღებული მონაცემებისათვის ის ქმნის გადაწყვეტილების ბევრ ხეს და შემდეგ საშუალოდ ახდენს მათი პროგნოზების შედეგს. აქ მნიშვნელოვანი პუნქტი არის შემთხვევითობის ელემენტი თითოეული ხის შექმნისას. ყოველივე ამის შემდეგ, ნათელია, რომ თუ ჩვენ შევქმნით ბევრ იდენტურ ხეს, მაშინ მათი საშუალო მაჩვენებლის შედეგს ექნება ერთი ხის სიზუსტე.

როგორ მუშაობს ის? დავუშვათ, რომ ჩვენ გვაქვს შეყვანის მონაცემები. თითოეული სვეტი შეესაბამება ზოგიერთ პარამეტრს, თითოეული სტრიქონი შეესაბამება მონაცემთა ზოგიერთ ელემენტს.

ჩვენ შეგვიძლია შემთხვევით შევარჩიოთ გარკვეული რაოდენობის სვეტი და სტრიქონი მთელი მონაცემთა ნაკრებიდან და მათზე დაყრდნობით შევქმნათ გადაწყვეტილების ხე.


ხუთშაბათი, 2012 წლის 10 მაისი

ხუთშაბათი, 2012 წლის 12 იანვარი


Სულ ეს არის. 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) (დდ<- 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 (მიიღეთ; პირადი ნაკრები;) // ფაქტობრივი რეალური ღირებულების წინა რეალური მნიშვნელობა
საზოგადოებრივი ორმაგი Q (მიიღეთ; პირადი ნაკრები;) // ხმაურის გაზომვა
საჯარო ორმაგი H (მიიღეთ; კერძო ნაკრები;) // გაზომილი ღირებულების ფაქტორი რეალურ მნიშვნელობასთან
საჯარო ორმაგი R (მიიღეთ; პირადი ნაკრები;) // გარემოს ხმაური

საჯარო ორმაგი სახელმწიფო (მიიღეთ; კერძო ნაკრები;)
საჯარო ორმაგი კოვარიანობა (მიიღეთ; პირადი ნაკრები;)

საზოგადოებრივი KalmanFilterSimple1D (ორმაგი q, ორმაგი r, ორმაგი f = 1, ორმაგი h = 1)
{
Q = q;
R = r;
F = f;
H = h;
}

საჯარო ბათილი SetState (ორმაგი მდგომარეობა, ორმაგი კოვარიანობა)
{
სახელმწიფო = სახელმწიფო;
კოვარიანობა = კოვარიანობა;
}

საჯარო სიცარიელე სწორია (ორმაგი მონაცემები)
{
// დროის განახლება - პროგნოზირება
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 გაფილტრული = ახალი სია ();

ვარ კალმანი = ახალი KalmanFilterSimple1D (f: 1, h: 1, q: 2, r: 15); // კომპლექტი F, H, Q და R
kalman.SetState (fuelData, 0.1); // დაადგინეთ საწყისი მნიშვნელობები მდგომარეობისა და კოვარიანობისათვის
foreach (var d in fuelData)
{
კალმანი. სწორი (დ); // ალგორითმის გამოყენება

გაფილტრული. დამატება (კალმანი. სახელმწიფო); // შეინახეთ არსებული მდგომარეობა
}

ამ პარამეტრებით გაფილტვრის შედეგი ნაჩვენებია ფიგურაში (გასწორების ხარისხის შესაცვლელად - შეგიძლიათ შეცვალოთ Q და R პარამეტრები):

სტატიის ყველაზე საინტერესო ნაწილი რჩება - კალმანის ფილტრის გამოყენება რამდენიმე ცვლადისთვის, მათ შორის ურთიერთობის დადგენა და ღირებულებების ავტომატური გამომუშავება დაუკვირვებელი ცვლადებისთვის. ვეცდები გავაგრძელო თემა, როგორც კი დრო იქნება.

ვიმედოვნებ, რომ აღწერა არც თუ ისე დამღლელი და რთული აღმოჩნდა, თუ თქვენ გაქვთ რაიმე შეკითხვა ან განმარტება - მივესალმები კომენტარებს)

მექანიზმებისა და ერთეულების კონტროლის ტექნოლოგიური პროცესების ავტომატიზაციის პროცესში, თქვენ უნდა გაუმკლავდეთ სხვადასხვა ფიზიკური სიდიდის გაზომვებს. ეს შეიძლება იყოს სითხის ან აირის წნევა და ნაკადის სიჩქარე, სიჩქარე, ტემპერატურა და მრავალი სხვა. ფიზიკური რაოდენობების გაზომვა ხორციელდება ანალოგური სენსორების გამოყენებით. ანალოგური სიგნალი არის მონაცემთა სიგნალი, რომელშიც თითოეული წარმოდგენილი პარამეტრი აღწერილია დროის ფუნქციით და შესაძლო მნიშვნელობების უწყვეტი ნაკრებით. ღირებულებითი სივრცის უწყვეტობიდან გამომდინარეობს, რომ სიგნალში შეტანილი ნებისმიერი ჩარევა არ განასხვავებს ძებნილ სიგნალს. ამიტომ, საჭირო ფიზიკური რაოდენობის არასწორი მნიშვნელობა გაიგზავნება საკონტროლო მოწყობილობის ანალოგურ შეყვანაზე. აქედან გამომდინარე, აუცილებელია გავფილტროთ სიგნალი, რომელიც მოდის სენსორიდან.

ერთ -ერთი ეფექტური ფილტრაციის ალგორითმი არის კალმანის ფილტრი. კალმანის ფილტრი არის რეკურსიული ფილტრი, რომელიც აფასებს დინამიური სისტემის მდგომარეობის ვექტორს არასრული და ხმაურიანი გაზომვების სერიის გამოყენებით. კალმანის ფილტრი იყენებს სისტემის დინამიურ მოდელს (მაგალითად, მოძრაობის ფიზიკურ კანონს), საკონტროლო მოქმედებებს და ბევრ თანმიმდევრულ გაზომვას ოპტიმალური მდგომარეობის შესაქმნელად. ალგორითმი შედგება ორი განმეორებითი ეტაპისგან: პროგნოზირება და შესწორება. პირველ ეტაპზე გამოითვლება მდგომარეობის პროგნოზირება მომდევნო მომენტში (მათი გაზომვის უზუსტობის გათვალისწინებით). მეორეზე, სენსორის ახალი ინფორმაცია ასწორებს წინასწარ განსაზღვრულ მნიშვნელობას (ასევე ამ ინფორმაციის უზუსტობისა და ხმაურის გათვალისწინებით).

პროგნოზირების ეტაპზე ხდება შემდეგი:

  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 (დაშვების თარიღი: 05/21/2017).