Sensörlerden elde edilen değerleri filtrelemek için Kalman filtresini kullanmak. Kalman filtreleme Optimal Kalman filtresi

İnternette, Habre de dahil olmak üzere, Kalman filtresi hakkında birçok bilgi bulabilirsiniz. Ancak formüllerin kendilerinin kolayca sindirilebilir bir türevini bulmak zor. Bir sonuca varılmaksızın bütün bu bilim bir nevi şamanizm olarak algılanmakta, formüller meçhul bir semboller kümesi gibi görünmektedir ve en önemlisi, bir teorinin yüzeyinde yatan birçok basit ifade anlaşılmazdır. Bu makalenin amacı, bu filtre hakkında mümkün olduğunca erişilebilir bir dilde konuşmak olacaktır.
Kalman filtresi, güçlü bir veri filtreleme aracıdır. Ana prensibi, filtreleme sırasında fenomenin fiziği hakkındaki bilgilerin kullanılmasıdır. Örneğin, bir arabanın hız göstergesinden gelen verileri filtreliyorsanız, o zaman arabanın ataleti size hızdaki çok hızlı sıçramaları bir ölçüm hatası olarak algılama hakkını verir. Kalman filtresi ilginçtir çünkü bir bakıma en iyi filtredir. "En iyi" kelimelerinin tam olarak ne anlama geldiğini aşağıda daha ayrıntılı olarak tartışacağız. Makalenin sonunda, birçok durumda formüllerin neredeyse hiçbir şey kalmayacak kadar basitleştirilebileceğini göstereceğim.

Eğitici program

Kalman filtresini tanımadan önce, olasılık teorisinden bazı basit tanımları ve gerçekleri hatırlamayı öneriyorum.

rastgele değer

Rastgele bir değişken verildiğini söylediklerinde, bu miktarın rastgele değerler alabileceğini kastetmektedirler. Farklı olasılıklarla farklı değerler alır. Diyelim ki bir zar attığınızda, ayrı bir değer kümesi düşecek: Örneğin, dolaşan bir parçacığın hızı söz konusu olduğunda, o zaman, açıkçası, sürekli bir değerler kümesiyle uğraşmak zorundadır. Rastgele bir değişkenin "bırakılan" değerlerini şu şekilde belirteceğiz, ancak bazen rastgele bir değişkeni belirtmek için kullandığımız aynı harfi kullanacağız:.
Sürekli bir değerler kümesi durumunda, rastgele değişken, bize, rastgele değişkenin uzunluğu olan bir noktanın küçük bir mahallesinde "düşme" olasılığının eşit olduğunu belirten olasılık yoğunluğu ile karakterize edilir. Resimden de görebileceğimiz gibi, bu olasılık grafiğin altındaki taralı dikdörtgenin alanına eşittir:

Hayatta oldukça sık, olasılık yoğunluğu olduğunda rasgele değişkenler Gauss'tur.

Fonksiyonun bir noktada ortalanmış ve mertebenin karakteristik genişliğine sahip bir çan şekline sahip olduğunu görüyoruz.
Gauss dağılımından bahsettiğimiz için nereden geldiğini söylememek günah olur. Sayıların matematiğe sağlam bir şekilde yerleşmesi ve en beklenmedik yerlerde ortaya çıkması gibi, Gauss dağılımı da olasılık teorisinde derin kökler aldı. Gauss'un her yerde varlığını kısmen açıklayan dikkat çekici bir ifade şudur:
Rastgele dağılıma sahip bir rastgele değişken olsun (aslında, bu keyfilikle ilgili bazı kısıtlamalar vardır, ancak bunlar kesinlikle katı değildir). Deneyler yapalım ve rastgele değişkenin "bırakılan" değerlerinin toplamını hesaplayalım. Bu deneylerden bir sürü yapalım. Her seferinde miktarın farklı bir değerini alacağımız açıktır. Başka bir deyişle, bu toplamın kendisi, kendi kesin dağılım yasasına sahip bir rastgele değişkendir. Yeterince büyük olduğunda, bu toplamın dağıtım yasasının Gauss dağılımına eğilimli olduğu ortaya çıktı (bu arada, "çanın" karakteristik genişliği büyür). Daha fazlasını Wikipedia'da okuyun: Merkezi Limit Teoremi. Hayatta, çok sık olarak, çok sayıda eşit olarak dağılmış bağımsız rastgele değişkenlerden oluşan ve bu nedenle Gauss'a göre dağıtılan nicelikler vardır.

Anlamına gelmek

Rastgele bir değişkenin ortalama değeri, çok fazla deney yaparsak ve düşen değerlerin aritmetik ortalamasını hesaplarsak, sınırda elde ettiğimiz değerdir. Ortalama farklı şekillerde gösterilir: matematikçiler (beklenti) ile ifade etmeyi sever ve yabancı matematikçiler (beklenti) ile ifade etmeyi sever. Fizikçiler veya aracılığıyla. Yabancı bir şekilde belirleyeceğiz:.
Örneğin, bir Gauss dağılımı için ortalamadır.

Dağılım

Gauss dağılımı durumunda, rastgele değişkenin ortalama değerinin bazı komşuluklarında düşmeyi tercih ettiğini açıkça görüyoruz. Grafikten de anlaşılacağı gibi, sıra değerlerinin karakteristik dağılımı. Dağılımını biliyorsak, keyfi bir rastgele değişken için bu değer dağılımını nasıl tahmin edebiliriz. Olasılık yoğunluğunun bir grafiğini çizebilir ve karakteristik genişliği gözle tahmin edebilirsiniz. Ancak cebirsel yolu izlemeyi tercih ediyoruz. Ortalamadan sapmanın (modül) ortalama uzunluğunu bulabilirsiniz:. Bu değer, değerlerin tipik dağılımının iyi bir tahmini olacaktır. Ama sen ve ben formüllerde modül kullanmanın bir baş ağrısı olduğunu çok iyi biliyoruz, bu yüzden bu formül karakteristik yayılımı tahmin etmek için nadiren kullanılır.
Daha kolay bir yol (hesaplama açısından basit) bulmaktır. Bu değere varyans denir ve genellikle olarak adlandırılır. Varyansın köküne standart sapma denir. Standart sapma, rastgele bir değişkenin yayılmasının iyi bir tahminidir.
Örneğin, bir Gauss dağılımı için, yukarıda tanımlanan varyansın tam olarak eşit olduğunu hesaplayabiliriz, bu da standart sapmanın eşit olduğu anlamına gelir, bu da geometrik sezgimizle çok iyi uyuşur.
Aslında burada gizli küçük bir dolandırıcılık var. Gerçek şu ki, Gauss dağılımının tanımında, üs altındaki ifadedir. Paydadaki bu ikisi tam olarak standart sapmanın katsayıya eşit olacağı şekilde duruyor. Yani, Gauss dağılım formülünün kendisi, standart sapmasını dikkate almamız için özel olarak keskinleştirilmiş bir biçimde yazılmıştır.

Bağımsız rastgele değişkenler

Rastgele değişkenler bağımlıdır ve değildir. Uçağa bir iğne attığınızı ve her iki ucun koordinatlarını yazdığınızı hayal edin. Bu iki koordinat bağımlıdır, aralarındaki mesafenin rastgele değerler olmasına rağmen her zaman iğnenin uzunluğuna eşit olması koşuluyla ilişkilidir.
Rastgele değişkenler, eğer birincisinin sonucu ikincisinin sonucundan tamamen bağımsız ise bağımsızdır. Rastgele değişkenler bağımsızsa, çarpımlarının ortalama değeri, ortalama değerlerinin çarpımına eşittir:

Kanıt

Örneğin mavi gözlü olmak ve liseden altın madalya ile mezun olmak bağımsız rastgele değişkenlerdir. Mavi gözlü, diyelim ki, altın madalya sahipleri, o zaman mavi gözlü madalya sahipleri. Bu örnek bize, eğer rastgele değişkenler ve olasılık yoğunlukları ile verilirse ve o zaman bu değerlerin bağımsızlığının ifade edildiğini söyler. olasılık yoğunluğu (ilk değer atlandı ve ikincisi) aşağıdaki formülle bulunur:

Bundan hemen şu çıkar:

Gördüğünüz gibi, sürekli bir değer spektrumuna sahip olan ve olasılık yoğunluklarına göre verilen rastgele değişkenler için ispat yapılır. Diğer durumlarda, ispat fikri benzerdir.

Kalman filtresi

Sorunun formülasyonu

Ölçeceğimiz değerle belirtelim ve sonra filtreleyelim. Bu koordinat, hız, ivme, nem, koku, sıcaklık, basınç vb. olabilir.
Genel bir problemi formüle etmemize yol açacak basit bir örnekle başlayalım. Sadece ileri geri gidebilen radyo kontrollü bir arabamız olduğunu hayal edin. Arabanın ağırlığını, şeklini, yol yüzeyini vb. bilerek, kontrol eden joystick'in hareket hızını nasıl etkilediğini hesapladık.

Daha sonra arabanın koordinatı yasaya göre değişecektir:

Gerçek hayatta, arabaya etki eden küçük bozulmaları (rüzgar, tümsekler, yoldaki çakıl taşları) hesaplamalarımızda dikkate alamayız, bu nedenle arabanın gerçek hızı hesaplanandan farklı olacaktır. Yazılan denklemin sağ tarafına rastgele bir değişken eklenir:

Daktiloda, arabanın gerçek koordinatını ölçmeye çalışan ve elbette tam olarak ölçemeyen, ancak yine rastgele bir değişken olan bir hatayla ölçen bir GPS sensörümüz var. Sonuç olarak, sensörden hatalı veriler alıyoruz:

Görev, yanlış sensör okumalarını bilerek, arabanın gerçek koordinatı için iyi bir yaklaşım bulmaktır.
Genel görevin formülasyonunda, koordinattan (sıcaklık, nem...) her şey sorumlu olabilir ve sistemin dışarıdan kontrol edilmesinden sorumlu terim (örnekte bir makine ile) ile gösterilecektir. Koordinat ve sensör okumaları için denklemler şöyle görünecektir:

Bildiklerimizi ayrıntılı olarak tartışalım:

Filtreleme görevinin bir kenar yumuşatma görevi olmadığını belirtmekte fayda var. Sensörden gelen verileri düzleştirmeye çalışmıyoruz, gerçek koordinata en yakın değeri elde etmeye çalışıyoruz.

Kalman'ın algoritması

Tümevarım yoluyla tartışacağız. inci adımda, sistemin gerçek koordinatına iyi yaklaşan sensörden filtrelenmiş değeri zaten bulduğumuzu hayal edin. Bilinmeyen koordinattaki değişimi kontrol eden denklemi bildiğimizi unutmayın:

bu nedenle, henüz sensörden değeri almadığımız için, bir adımda sistemin bu yasaya göre geliştiğini ve sensörün yakın bir şey göstereceğini varsayabiliriz. Ne yazık ki, şu ana kadar daha kesin bir şey söyleyemeyiz. Öte yandan, bir adımda, elimizde yanlış bir sensör okuması olacak.
Kalman'ın fikri şu şekildedir. Gerçek koordinata en iyi yaklaşımı elde etmek için, hatalı bir sensörün okunması ile ondan ne görmeyi umduğumuza dair tahminimiz arasındaki orta yolu seçmeliyiz. Sensör okumasına ağırlık vereceğiz ve ağırlık tahmin edilen değerde kalacak:

Katsayıya Kalman katsayısı denir. Yineleme adımına bağlıdır, bu yüzden onu yazmak daha doğru olur, ancak şimdilik, hesaplama formüllerini karıştırmamak için indeksini atlayacağız.
Ortaya çıkan optimal koordinat değerinin gerçeğe en yakın olması için Kalman katsayısını seçmeliyiz. Örneğin, sensörümüzün çok doğru olduğunu biliyorsak, okumasına daha fazla güveniriz ve değere daha fazla ağırlık veririz (bire yakın). Sensör, aksine, tamamen yanlışsa, teorik olarak öngörülen değere daha fazla odaklanacağız.
Genel olarak, Kalman katsayısının tam değerini bulmak için hatayı en aza indirmeniz yeterlidir:

Hatanın ifadesini yeniden yazmak için denklemleri (1) (mavi arka plana sahip kutudakiler) kullanırız:

Kanıt

Hatayı en aza indirmek ifadesinin ne anlama geldiğini tartışmanın zamanı geldi mi? Sonuçta, gördüğümüz gibi, hatanın kendisi rastgele bir değişkendir ve her seferinde farklı değerler alır. Aslında, hatanın minimum olmasının ne anlama geldiğini tanımlamaya yönelik bire bir yaklaşım yoktur. Rastgele bir değişkenin varyansında olduğu gibi, yayılmasının karakteristik genişliğini tahmin etmeye çalıştığımızda, burada hesaplamalar için en basit kriteri seçeceğiz. Karesi alınmış hatanın ortalamasını en aza indireceğiz:

Son ifadeyi yazalım:

Kanıt

for ifadesine dahil edilen tüm rasgele değişkenlerin bağımsız olması gerçeğinden, tüm "çapraz" terimlerin sıfıra eşit olduğu sonucu çıkar:

O zaman varyans formülünün çok daha basit görüneceği gerçeğini kullandık:

Bu ifade aşağıdaki durumlarda minimum bir değer alır (türevi sıfıra eşitlersek):

Burada zaten adım indeksli Kalman katsayısı için bir ifade yazıyoruz, böylece yineleme adımına bağlı olduğunu vurguluyoruz.
Elde edilen optimal değeri, minimize ettiğimiz ifadenin yerine koyarız. Aldığımız;

Görevimiz başarılmıştır. Kalman katsayısını hesaplamak için yinelemeli bir formülümüz var.
Edindiğimiz bilgileri tek bir çerçevede özetleyelim:

Örnek

Matlab kodu

Hepsini temizle; N = %100 numune sayısı a = %0,1 hızlanma 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); son; % kalman filtresi xOpt (1) = z (1); eOpt (1) = sigmaEta; için 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) sonu; arsa (k, xOpt, k, z, k, x)

analiz

Kalman katsayısının iterasyon adımı ile nasıl değiştiğini izlersek, her zaman belirli bir değerde kararlı olduğunu gösterebiliriz. Örneğin, sensör ve modelin rms hataları on'a bir olarak birbiriyle ilişkili olduğunda, yineleme adımına bağlı olarak Kalman katsayısının grafiği şöyle görünür:

Bir sonraki örnekte, bunun hayatımızı nasıl daha kolay hale getirebileceğini tartışacağız.

İkinci örnek

Pratikte, genellikle filtrelediğimiz şeyin fiziksel modeli hakkında hiçbir şey bilmediğimiz olur. Örneğin, favori ivmeölçerinizdeki okumaları filtrelemek istediğinizi varsayalım. İvmeölçeri hangi yasaya göre çevirmeyi planladığınızı önceden bilemezsiniz. Alabileceğiniz en fazla bilgi, sensör hatasının varyansıdır. Böyle zor bir durumda, hareket modelinin tüm cehaleti rastgele bir değişkene yönlendirilebilir:

Ama açıkçası, böyle bir sistem artık rasgele değişkene yüklediğimiz koşulları karşılamıyor, çünkü şimdi bizim için bilinmeyen tüm hareket fiziği orada gizlidir ve bu nedenle farklı zaman anlarında model hatalarının bağımsız olduğunu söyleyemeyiz. birbirinden ve ortalama değerlerinin sıfır olmasıdır. Bu durumda, genel olarak Kalman filtre teorisi uygulanamaz. Ancak, bu gerçeğe dikkat etmeyeceğiz, ancak katsayıları gözle seçerek tüm devasa formülleri aptalca uygulayacağız, böylece filtrelenen veriler sevimli görünecek.
Ama farklı, çok daha basit bir yoldan gidebilirsiniz. Yukarıda gördüğümüz gibi, Kalman katsayısı her zaman artışla bir değere doğru sabitlenir. Bu nedenle, katsayıları seçip karmaşık formüller kullanarak Kalman katsayısını bulmak yerine, bu katsayıyı her zaman sabit kabul edip sadece bu sabiti seçebiliriz. Bu varsayım neredeyse hiçbir şeyi bozmaz. İlk olarak, Kalman'ın teorisini zaten yasadışı olarak kullanıyoruz ve ikincisi, Kalman katsayısı hızla bir sabite sabitleniyor. Sonuç olarak, her şey çok basitleşecek. Kalman'ın teorisinden hiçbir formüle ihtiyacımız yok, sadece kabul edilebilir bir değer bulmamız ve onu yinelemeli formüle eklememiz gerekiyor:

Aşağıdaki grafik, iki farklı şekilde filtrelenmiş kurgusal bir sensörden gelen verileri göstermektedir. Olguların fiziği hakkında hiçbir şey bilmememiz şartıyla. İlk yol, Kalman'ın teorisindeki tüm formüllerle dürüsttür. İkincisi, formüller olmadan basitleştirilmiştir.

Gördüğümüz gibi, yöntemler neredeyse aynı. Sadece başlangıçta, Kalman katsayısı henüz stabilize olmadığında küçük bir fark gözlenir.

Tartışma

Gördüğümüz gibi Kalman filtresinin ana fikri, filtrelenen değere göre bir katsayı bulmaktır.

ortalama olarak koordinatın gerçek değerinden en az farklı olacaktır. Filtrelenen değerin, sensör okumasının ve önceki filtrelenmiş değerin doğrusal bir fonksiyonu olduğunu görüyoruz. Ve önceki filtrelenmiş değer, sırayla, sensör okumasının ve bir önceki filtrelenmiş değerin doğrusal bir fonksiyonudur. Ve böylece zincir tamamen açılana kadar. Yani, filtrelenen değer şunlara bağlıdır: tümündenönceki sensör okumaları doğrusal olarak:

Bu nedenle Kalman filtresine doğrusal filtre denir.
Kalman filtresinin tüm lineer filtrelerin en iyisi olduğu kanıtlanabilir. Filtre hatasının ortalama karesinin minimum olması anlamında en iyisi.

Çok boyutlu durum

Kalman filtresinin tüm teorisi çok boyutlu duruma genelleştirilebilir. Oradaki formüller biraz daha korkutucu görünüyor, ancak bunların türetilmesi fikri, tek boyutlu durumdakiyle aynı. Bunları şu mükemmel makalede görebilirsiniz: http://habrahabr.ru/post/140274/.
Ve bu harikada video bunların nasıl kullanılacağına dair bir örnek analiz edilir.

Wiener filtreleri en çok proses prosesleri veya genel olarak proses bölümleri (blok işleme) için uygundur. Sıralı işleme için, gözlem süreci sırasında filtre girişine giren bilgileri hesaba katarak, her saat döngüsünde sinyalin güncel bir tahmini gereklidir.

Wiener filtreleme ile her yeni sinyal örneği, tüm filtre ağırlıklarının yeniden hesaplanmasını gerektirecektir. Şu anda, gelen yeni bilgilerin önceden yapılmış sinyal değerlendirmesini (radarda hedef takibi, kontrolde otomatik kontrol sistemleri vb.) Kalman filtresi olarak bilinen özyinelemeli tipteki uyarlamalı filtreler özellikle ilgi çekicidir.

Bu filtreler, otomatik regülasyon ve kontrol sistemlerinde kontrol döngülerinde yaygın olarak kullanılmaktadır. Durum alanı olarak çalışmalarını tanımlamak için kullanılan böylesine özel bir terminolojinin kanıtladığı gibi, oradan ortaya çıktılar.

Sinir hesaplama pratiğinde çözülmesi gereken ana görevlerden biri, sinir ağlarını öğrenmek için hızlı ve güvenilir algoritmalar elde etmektir. Bu bakımdan geri besleme döngüsünde lineer filtrelerin kullanılması faydalı olabilir. Eğitim algoritmaları doğası gereği yinelemeli olduğundan, böyle bir filtre sıralı yinelemeli bir tahmin edici olmalıdır.

Parametre tahmin sorunu

Büyük pratik öneme sahip istatistiksel kararlar teorisinin problemlerinden biri, aşağıdaki gibi formüle edilen durum vektörlerini ve sistemlerin parametrelerini tahmin etme problemidir. Doğrudan ölçüm için erişilemeyen $ X $ vektör parametresinin değerini tahmin etmenin gerekli olduğunu varsayalım. Bunun yerine, $ X $'a bağlı olarak başka bir $ Z $ parametresi ölçülür. Tahmin problemi şu soruya cevap vermektir: $ Z $ bilerek $ X $ hakkında ne söylenebilir. Genel durumda, $ X $ vektörünün optimal değerlendirmesi için prosedür, değerlendirmenin kalitesinin kabul edilen kriterine bağlıdır.

Örneğin, parametre tahmini sorununa Bayes yaklaşımı, tahmin edilen parametrenin olasılık özellikleri hakkında tam bir ön bilgi gerektirir ki bu genellikle imkansızdır. Bu durumlarda, çok daha az ön bilgi gerektiren en küçük kareler (OLS) yöntemine başvururlar.

$ Z $ gözlem vektörünün, doğrusal bir model tarafından parametre tahmin vektörü $ X $ ile ilişkili olduğu ve gözlemin, tahmin edilen parametre ile ilişkisiz $ V $ gürültüsü içerdiği durum için OLS uygulamasını ele alalım:

$ Z = HX + V $, (1)

$ H $, gözlemlenen miktarlar ve tahmin edilen parametreler arasındaki ilişkiyi tanımlayan bir dönüşüm matrisidir.

Kare hatasını en aza indiren $ X $ tahmini şu şekilde yazılır:

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

$ V $ gürültüsünün ilişkili olmamasına izin verin, bu durumda $ R_V $ matrisi yalnızca birim matrisidir ve tahmin denklemi daha basit hale gelir:

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

Matris biçiminde yazmak kağıttan büyük ölçüde tasarruf sağlar, ancak bazıları için alışılmadık olabilir. Yu. M. Korshunov'un "Sibernetiğin Matematiksel Temelleri" monografisinden alınan aşağıdaki örnek, tüm bunları göstermektedir.
Aşağıdaki elektrik devresi mevcuttur:

Bu durumda gözlemlenen değerler, $ A_1 = 1 A, A_2 = 2 A, V = 20 B $ cihazlarının okumalarıdır.

Ayrıca $ R = 5 $ Ohm direnci de bilinmektedir. Hatanın minimum ortalama karesi kriteri açısından, $ I_1 $ ve $ I_2 $ akımlarının değerlerini en iyi şekilde tahmin etmek gerekir. Buradaki en önemli şey, gözlemlenen değerler (cihaz okumaları) ile tahmin edilen parametreler arasında bir miktar ilişki olmasıdır. Ve bu bilgi dışarıdan getirilir.

Bu durumda, bunlar, filtreleme durumunda (daha sonra tartışılacaktır) Kirchhoff yasalarıdır - mevcut değerin öncekilere bağımlılığını varsayan zaman serisinin otoregresif bir modeli.

Bu nedenle, istatistiksel kararlar teorisi ile ilgisi olmayan Kirchhoff yasalarının bilgisi, gözlenen değerler ile tahmin edilen parametreler arasında bir bağlantı kurmayı mümkün kılar (kim elektrik mühendisliği okudu - kontrol edebilirler, geri kalanı olacaktır). onların sözünü almak için):

$$ 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 $$

Vektör formunda aynı:

$$ \ başlangıç ​​(vmatrix) z_1 \\ z_2 \\ z_3 \ bitiş (vmatrix) = \ başlangıç ​​(vmatrix) 1 & 0 \\ 1 & 1 \\ 1 & 2 \ bitiş (vmatrix) \ başlangıç ​​(vmatrix) I_1 \ \ I_2 \ bitiş (vmatrix) + \ başlangıç ​​(vmatrix) \ xi_1 \\ \ xi_2 \\ \ xi_3 \ bitiş (vmatrix) $$

Veya $ Z = HX + V $, burada

$$ Z = \ başlangıç ​​(vmatrix) z_1 \\ z_2 \\ z_3 \ bitiş (vmatrix) = \ başlangıç ​​(vmatrix) 1 \\ 2 \\ 4 \ bitiş (vmatrix); H = \ başlangıç ​​(vmatrix) 1 & 0 \\ 1 & 1 \\ 1 & 2 \ bitiş (vmatrix); X = \ başlangıç ​​(vmatrix) I_1 \\ I_2 \ bitiş (vmatrix); V = \ başlangıç ​​(vmatrix) \ xi_1 \\ \ xi_2 \\ \ xi_3 \ bitiş (vmatrix) $$

Birbiriyle ilişkisiz girişim değerleri göz önüne alındığında, formül 3'e göre en küçük kareler yöntemiyle I 1 ve I 2'nin tahminini buluyoruz:

$ H ^ TH = \ başlangıç ​​(vmatrix) 1 & 1 & 1 \\ 0 & 1 & 2 \ bitiş (vmatrix) \ başlangıç ​​(vmatrix) 1 & 0 \\ 1 & 1 \\ 1 & 2 \ bitiş (vmatrix) = \ start (vmatrix) 3 & 3 \\ 3 & 5 \ end (vmatrix); (H ^ TH) ^ (- 1) = \ frac (1) (6) \ start (vmatrix) 5 & -3 \\ -3 & 3 \ end (vmatrix) $;

$ H ^ TZ = \ başlangıç ​​(vmatrix) 1 ve 1 ve 1 \\ 0 ve 1 ve 2 \ bitiş (vmatrix) \ başlangıç ​​(vmatrix) 1 \\ 2 \\ 4 \ bitiş (vmatrix) = \ başlangıç ​​(vmatrix) 7 \ \ 10 \ bitiş (vmatrix); X (ots) = \ frac (1) (6) \ başlangıç ​​(vmatrix) 5 ve -3 \\ -3 ve 3 \ bitiş (vmatrix) \ başlangıç ​​(vmatrix) 7 \\ 10 \ bitiş (vmatrix) = \ frac (1) (6) \ başlangıç ​​(vmatrix) 5 \\ 9 \ bitiş (vmatrix) $;

Yani $ I_1 = 5/6 = 0.833 A $; $ I_2 = 9/6 = 1.5 A $.

Filtreleme görevi

Sabit değerlere sahip parametreleri tahmin etme probleminin aksine, filtreleme probleminde, prosesleri değerlendirmek, yani girişim tarafından bozulmuş, zamanla değişen bir sinyalin mevcut tahminlerini bulmak ve bu nedenle, doğrudan ölçüme erişilemez. Genel olarak, filtreleme algoritmalarının türü, sinyal ve gürültünün istatistiksel özelliklerine bağlıdır.

Yararlı sinyalin zamanın yavaş değişen bir fonksiyonu olduğunu ve girişimin ilişkisiz gürültü olduğunu varsayacağız. Yine sinyal ve girişimin olasılıksal özellikleri hakkında ön bilgi eksikliğinden dolayı en küçük kareler yöntemini kullanacağız.

İlk olarak, $ z_n, z_ (n-1), z_ (n-2) \ dots z_ zaman serisinin en son değerlerinin mevcut $ k $ değerine dayanarak $ x_n $'ın mevcut değerinin bir tahminini elde ederiz. (n- (k-1)) $. Gözlem modeli, parametre tahmin problemindeki ile aynıdır:

$ Z $ 'ın $ z_n, z_ (n-1), z_ (n-2) \ dots z_ (n- (k-1)) zaman serilerinin gözlenen değerlerinden oluşan bir sütun vektörü olduğu açıktır. $, $ V $ - girişim vektör sütunu $ \ xi _n, \ xi _ (n-1), \ xi_ (n-2) \ dots \ xi_ (n- (k-1)) $, gerçeği çarpıtıyor sinyal. $ H $ ve $ X $ sembolleri ne anlama geliyor? Örneğin, tüm gereken zaman serisinin mevcut değerinin bir tahminini vermekse, $ X $ sütun vektörü hakkında konuşabilir miyiz? Ve $ H $ dönüşüm matrisinin ne anlama geldiği hiç açık değil.

Tüm bu sorular, ancak bir sinyal üretim modeli kavramı dikkate alındığında yanıtlanabilir. Yani, orijinal sinyalin bir modeline ihtiyaç vardır. Bu anlaşılabilir bir durumdur, sinyal ve girişimin olasılıksal özellikleri hakkında ön bilgi olmadığında, sadece varsayımlarda bulunmak kalır. Kahve telvesi üzerine fal diyebilirsiniz ama uzmanlar farklı bir terminolojiyi tercih ediyor. "Saç kurutma makinesinde" buna parametrik model denir.

Bu durumda, bu belirli modelin parametreleri tahmin edilir. Uygun bir sinyal üretme modeli seçerken, herhangi bir analitik fonksiyonun bir Taylor serisinde genişletilebileceğini unutmayın. Taylor serisinin şaşırtıcı bir özelliği, $ x = a $ noktasından herhangi bir $ t $ mesafesindeki bir fonksiyonun şeklinin, $ x = a noktasının sonsuz küçük bir komşuluğundaki fonksiyonun davranışı tarafından benzersiz bir şekilde belirlenmesidir. $ (birinci ve daha yüksek siparişlerin türevlerinden bahsediyoruz).

Bu nedenle, Taylor serisinin varlığı, analitik fonksiyonun çok güçlü bir bağlantıya sahip bir iç yapıya sahip olduğu anlamına gelir. Örneğin, kendimizi Taylor serisinin üç üyesiyle sınırlandırırsak, sinyal üretme modeli şöyle görünecektir:

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

$$ X_n = \ başlangıç ​​(vmatrix) x_n \\ x "_n \\ x" "_ n \ end (vmatrix); F _ (- i) = \ başlangıç ​​(vmatrix) 1 & -i & i ^ 2/2 \\ 0 & 1 & -i \\ 0 & 0 & 1 \ end (vmatrix) $$

Yani, formül 4, polinomun belirli bir sırası için (örnekte, 2'ye eşittir) zaman dizisindeki sinyalin $ n $ -th değeri ile $ (ni) $ - arasında bir bağlantı kurar. NS. Böylece, bu durumda tahmin edilen durum vektörü, fiili tahmin edilen değere ek olarak, sinyalin birinci ve ikinci türevlerini içerir.

Otomatik kontrol teorisinde, böyle bir filtreye 2. dereceden astatizm filtresi adı verilir. Bu durum için $ H $ dönüşüm matrisi (tahmin, mevcut ve $ k-1 $ önceki örnekler temelinde gerçekleştirilir) şöyle görünür:

$$ H = \ başlangıç ​​(vmatrix) 1 & -k & k ^ 2/2 \\ - & - & - \\ 1 & -2 & 2 \\ 1 & -1 & 0.5 \\ 1 & 0 & 0 \ bitiş (vmatrix) $$

Tüm bu sayılar, bitişik gözlenen değerler arasındaki zaman aralığının sabit ve 1'e eşit olduğu varsayımı altında Taylor serisinden elde edilir.

Böylece, varsayımlarımız altındaki filtreleme görevi, parametreleri tahmin etme görevine indirgenmiştir; bu durumda, benimsenen sinyal oluşturma modelinin parametreleri tahmin edilir. Ve $ X $ durum vektörünün değerlerinin tahmini aynı formüle göre yapılır:

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

Özünde, sinyal üretme sürecinin otoregresif bir modeline dayanan bir parametrik tahmin süreci uyguladık.

Formül 3, programlı olarak kolayca uygulanır, bunun için $ H $ matrisini ve $ Z $ gözlemlerinin vektör sütununu doldurmanız gerekir. Bu filtreler denir sonlu bellek filtreleri, çünkü $ X_ (değil) $'ın mevcut tahminini elde etmek için son $ k $ gözlemlerini kullanırlar. Her yeni gözlem döngüsünde, mevcut gözlem grubuna bir yenisi eklenir ve eskisi atılır. Bu not alma sürecine denir sürgülü pencere.

Büyüyen bellek filtreleri

Sonlu belleğe sahip filtrelerin ana dezavantajı, her yeni gözlemden sonra bellekte depolanan tüm veriler üzerinde tam bir yeniden hesaplama yapılmasının gerekli olmasıdır. Ayrıca, tahminlerin hesaplanması ancak ilk $ k $ gözlemlerinin sonuçları toplandıktan sonra başlatılabilir. Yani bu filtrelerin geçiş süreleri uzundur.

Bu dezavantajla mücadele etmek için, kalıcı bir bellek filtresinden bir filtreye geçmek gerekir. büyüyen hafıza... Böyle bir filtrede, tahminin yapıldığı gözlenen değerlerin sayısı, mevcut gözlemin n sayısı ile çakışmalıdır. Bu, tahmin edilen $ X $ vektörünün bileşenlerinin sayısına eşit gözlem sayısından başlayarak tahminler elde etmeyi mümkün kılar. Ve bu, benimsenen modelin sırasına göre belirlenir, yani modelde Taylor serisinden kaç üye kullanılır.

Aynı zamanda, artan n ile filtrenin yumuşatma özellikleri iyileşir, yani tahminlerin doğruluğu artar. Ancak, bu yaklaşımın doğrudan uygulanması, hesaplama maliyetlerinde bir artış ile ilişkilidir. Bu nedenle, büyüyen bellek filtreleri şu şekilde uygulanır: tekrarlayan.

Gerçek şu ki, n zamanına kadar, önceki tüm gözlemler hakkında bilgi içeren $ X _ ((n-1) оц) $ tahminimiz zaten var $ z_n, z_ (n-1), z_ (n-2) \ dots z_ (n- (k-1)) $. $ X_ (nоц) $ tahmini, $ X _ ((n-1)) (\ mbox (оц)) $ tahmininde saklanan bilgiler kullanılarak bir sonraki $ z_n $ gözleminden elde edilir. Bu prosedür, tekrarlayan filtreleme olarak adlandırılır ve aşağıdakilerden oluşur:

  • tahmine göre $ X _ ((n-1)) (\ mbox (оц)) $ $ i = 1 ile formül 4'e göre $ X_n $ tahminini tahmin edin $: $ X _ (\ mbox (notsapriori)) = F_1X _ ((n-1 ) sc) $. Bu önsel bir tahmindir;
  • mevcut gözlemin sonuçlarına göre $ z_n $, bu a priori tahmin gerçek bir tahmine dönüştürülür, yani a posteriori;
  • bu prosedür $ r + 1 $ 'dan başlayarak her adımda tekrarlanır, burada $ r $ filtre sırasıdır.

Tekrarlayan filtreleme için son formül şöyle görünü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)

ikinci derece filtremiz için:

Formül 6'ya göre çalışan büyüyen bir bellek filtresi, Kalman filtresi olarak bilinen bir filtreleme algoritmasının özel bir durumudur.

Bu formülün pratik uygulamasında, içerdiği önsel tahminin formül 4 tarafından belirlendiğini ve $ h_0 X _ (\ mbox (notspriori)) $ değerinin $ vektörünün ilk bileşeni olduğunu hatırlamak gerekir. X _ (\ mbox (notspriori)) $.

Büyüyen bellek filtresinin önemli bir özelliği vardır. Formül 6'ya bakarsanız, nihai puan, tahmin edilen puan vektörü ile düzeltme teriminin toplamıdır. Bu düzeltme küçük $ n $ için büyüktür ve artan $ n $ ile azalır, $ n \ rightarrow \ infty $ olarak sıfıra yönelir. Yani artan n ile filtrenin yumuşatma özellikleri büyür ve içerdiği model hakim olmaya başlar. Ancak gerçek sinyal, modele yalnızca belirli alanlarda karşılık gelebilir, bu nedenle tahmin doğruluğu bozulur.

Bununla mücadele etmek için, bazı $ n $ 'dan başlayarak, düzeltme süresinin daha da azaltılmasına bir yasak getirildi. Bu, filtre bant genişliğini değiştirmeye eşdeğerdir, yani küçük n için filtre daha geniştir (daha az atalet), büyük n için daha atalet olur.

Şekil 1 ve Şekil 2'yi karşılaştırın. İlk şekilde, filtre iyi düzgünleşirken geniş bir belleğe sahiptir, ancak dar bandı nedeniyle tahmini yörünge gerçek yörüngenin gerisinde kalmaktadır. İkinci şekilde, filtre belleği daha küçüktür, daha kötü düzgünleşir, ancak gerçek yörüngeyi daha iyi izler.

Edebiyat

  1. YM Korshunov "Sibernetiğin Matematiksel Temelleri"
  2. AV Balakrishnan "Kalman filtrasyon teorisi"
  3. VNFomin "Yinelenen tahmin ve uyarlamalı filtreleme"
  4. C.F.N. Cowen, P.M. "Uyarlanabilir Filtreler" verin

Random Forest, en sevdiğim veri madenciliği algoritmalarından biridir. İlk olarak, inanılmaz derecede çok yönlüdür, hem regresyon hem de sınıflandırma problemlerini çözmek için kullanılabilir. Anormallikleri arayın ve tahmin edicileri seçin. İkincisi, bu yanlış uygulanması gerçekten zor bir algoritmadır. Basitçe, diğer algoritmalardan farklı olarak, birkaç yapılandırılabilir parametreye sahip olduğu için. Ayrıca özünde şaşırtıcı derecede basittir. Aynı zamanda, hassasiyeti ile dikkat çekicidir.

Böyle harika bir algoritmanın arkasındaki fikir nedir? Fikir basit: Diyelim ki çok zayıf bir algoritmamız var. Bu zayıf algoritmayı kullanarak birçok farklı model yaparsak ve tahminlerinin sonucunun ortalamasını alırsak, nihai sonuç çok daha iyi olacaktır. Bu, eylem halindeki sözde topluluk eğitimidir. Rastgele Orman algoritması bu nedenle "Rastgele Orman" olarak adlandırılır, elde edilen veriler için bir dizi karar ağacı oluşturur ve ardından tahminlerinin sonucunun ortalamasını alır. Burada önemli olan nokta, her ağacın oluşturulmasında rastlantısallık unsurudur. Sonuçta, birçok özdeş ağaç yaratırsak, ortalamalarının sonucunun bir ağacın doğruluğuna sahip olacağı açıktır.

Nasıl çalışıyor? Diyelim ki bazı girdi verilerimiz var. Her sütun bazı parametrelere, her satır bazı veri öğelerine karşılık gelir.

Tüm veri kümesinden rastgele belirli sayıda sütun ve satır seçebilir ve bunlara dayalı bir karar ağacı oluşturabiliriz.


10 Mayıs 2012 Perşembe

12 Ocak 2012 Perşembe


Bu kadar. 17 saatlik uçuş bitti, Rusya denizaşırı. Ve 2 yatak odalı rahat bir dairenin penceresinden San Francisco, ünlü Silikon Vadisi, California, ABD bize bakıyor. Evet, son zamanlarda pratikte yazmamamın nedeni bu. Biz taşındık.

Her şey Nisan 2011'de Zynga'da bir telefon görüşmesi yaparken başladı. Sonra hepsi gerçeklikle ilgisi olmayan bir tür oyun gibi geldi ve neyle sonuçlanacağını hayal bile edemedim. Haziran 2011'de Zynga Moskova'ya geldi ve bir dizi görüşme gerçekleştirdi, telefon görüşmelerini geçen yaklaşık 60 aday değerlendirildi ve yaklaşık 15'i seçildi (Tam rakamı bilmiyorum, daha sonra biri fikrini değiştirdi, biri hemen reddetti). Röportajın şaşırtıcı derecede basit olduğu ortaya çıktı. Programlama görevi yok, kapakların şekli hakkında zor sorular yok, çoğunlukla sohbet etme yeteneği test edildi. Ve bilgi, bence, sadece yüzeysel olarak değerlendirildi.

Ve sonra hile başladı. Önce sonuçları bekledik, sonra teklif, ardından LCA onayı, ardından vize dilekçesinin onaylanması, ardından ABD'den gelen belgeler, ardından büyükelçilikteki kuyruk, ardından ek bir kontrol, ardından vize. Bazen bana her şeyi bırakıp gol atmaya hazırmışım gibi geliyordu. Zaman zaman bu Amerika'ya ihtiyacımız olup olmadığından şüphe ettim, sonuçta Rusya'da da fena değil. Tüm süreç yaklaşık yarım yıl sürdü, sonuç olarak Aralık ortasında vize aldık ve yola çıkmak için hazırlanmaya başladık.

Pazartesi yeni bir yerde işteki ilk günümdü. Ofiste sadece çalışmak için değil, aynı zamanda yaşamak için tüm koşullar yaratılmıştır. Kendi şeflerimizin hazırladığı kahvaltılar, öğle ve akşam yemekleri, her yere tıkış tıkış çeşitli yiyecekler, spor salonu, masaj ve hatta kuaför. Bütün bunlar çalışanlar için tamamen ücretsizdir. Birçok insan işe bisikletle gidiyor ve araç depolamak için birkaç oda var. Genel olarak, Rusya'da hiç böyle bir şeyle karşılaşmadım. Ancak her şeyin kendi fiyatı vardır, çok çalışmamız gerektiği konusunda hemen uyarıldık. Standartlarına göre "çok" olan şey benim için çok açık değil.

Bununla birlikte, çok fazla çalışmaya rağmen, öngörülebilir gelecekte blog yazmaya devam edebileceğimi ve belki de Amerikan hayatı ve Amerika'da bir programcı olarak çalıştığım hakkında bir şeyler anlatabileceğimi umuyorum. Bekle ve gör. Bu arada herkese Mutlu Yıllar ve Noeller diliyorum ve yakında görüşürüz!


Bir kullanım örneği olarak, Rus şirketlerinin temettü verimini yazdıracağız. Baz fiyat olarak, bir hisse senedinin kasanın kapandığı günkü kapanış fiyatı alınır. Nedense bu bilgi Troyka'nın sitesinde yer almıyor ve temettülerin mutlak değerlerinden çok daha ilginç.
Dikkat! Kodun yürütülmesi uzun zaman alıyor, çünkü Her promosyon için finam sunucularına talepte bulunmanız ve değerini almanız gerekmektedir.

Sonuç<- NULL for(i in (1:length(divs[,1]))){ d <- divs if (d$Divs>0) (deneyin ((tırnaklar)<- 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


Benzer şekilde, geçmiş yıllar için istatistikler oluşturabilirsiniz.

Kalman filtresi muhtemelen bilim ve teknolojinin birçok alanında kullanılan en popüler filtreleme algoritmasıdır. Sadeliği ve verimliliği nedeniyle, GPS alıcılarında, sensör okuma işlemcilerinde, kontrol sistemlerinin uygulanmasında vb.

İnternette Kalman filtresi ile ilgili çok sayıda makale ve kitap var (çoğunlukla İngilizce), ancak bu makalelerin oldukça büyük bir giriş eşiği var, birçok belirsiz yer var, aslında çok açık ve şeffaf bir algoritma olmasına rağmen. Bunu size basit bir dille, karmaşıklığın giderek artmasıyla anlatmaya çalışacağım.

Bu ne için?

Herhangi bir ölçüm cihazının bazı hataları vardır, çok sayıda dış ve iç etkiden etkilenebilir, bu da ondan gelen bilgilerin gürültülü olmasına neden olur. Veri ne kadar gürültülü olursa, bu tür bilgileri işlemek o kadar zor olur.

Filtre, gürültüyü ve gereksiz bilgileri ortadan kaldıran bir veri işleme algoritmasıdır. Kalman süzgecinde, sistemin doğası, değişkenlerin ilişkisi hakkında önsel bilgiler belirlemek ve buna dayanarak daha doğru bir tahmin oluşturmak mümkündür, ancak en basit durumda bile (önsel bilgi girmeden) ) mükemmel sonuçlar verir.

En basit örneği ele alalım - depodaki yakıt seviyesini kontrol etmemiz gerektiğini varsayalım. Bunu yapmak için, tanka kapasitif bir sensör monte edilmiştir, bakımı çok kolaydır, ancak bazı dezavantajları vardır - örneğin, doldurulan yakıta bağımlılık (yakıtın dielektrik sabiti birçok faktöre bağlıdır, örneğin, sıcaklık), tankta büyük bir "çarpma" etkisi. Sonuç olarak, ondan gelen bilgiler, iyi bir genliğe sahip tipik bir "testereyi" temsil eder. Bu tür sensörler genellikle ağır madencilik ekipmanlarına kurulur (tankın hacmiyle karıştırmayın):

Kalman filtresi

Biraz konuya girelim ve algoritmanın kendisini tanıyalım. Kalman filtresi, optimal bir durum tahmini oluşturmak için sistemin dinamik bir modelini (örneğin, fiziksel hareket kanunu), bilinen kontrol eylemlerini ve birçok ardışık ölçümü kullanır. Algoritma iki tekrar eden aşamadan oluşur: tahmin ve düzeltme. İlk aşamada, bir sonraki andaki durumun tahmini hesaplanır (ölçümlerinin yanlışlığı dikkate alınarak). İkincisinde, sensörden gelen yeni bilgi, tahmin edilen değeri düzeltir (bu bilgilerin yanlışlığını ve gürültüsünü de hesaba katarak):

Denklemler matris biçiminde sunulur, eğer lineer cebir bilmiyorsanız - sorun değil, o zaman tek değişkenli durum için matrissiz basitleştirilmiş bir versiyon olacaktır. Bir değişken olması durumunda, matrisler skaler değerlere dönüşür.

Önce gösterimi anlayalım: alt simge, zaman içindeki anı belirtir: k - akım, (k-1) - önceki, üst simgedeki eksi işareti bunun olduğu anlamına gelir. tahmin edilen ara değer.

Değişkenlerin açıklamaları aşağıdaki resimlerde sunulmaktadır:

Tüm bu gizemli geçiş matrislerinin ne anlama geldiğini uzun süre ve sıkıcı bir şekilde açıklamak mümkün, ancak bence algoritmayı gerçek bir örnek kullanarak uygulamaya çalışmak daha iyidir - böylece soyut değerler gerçek anlam kazanacaktır.

Eylemde deneyelim

Yakıt seviye sensörlü örneğe geri dönelim, sistemin durumu bir değişkenle (depodaki yakıt hacmi) temsil edildiğinden, matrisler olağan denklemlere dönüşür:
Bir süreç modeli tanımlama
Filtrenin uygulanabilmesi için sistemin dinamiklerini belirleyen değişkenlerin matrislerinin/değerlerinin ve F, B ve H boyutlarının belirlenmesi gerekmektedir:

F- yakıt durumunda sistemin dinamiklerini tanımlayan bir değişken - bu, örnekleme süresi (algoritma adımları arasındaki süre) sırasında rölantide yakıt tüketimini belirleyen bir katsayı olabilir. Ancak, yakıt tüketimine ek olarak yakıt ikmali de var ... bu nedenle, basitlik için bu değişkeni 1'e eşit alacağız (yani, tahmin edilen değerin önceki duruma eşit olacağını belirtiyoruz).

B- kontrol eyleminin uygulanmasını belirleyen değişken. Motor devri veya gaz pedalına basma derecesi hakkında ek bilgimiz olsaydı, bu parametre örnekleme süresi boyunca yakıt tüketiminin nasıl değişeceğini belirlerdi. Modelimizde herhangi bir kontrol işlemi olmadığı için (onlarla ilgili bir bilgi olmadığı için) B = 0 alıyoruz.

H- ölçümler ile sistemin durumu arasındaki ilişkiyi belirleyen bir matris, şimdilik, açıklama yapmadan bu değişkeni de 1'e eşit alacağız.

Düzleştirme özelliklerini tanımlama
r- ölçüm hatası, ölçüm aletlerini test ederek ve ölçümlerinin hatasını belirleyerek belirlenebilir.

Q- Proses gürültüsünün belirlenmesi, her zaman mümkün olmayan proses varyansının belirlenmesi gerektiğinden daha zor bir iştir. Her durumda, gerekli filtreleme seviyesini sağlamak için bu parametreyi seçebilirsiniz.

Kodda uygulama
Kalan anlaşılmazlığı gidermek için C#'da basitleştirilmiş bir algoritma uyguluyoruz (matrisler ve kontrol eylemi olmadan):

sınıf KalmanFilterSimple1D
{
public double X0 (get; private set;) // tahmin edilen durum
public double P0 (get; private set;) // tahmin edilen kovaryans

Public double F (get; private set;) // gerçek değerin önceki gerçek değere oranı
public double Q (get; private set;) // ölçüm gürültüsü
public double H (get; private set;) // ölçülen değerin gerçek değere oranı
public double R (get; private set;) // çevre gürültüsü

Public double State (get; private set;)
genel çift Kovaryans (get; özel küme;)

Public KalmanFilterSimple1D (double q, double r, double f = 1, double h = 1)
{
Q = q;
R = r;
F = f;
H = h;
}

Genel geçersiz SetState (çift durum, çift kovaryans)
{
Devlet = durum;
Kovaryans = kovaryans;
}

Genel geçersiz Doğru (çift veri)
{
// zaman güncellemesi - tahmin
X0 = F * Durum;
P0 = F * Kovaryans * F + Q;

// ölçüm güncellemesi - düzeltme
var K = H * P0 / (H * P0 * H + R);
Durum = X0 + K * (veri - H * X0);
Kovaryans = (1 - K * H) * F;
}
}

// Başvuru ...

Var fuelData = GetData();
var filtrelenmiş = yeni Liste ();

Var kalman = new KalmanFilterSimple1D (f: 1, h: 1, q: 2, r: 15); // F, H, Q ve R'yi ayarla
kalman.SetState (fuelData, 0.1); // Durum ve Kovaryans için başlangıç ​​değerlerini ayarlayın
foreach (fuelData'da var d)
{
kalman.Doğru (d); // Algoritmayı uygula

Filtrelenmiş.Add (kalman.Durum); // Mevcut durumu kaydet
}

Bu parametrelerle filtrelemenin sonucu şekilde gösterilmiştir (düzleştirme derecesini ayarlamak için - Q ve R parametrelerini değiştirebilirsiniz):

Makalenin en ilginç kısmı kalır - birkaç değişken için Kalman filtresinin uygulanması, aralarındaki ilişkinin ayarlanması ve gözlemlenemeyen değişkenler için değerlerin otomatik çıktısı. Vakit buldukça konuya devam etmeye çalışacağım.

Herhangi bir sorunuz veya açıklamanız varsa, açıklamanın çok sıkıcı ve karmaşık olmadığını umuyoruz - yorumlara hoş geldiniz)

Mekanizmaları ve birimleri kontrol etmek için teknolojik süreçlerin otomasyonu sürecinde, çeşitli fiziksel büyüklüklerin ölçümleriyle uğraşmak gerekir. Bu, bir sıvının veya gazın basıncı ve akış hızı, hız, sıcaklık ve çok daha fazlası olabilir. Fiziksel büyüklüklerin ölçümü analog sensörler kullanılarak gerçekleştirilir. Bir analog sinyal, temsil eden parametrelerin her birinin bir zaman fonksiyonu ve sürekli bir olası değerler seti ile tanımlandığı bir veri sinyalidir. Değer uzayının sürekliliğinden, sinyale eklenen herhangi bir girişimin istenen sinyalden ayırt edilemez olduğu sonucu çıkar. Bu nedenle gerekli fiziksel miktarın yanlış değeri kontrol cihazının analog girişine gönderilecektir. Bu nedenle sensörden gelen sinyalin filtrelenmesi gerekmektedir.

Etkili filtreleme algoritmalarından biri Kalman filtresidir. Kalman filtresi, bir dizi eksik ve gürültülü ölçüm kullanarak dinamik bir sistemin durum vektörünü tahmin eden özyinelemeli bir filtredir. Kalman filtresi, optimal bir durum tahmini oluşturmak için sistemin dinamik bir modelini (örneğin, fiziksel hareket kanunu), kontrol eylemlerini ve birçok ardışık ölçümü kullanır. Algoritma iki tekrar eden aşamadan oluşur: tahmin ve düzeltme. İlk aşamada, bir sonraki andaki durumun tahmini hesaplanır (ölçümlerinin yanlışlığı dikkate alınarak). İkincisinde, sensörden gelen yeni bilgi, tahmin edilen değeri düzeltir (bu bilgilerin yanlışlığını ve gürültüsünü de hesaba katarak).

Tahmin aşamasında aşağıdakiler gerçekleşir:

  1. Sistem durumu tahmini:

mevcut zamanda sistemin durumunun tahmini nerede; - durumlar arasındaki geçiş matrisi (sistemin dinamik modeli); - sistemin önceki andaki durumunun tahmini; - kontrol eyleminin uygulama matrisi; - zamanda önceki anda kontrol eylemi.

  1. Hata kovaryansını tahmin etme:

hatanın tahmini nerede; - zamanda önceki anda hata; - proses gürültü kovaryansı.

Ayar aşamasında, aşağıdakiler gerçekleşir:

  1. Kalman kazancının hesaplanması:

Kalman kazancı nerede; - ölçümler ve durumlar arasındaki ilişkiyi gösteren bir ölçüm matrisi; - ölçüm gürültüsü kovaryansı.

şimdiki zamanda ölçüm nerede.

  1. Kovaryans hata güncellemesi:

kimlik matrisi nerede.

Sistemin durumu bir değişkenle açıklanıyorsa, o zaman = 1 olur ve matrisler sıradan denklemlere dönüşür.

Kalman filtresinin etkinliğini net bir şekilde ortaya koymak için Arduino Uno mikrodenetleyicisine bağlanan AVR PIC KY-037 ses sensörü ile bir deney yapılmıştır. Şekil 1, filtresiz (satır 1) sensör okumalarının bir grafiğini göstermektedir. Sensör çıkışındaki kaotik dalgalanmalar gürültünün varlığını gösterir.

Şekil 1. Filtre uygulaması olmayan sensör okumalarının grafiği

Filtreyi uygulamak için sistemin dinamiklerini ve boyutları belirleyen değişkenlerin değerlerinin tanımlanması gerekir. Sistemde kontrol eylemi olmadığı için 1'e eşit ve 0'a eşit alalım. Filtrenin yumuşatma özelliklerini belirlemek için parametrenin değerini seçmenin yanı sıra değişkenin değerini hesaplamak gerekir.

Değişkeni Microsoft Excel 2010'da hesaplayacağız. Bunu yapmak için, sensör okumalarının numunesi için standart sapmayı hesaplamak gerekir. = 0.62. gerekli filtrasyon seviyesine bağlı olarak seçilirse = 0.001 alırız. Şekil 2'de, ikinci satır, filtre uygulanmış sensör okumalarının grafiğini göstermektedir.

Şekil 2. Kalman filtresini kullanan sensör okumalarının grafiği

Grafikten, filtrenin girişim filtreleme görevi ile başa çıktığı sonucuna varabiliriz, çünkü sabit durumda filtrelemeyi geçen sensör okumalarındaki dalgalanmalar önemsizdir.

Ancak Kalman filtresinin önemli bir dezavantajı vardır. Sensörden ölçülen değer hızla değişebiliyorsa, filtrelenmiş sensör okuması ölçülen değer kadar hızlı değişmeyecektir. Şekil 3, Kalman filtresinin ölçülen değerdeki bir sıçramaya tepkisini göstermektedir.

Şekil 3. Kalman filtresinin ölçülen değerdeki bir sıçramaya tepkisi

Filtrenin ölçülen değerdeki bir sıçramaya tepkisinin ihmal edilebilir olduğu bulundu. Ölçülen değer önemli ölçüde değişir ve ardından önceki değere geri dönmezse, filtrelenmiş sensör okumaları, ancak önemli bir süre sonra ölçülen değerin gerçek değerine karşılık gelir ve bu, yüksek performans gerektiren otomatik kontrol sistemleri için kabul edilemez. .

Yapılan deneyden, düşük hızlı sistemlerde sensör okumalarını filtrelemek için Kalman filtresinin kullanılmasının önerildiği sonucuna varılabilir.

Kaynakça:

  1. GOST 17657-79. Veri transferi. Terimler ve tanımlar. - Moskova: Standartların yayınevi, 2005. - 2 s.
  2. Kalman filtresi // Wikipedia. ... Güncelleme tarihi: 26.04.2017. URL: http://ru.wikipedia.org/?oldid=85061599 (erişim tarihi: 21.05.2017).