{"version":1,"lectureId":"01M6K3T0QG1KE1TQKTK49RJ1JN","attempt":0,"publication":{"slug":"kalman-filtresi-performans-ve-tutarlılık-testleri","title":"Kalman Filtresi Performans ve Tutarlılık Testleri","subject":"engineering","summary":"Bir Kalman filtresinin gerçekten doğru çalışıp çalışmadığını nasıl anlarız? Bu ders, altı değerlendirme boyutunu sırayla kuruyor: RMSE ile kestirim doğruluğu, NEES ve ANEES ile kovaryans tutarlılığı ve ki kare güven sınırları, NIS ile ölçüm tutarlılığı ve hipotez testi, inovasyon otokorelasyonu ile beyazlık ve Kolmogorov Smirnov ile normallik, Monte Carlo koşularıyla istatistiksel dayanıklılık, ve sırası bozuk ölçümler, replay ve gerçek zamanlı çalışma ile zamanlama güvenilirliği. Her testin sezgisi, formülü, aşırı güvenli ve fazla temkinli filtrenin nasıl göründüğü ve test başarısız olduğunda nereye bakılacağı gösteriliyor.","metaDescription":"Kalman filtresini RMSE, NEES, ANEES, NIS, beyazlık, KS testi, Monte Carlo ve zamanlama testleriyle değerlendirmeyi adım adım öğrenin.","transcript":"Bir Kalman filtresi yazdınız, kod çalışıyor ve kestirimler makul görünüyor. Peki filtrenin gerçekten doğru çalıştığını nasıl bilirsiniz? Bu derste bunun için kullandığımız testleri tek tek kuracağız. Filtreyi altı ayrı soruyla sorgulayacağız. Birincisi doğruluk: hata ne kadar büyük? Bunu RMSE ile ölçeriz. İkincisi kovaryans tutarlılığı: filtre kendi belirsizliğini doğru biliyor mu? NEES ve ANEES bunu ölçer. Üçüncüsü ölçüm tutarlılığı, yani NIS. Dördüncüsü inovasyonların beyaz ve Gauss dağılımlı olup olmadığı. Beşincisi Monte Carlo ile istatistiksel dayanıklılık. Altıncısı da zamanlama: geç gelen ölçümler, kayıttan tekrar oynatma ve gerçek zaman. Bu altı sorunun ortak bir fikri var. Filtre her adımda bize iki şey verir: bir kestirim ve bu kestirime ne kadar güvendiğini söyleyen bir kovaryans. Testler, bu ikisinin gerçekle uyuşup uyuşmadığına bakar. Önce doğruluk. Gerçek durumu bildiğimiz bir benzetimde her an kestirim hatasını hesaplayabiliriz: gerçek durumdan kestirimi çıkarırız. Bu mavi eğri, tek bir koşudaki hatanın zamanla değişimi. Bazen pozitif, bazen negatif, ortalaması sıfıra yakın. Bu yüzden hatayı doğrudan ortalamak bize büyüklüğü söylemez. Çözüm, önce karesini almak. Sarı eğri hatanın karesi, artık her şey pozitif. Sonra bu kareleri ortalarız ve karekök alarak birimi geri getiririz. Formüldeki N, Monte Carlo koşu sayısı. Her koşunun hata karesi toplanır, koşu sayısına bölünür ve karekökü alınır. Bu örnekte sonuç yaklaşık sıfır virgül yetmiş üç metre. Yeşil çizgiler bu seviyeyi gösteriyor: hata tipik olarak bu bandın içinde dolaşır. Ama dikkat. RMSE yalnızca hatanın ne kadar büyük olduğunu söyler. Filtrenin bu hatayı önceden bilip bilmediğini söylemez. Bunun için kovaryansa bakmamız gerekiyor. Kalman filtresi yalnızca bir kestirim üretmez, bu kestirimin ne kadar belirsiz olduğunu da söyler: kovaryans matrisi P. Sarı kesikli çizgiler, filtrenin kendi iddiası olan artı eksi iki sigma bandı. Tutarlı bir filtrede gerçek hata bu bandın içinde kalır, yalnızca arada bir dışarı taşar. Burada durum tam olarak böyle. Şimdi filtrenin kendine fazla güvendiğini düşünün. Kovaryans gerçekte olduğundan küçük. Bant daralıyor ve hata sürekli dışarı taşıyor. Buna aşırı güvenli filtre diyoruz. Tersi de olabilir. Kovaryans gereğinden büyükse bant genişler ve hata kenarlara hiç yaklaşmaz. Bu da fazla temkinli bir filtre. İkisi de kötü. Aşırı güvenli filtre yeni ölçümleri dinlemeyi bırakır ve sapar. Fazla temkinli filtre gürültüye gereğinden çok tepki verir. Doğru bant ikisinin arasında. Bunu tek bir sayıya dökelim. Hatayı kovaryansın tersiyle ağırlıklandırırız. Sonuç NEES: normalleştirilmiş kestirim hatası karesi. Kilit nokta, ortadaki P üzeri eksi bir terimi. Hata büyük ama filtre küçük kovaryans iddia ediyorsa NEES büyür. Yani NEES, gerçek hatayı filtrenin iddiasıyla kıyaslar. Filtre tutarlıysa hata sıfır ortalamalı Gauss dağılımlıdır ve kovaryansı gerçekten P olur. O zaman NEES, serbestlik derecesi durum boyutu olan bir ki kare dağılımına uyar. Ki kare dağılımının ortalaması serbestlik derecesine eşittir. Dolayısıyla tutarlı bir filtrede NEES ortalaması durum boyutuna eşit olmalı. İki boyutlu bir durum için bu sayı iki. Tek bir koşudaki NEES çok gürültülüdür, tek başına karar vermeye yetmez. Bu yüzden aynı senaryoyu N kez, farklı rastgele gürültülerle koşarız. Her zaman adımında N tane NEES değerinin ortalamasını alırız. Buna ortalama NEES, kısaca ANEES denir. Mavi eğri, elli koşuluk bir deneyin ANEES değeri. Peki ne kadar sapma kabul edilebilir? N çarpı ANEES, serbestlik derecesi N çarpı durum boyutu olan bir ki kare dağılımına uyar. Bu dağılımın yüzde doksan beşlik aralığını N ile böleriz. Elli koşu ve iki boyutlu durum için sınırlar bir virgül kırk sekiz ve iki virgül elli dokuz. İşte yeşil kesikli çizgiler. Tutarlı bir filtrenin ANEES eğrisi zamanın büyük bölümünde bu bandın içinde kalır. Bizim eğrimiz de tam iki civarında dolaşıyor. Eğri üst sınırın üstüne çıkarsa filtre aşırı güvenlidir, yani kovaryansı küçüktür. İlk şüpheliler çok küçük seçilmiş bir süreç gürültüsü Q ya da modelde eksik bir dinamiktir. Eğri alt sınırın altına inerse filtre fazla temkinlidir. Q ya da başlangıç kovaryansı gereğinden büyük seçilmiş olabilir. Ayarlar düzeltildiğinde eğri banda geri döner. Dikkat: bu test gerçek durumu bilmeyi gerektirir, yani yalnızca benzetimde yapılabilir. NEES testinin bir zayıflığı var: gerçek durumu bilmemiz gerekiyor. Sahadaki gerçek bir araçta bu bilgi yoktur, elimizde yalnızca ölçümler vardır. Filtre her adımda gelecek ölçümü tahmin eder. Gelen ölçüm ile bu tahmin arasındaki farka inovasyon denir. Filtre bu farkın büyüklüğünü de öngörür: inovasyon kovaryansı S. Durum belirsizliğinin ölçüm uzayına taşınmış hali, artı ölçüm gürültüsü R. İnovasyonu S matrisinin tersiyle ağırlıklandırırsak NIS elde ederiz: normalleştirilmiş inovasyon karesi. Yapı NEES ile aynı, ama gerçek değere hiç ihtiyaç yok. Tutarlı bir filtrede NIS, serbestlik derecesi ölçüm boyutu olan bir ki kare dağılımına uyar. Sağdaki mavi eğri, iki boyutlu bir ölçüm için bu dağılımdır. Hipotez testini kuralım. Sıfır hipotezi, filtrenin tutarlı olduğudur. Yeşil alan, yüzde doksan beş güvenlik kabul bölgesidir. Sınırlar sıfır virgül sıfır beş ve yedi virgül otuz sekiz. Bir adımda NIS bir virgül sekiz çıktı diyelim. Kabul bölgesinin içinde, reddetmek için bir neden yok. Peki on virgül beş çıkarsa? Bu, kuyrukta kalan ve çok olası olmayan bir değer. Bir kez olursa tesadüftür, sık sık oluyorsa filtre aşırı güvenlidir. Tipik nedenler, çok küçük seçilmiş bir ölçüm gürültüsü R, yanlış bir ölçüm modeli H ya da aykırı ölçümlerdir. Ters yönde, NIS sürekli sıfıra çok yakınsa filtre ölçümleri olduğundan gürültülü sanıyordur. Bu kez R büyük seçilmiş olabilir. Tek bir adım yerine K adımlık zaman ortalaması çok daha güçlü bir testtir. K çarpı ortalama NIS, K çarpı ölçüm boyutu serbestlikli bir ki kare dağılımına uyar. En güzeli şu: bu test gerçek değer istemediği için sahada, canlı veriyle de çalıştırılabilir. Tutarlılık testleri büyüklüğe bakar. Optimal bir Kalman filtresinin inovasyonları bir şey daha sağlamalı: zaman içinde birbirinden bağımsız olmalı. Buna beyazlık denir. Mantık şu: inovasyon, ölçümün tahmin edilemeyen kısmıdır. Bugünkü inovasyon yarınkini tahmin etmeye yarıyorsa, filtre eldeki bilgiyi tam kullanmıyor demektir. Bunu otokorelasyonla ölçeriz. İnovasyon dizisini, l adım kaydırılmış haliyle çarpar, toplar ve normalleştiririz. Beyaz bir dizide sıfırdan farklı her gecikmede bu değer küçüktür. Mavi çubuklar sıfır çevresinde rastgele dağılıyor. Ne kadar küçük? K örnekte yüzde doksan beş sınırı, bir virgül doksan altı bölü kök K. Yüz örnekte yaklaşık sıfır virgül iki. Yeşil kesikli çizgiler bu sınır. Şimdi modelde eksik bir dinamik olduğunu düşünün, örneğin ivmeyi modellemedik. İnovasyonlar renklenir: ilk gecikmeler sınırın çok üstüne çıkar ve yavaşça söner. Bu görüntü, modelin bir şeyi kaçırdığını gösterir. Çare, model yapısını gözden geçirmek ya da süreç gürültüsünü doğru yapıda kurmaktır. Beyazlık bağımsızlığı sınar. Bir de dağılımın şekline bakarız: inovasyonlar gerçekten Gauss mu? Her inovasyonu kendi standart sapmasına böleriz, tutarlı filtrede sonuç standart normal dağılır. Sarı eğri standart normalin birikimli dağılım fonksiyonu. Mavi merdiven ise on iki normalleştirilmiş inovasyonun deneysel birikimli dağılımı. Kolmogorov Smirnov testi, bu iki eğri arasındaki en büyük dikey uzaklığa bakar. Bu uzaklığa D istatistiği denir. Burada D yaklaşık sıfır virgül sıfır dokuz. On iki örnek için yüzde doksan beşlik kritik değer sıfır virgül otuz dokuz. D bunun çok altında, normallik reddedilmez. Test başarısız olursa genellikle kalın kuyruklu gürültü ya da aykırı ölçümler vardır. O zaman ölçüm kapısı ya da sağlam bir gürültü modeli düşünülür. Unutmayın, NIS ortalaması tutsa bile dağılımın şekli yanlış olabilir. Şimdiye kadar konuştuğumuz testlerin çoğu tek bir koşuya güvenmez. Gürültü rastgeledir, tek bir şanslı ya da şanssız koşu bizi yanıltabilir. Çözüm Monte Carlo benzetimidir. Her koşuda başlangıç durumunu, süreç gürültüsünü ve ölçüm gürültüsünü bağımsız olarak yeniden çekeriz. Senaryo aynı, rastgelelik farklı. Sonra RMSE, ANEES ve NIS gibi metrikleri tüm koşular üzerinden ortalarız. Peki kaç koşu yeterli? Koşu sayısı arttıkça ANEES kabul bandı daralır. On koşuda bant sıfır virgül doksan altı ile üç virgül kırk iki arasında, oldukça geniş. Elli koşuda bir virgül kırk sekiz ile iki virgül elli dokuz arasına iner. Yüz koşuda ise bir virgül altmış üç ile iki virgül kırk bir arası. Bant, beklenen değer olan ikinin çevresinde sıkışıyor. Daha çok koşu, daha keskin bir test demektir ve küçük tutarsızlıklar da yakalanır. Pratikte elli ile yüz koşu iyi bir başlangıçtır. Bir uyarı daha: tek senaryo yetmez. Farklı manevralar, başlangıç hataları ve gürültü seviyeleriyle de deneriz. Rastgele tohumları da kaydederiz ki her sonuç birebir tekrarlanabilsin. Son boyut zamanlama. Gerçek sistemlerde ölçümler her zaman sırayla gelmez. Bir radar ölçümü üç virgül dördüncü saniyede alınmış, ama ağ gecikmesi yüzünden ancak beş virgül altıda gelmiş olabilir. Bu arada filtre çoktan beşinci saniyeye ilerlemiştir. Buna sırası bozuk ölçüm, kısaca OOSM denir. Üç yol var. En basit yol, ölçümü atmaktır, ama bilgi kaybederiz. İkinci yol, geçmiş durumları bir tamponda saklamak, ölçüm anına geri sarmak ve sonrasını yeniden işlemektir. Doğrudur ama hesap yükü getirir. Üçüncü yol, gecikmiş ölçümü geriye doğru bir kestirimle doğrudan bugünkü duruma katmaktır. Daha ucuzdur ama dikkatli bir türetme ister. Nasıl test ederiz? Kaydedilmiş veriyi, gecikmeleri yapay olarak karıştırıp tekrar oynatırız ve sonucu sıralı işlenmiş referansla karşılaştırırız. NEES ve NIS burada da tutmalı. Bir de kayıttan tekrar oynatma testi var. Aynı kayıt aynı filtreye verildiğinde her seferinde birebir aynı sonucu almalıyız. Almıyorsak kodda bir zamanlama ya da başlatma hatası vardır. Son olarak gerçek zaman. Her döngüde hesap süresi ile gecikmenin toplamı, örnekleme periyodundan küçük olmalı. Mavi eğri döngü başına hesap süresi, kırmızı çizgi on milisaniyelik sınır. Ortalama süre sınırın rahatça altında. Ama yetmişinci döngü civarında bir sıçrama sınırı aşıyor. Gerçek zamanda önemli olan ortalama değil, en kötü durumdur. Bir de her ölçümü varış anına göre değil, gerçek ölçüm anına göre işleyin. Zaman damgası hatası, tutarlılık testlerini sessizce bozar. Toparlayalım. Bir test başarısız olduğunda nereye bakacağımızı bu tablo özetliyor. ANEES ya da NIS üst sınırı aşıyorsa filtre aşırı güvenlidir: Q ya da R çok küçük, ya da model eksik. Alt sınırın altındaysa tersi, kovaryanslar şişkin. İnovasyonlar renkliyse modelde eksik bir dinamik aranır. KS testi başarısızsa aykırı değerlere ve Gauss dışı gürültüye bakılır. Replay ile gerçek zamanlı sonuçlar ayrışıyorsa zaman damgalarına ve geciken ölçümlere bakılır. Bu testlerin hepsinden geçen bir filtre artık yalnızca çalışan değil, kendi belirsizliğini doğru bilen bir filtredir. Dersin amacı da tam olarak buydu.","watch":{"version":1,"scenes":[{"title":"Neden Test Ederiz? Doğruluk ve RMSE","start":0,"end":121.0010625,"objects":{"axes":"an Axes (x_range=(0.0, 10.0), y_range=(-2.0, 2.0), x_ticks_every=2.0)","band_hi":"a Line [green] drawn in axes (start=(0.0, 0.73), end=(10.0, 0.73), dashed=True)","band_lo":"a Line [green] drawn in axes (start=(0.0, -0.73), end=(10.0, -0.73), dashed=True)","card":"a Title that says \"Durum Kestirimi ve Kalman Filtresi — Kalman Filtresi Performans ve Tutarlılık Testleri\"","dims":"a Table [text] that says \"Boyut Yöntem Kestirim doğruluğu RMSE Kovaryans tutarlılığı NEES, ANEES Ölçüm tutarlılığı NIS İnovasyon beyazlığı Otokorelasyon, KS testi İstatistiksel dayanıklılık Monte Carlo Zamanlama güvenilirliği OOSM, replay, gerçek zaman\" (rows=(('Boyut', 'Yöntem'), ('Kestirim doğruluğu', 'RMSE'), ('Kovarya…, header=True)","err_curve":"a FunctionPlot [blue] drawn in axes (function=<function>, x_range=(0.0, 10.0))","err_def":"a Math [text] that says \"$tilde(bold(x))_k = bold(x)_k - hat(bold(x))_(k|k)$\"","head_map":"a Heading that says \"Filtreyi Neye Göre Değerlendiririz?\"","head_rmse":"a Heading that says \"Kestirim Doğruluğu: RMSE\"","rmse_f":"a Math [text] that says \"$upright(\"RMSE\")_k = sqrt(frac(1, N) sum_(i=1)^N norm(tilde(bold(x))_k^i)^2)$\"","rmse_val":"a Math [text] that says \"$upright(\"RMSE\") approx 0.73 thin upright(\"m\")$\"","sq_curve":"a FunctionPlot [yellow] drawn in axes (function=<function>, x_range=(0.0, 10.0))"},"beats":[{"start":0,"say":"Bir Kalman filtresi yazdınız, kod çalışıyor ve kestirimler makul görünüyor. Peki filtrenin gerçekten doğru çalıştığını nasıl bilirsiniz? Bu derste bunun için kullandığımız testleri tek tek kuracağız.","live":[],"does":[[0,"card is shown on the screen, written out."],[1.4813802622498273,"card: enter:write-left-to-right."],[12.24,"card is hidden from the screen — left the board."]]},{"start":13.44,"say":"Filtreyi altı ayrı soruyla sorgulayacağız. Birincisi doğruluk: hata ne kadar büyük? Bunu RMSE ile ölçeriz.","live":null,"does":[[13.44,"head_map is shown on the screen, written out."],[14.24,"dims is shown on the screen, written out."],[17.2,"dims is shown on the screen, written out."]]},{"start":21.865000000000002,"say":"İkincisi kovaryans tutarlılığı: filtre kendi belirsizliğini doğru biliyor mu? NEES ve ANEES bunu ölçer. Üçüncüsü ölçüm tutarlılığı, yani NIS.","live":["head_map"],"does":[[22.76,"dims is shown on the screen, written out."],[29.68,"dims is shown on the screen, written out."]]},{"start":33.4275,"say":"Dördüncüsü inovasyonların beyaz ve Gauss dağılımlı olup olmadığı. Beşincisi Monte Carlo ile istatistiksel dayanıklılık. Altıncısı da zamanlama: geç gelen ölçümler, kayıttan tekrar oynatma ve gerçek zaman.","live":null,"does":[[33.6,"dims is shown on the screen, written out."],[37.879999999999995,"dims is shown on the screen, written out."],[41.39999999999999,"dims is shown on the screen, written out."]]},{"start":47.375,"say":"Bu altı sorunun ortak bir fikri var. Filtre her adımda bize iki şey verir: bir kestirim ve bu kestirime ne kadar güvendiğini söyleyen bir kovaryans. Testler, bu ikisinin gerçekle uyuşup uyuşmadığına bakar.","live":null,"does":[[52.68,"dims (the \"column=2\" part) is emphasized."],[56.839999999999996,"dims (the \"column=2\" part) is no longer emphasized."],[60.2725,"dims is hidden from the screen — left the board."],[60.2725,"head_map is hidden from the screen — left the board."]]},{"start":61.4725,"say":"Önce doğruluk. Gerçek durumu bildiğimiz bir benzetimde her an kestirim hatasını hesaplayabiliriz: gerçek durumdan kestirimi çıkarırız.","live":[],"does":[[61.4725,"head_rmse is shown on the screen, written out."],[61.4725,"axes is shown on the screen, written out."],[65.96,"axes moves to a new place on the board."],[65.96,"err_def is shown on the screen, written out."]]},{"start":70.30499999999999,"say":"Bu mavi eğri, tek bir koşudaki hatanın zamanla değişimi. Bazen pozitif, bazen negatif, ortalaması sıfıra yakın. Bu yüzden hatayı doğrudan ortalamak bize büyüklüğü söylemez.","live":["err_def","axes","head_rmse"],"does":[[70.64,"err_curve is shown on the screen, written out."]]},{"start":82.035,"say":"Çözüm, önce karesini almak. Sarı eğri hatanın karesi, artık her şey pozitif. Sonra bu kareleri ortalarız ve karekök alarak birimi geri getiririz.","live":["err_def","axes","head_rmse","err_curve"],"does":[[84.4,"sq_curve is shown on the screen, written out."],[88.80000000000001,"rmse_f is shown on the screen, written out."]]},{"start":92.41749999999999,"say":"Formüldeki N, Monte Carlo koşu sayısı. Her koşunun hata karesi toplanır, koşu sayısına bölünür ve karekökü alınır.","live":["err_def","rmse_f","axes","head_rmse","err_curve","sq_curve"],"does":[[94.4,"rmse_f (the \"frac(1, N)\" part) is emphasized."],[96.76,"rmse_f (the \"frac(1, N)\" part) is no longer emphasized."],[96.76,"rmse_f (the \"norm(tilde(bold(x))_k^i)^2\" part) is emphasized."],[99.83999999999999,"rmse_f (the \"norm(tilde(bold(x))_k^i)^2\" part) is no longer emphasized."]]},{"start":100.44,"say":"Bu örnekte sonuç yaklaşık sıfır virgül yetmiş üç metre. Yeşil çizgiler bu seviyeyi gösteriyor: hata tipik olarak bu bandın içinde dolaşır.","live":null,"does":[[101.40000000000002,"rmse_val is shown on the screen, written out."],[104.20000000000003,"band_hi is shown on the screen, written out."],[104.20000000000003,"band_lo is shown on the screen, written out."]]},{"start":109.515,"say":"Ama dikkat. RMSE yalnızca hatanın ne kadar büyük olduğunu söyler. Filtrenin bu hatayı önceden bilip bilmediğini söylemez. Bunun için kovaryansa bakmamız gerekiyor.","live":["err_def","rmse_f","rmse_val","axes","head_rmse","err_curve","sq_curve","band_hi","band_lo"],"does":[[111.28000000000003,"A box is drawn around rmse_val."],[119.95939583333332,"axes is hidden from the screen — left the board."],[119.95939583333332,"err_curve is hidden from the screen — axes left the board."],[119.95939583333332,"sq_curve is hidden from the screen — axes left the board."],[119.95939583333332,"band_hi is hidden from the screen — axes left the board."],[119.95939583333332,"band_lo is hidden from the screen — axes left the board."],[119.95939583333332,"err_def is hidden from the screen — left the board."],[119.95939583333332,"head_rmse is hidden from the screen — left the board."],[119.95939583333332,"rmse_f is hidden from the screen — left the board."],[119.95939583333332,"rmse_val is hidden from the screen — left the board."]]}]},{"title":"Kovaryans Tutarlılığı: NEES ve ANEES","start":121.0010625,"end":300.30333333333334,"objects":{"anees_f":"a Math [text] that says \"$overline(epsilon)_k = frac(1, N) sum_(i=1)^N epsilon_k^i$\"","axes":"an Axes (x_range=(0.0, 10.0), y_range=(-3.0, 3.0), x_ticks_every=2.0)","bounds_f":"a Math [text] that says \"$[r_1, r_2] = [1.48, 2.59]$\"","chi_f":"a Math [text] that says \"$epsilon_k tilde.op chi^2_(n_x)$\"","curve":"a FunctionPlot [blue] drawn in plot (function=<function>, x_range=(0.0, 100.0))","dist_f":"a Math [text] that says \"$N overline(epsilon)_k tilde.op chi^2_(N n_x)$\"","err_curve":"a FunctionPlot [blue] drawn in axes (function=<function>, x_range=(0.0, 10.0))","head_anees":"a Heading that says \"Monte Carlo Ortalaması: ANEES\"","head_nees":"a Heading that says \"Kovaryans Tutarlılığı: NEES\"","hi":"a Line [yellow] drawn in axes (start=(0.0, (2.0 * sig)), end=(10.0, (2.0 * sig)), dashed=True)","lo":"a Line [yellow] drawn in axes (start=(0.0, (-2.0 * sig)), end=(10.0, (-2.0 * sig)), dashed=True)","mean_f":"a Math [text] that says \"$E[epsilon_k] = n_x$\"","nees_f":"a Math [text] that says \"$epsilon_k = tilde(bold(x))_k^T bold(P)_(k|k)^(-1) tilde(bold(x))_k$\"","plot":"an Axes (x_range=(0.0, 100.0), y_range=(0.0, 5.0), x_ticks_every=20.0)","point":"a Point [yellow] drawn in plot (location=(50.0, 2.039052175923275))","r_hi":"a Line [green] drawn in plot (start=(0.0, 2.59), end=(100.0, 2.59), dashed=True)","r_lo":"a Line [green] drawn in plot (start=(0.0, 1.48), end=(100.0, 1.48), dashed=True)","shift":"a VariableNumber","sig":"a VariableNumber (initial_value=0.73)"},"beats":[{"start":121.0010625,"say":"Kalman filtresi yalnızca bir kestirim üretmez, bu kestirimin ne kadar belirsiz olduğunu da söyler: kovaryans matrisi P. Sarı kesikli çizgiler, filtrenin kendi iddiası olan artı eksi iki sigma bandı.","live":[],"does":[[121.0010625,"head_nees is shown on the screen, written out."],[121.0010625,"axes is shown on the screen, written out."],[121.0010625,"err_curve is shown on the screen, written out."],[128.72106250000002,"hi is shown on the screen, written out."],[128.72106250000002,"lo is shown on the screen, written out."]]},{"start":134.3185625,"say":"Tutarlı bir filtrede gerçek hata bu bandın içinde kalır, yalnızca arada bir dışarı taşar. Burada durum tam olarak böyle.","live":["axes","head_nees","err_curve","hi","lo"],"does":[]},{"start":142.2055625,"say":"Şimdi filtrenin kendine fazla güvendiğini düşünün. Kovaryans gerçekte olduğundan küçük. Bant daralıyor ve hata sürekli dışarı taşıyor. Buna aşırı güvenli filtre diyoruz.","live":null,"does":[[148.1210625,"hi is redrawn as the numbers it depends on change."],[148.1210625,"lo is redrawn as the numbers it depends on change."],[148.1210625,"sig ticks to 0.3."]]},{"start":153.5610625,"say":"Tersi de olabilir. Kovaryans gereğinden büyükse bant genişler ve hata kenarlara hiç yaklaşmaz. Bu da fazla temkinli bir filtre.","live":null,"does":[[157.1210625,"hi is redrawn as the numbers it depends on change."],[157.1210625,"lo is redrawn as the numbers it depends on change."],[157.1210625,"sig ticks to 1.3."]]},{"start":162.5085625,"say":"İkisi de kötü. Aşırı güvenli filtre yeni ölçümleri dinlemeyi bırakır ve sapar. Fazla temkinli filtre gürültüye gereğinden çok tepki verir. Doğru bant ikisinin arasında.","live":null,"does":[[171.40106250000002,"hi is redrawn as the numbers it depends on change."],[171.40106250000002,"lo is redrawn as the numbers it depends on change."],[171.40106250000002,"sig ticks to 0.73."]]},{"start":173.8185625,"say":"Bunu tek bir sayıya dökelim. Hatayı kovaryansın tersiyle ağırlıklandırırız. Sonuç NEES: normalleştirilmiş kestirim hatası karesi.","live":null,"does":[[174.9080625,"axes moves to a new place on the board."],[174.9080625,"nees_f is shown on the screen, written out."]]},{"start":183.2260625,"say":"Kilit nokta, ortadaki P üzeri eksi bir terimi. Hata büyük ama filtre küçük kovaryans iddia ediyorsa NEES büyür. Yani NEES, gerçek hatayı filtrenin iddiasıyla kıyaslar.","live":["nees_f","axes","head_nees","err_curve","hi","lo"],"does":[[183.40106250000002,"nees_f (the \"bold(P)_(k|k)^(-1)\" part) is emphasized."],[191.6010625,"nees_f (the \"bold(P)_(k|k)^(-1)\" part) is no longer emphasized."]]},{"start":196.0385625,"say":"Filtre tutarlıysa hata sıfır ortalamalı Gauss dağılımlıdır ve kovaryansı gerçekten P olur. O zaman NEES, serbestlik derecesi durum boyutu olan bir ki kare dağılımına uyar.","live":null,"does":[[203.3610625,"chi_f is shown on the screen, written out."]]},{"start":207.63106249999998,"say":"Ki kare dağılımının ortalaması serbestlik derecesine eşittir. Dolayısıyla tutarlı bir filtrede NEES ortalaması durum boyutuna eşit olmalı. İki boyutlu bir durum için bu sayı iki.","live":["nees_f","chi_f","axes","head_nees","err_curve","hi","lo"],"does":[[211.45406250000002,"mean_f is shown on the screen, written out."],[217.96106250000003,"mean_f (the \"n_x\" part) is indicated — a transient flash."],[218.4985625,"axes is hidden from the screen — left the board."],[218.4985625,"err_curve is hidden from the screen — axes left the board."],[218.4985625,"hi is hidden from the screen — axes left the board."],[218.4985625,"lo is hidden from the screen — axes left the board."],[218.4985625,"chi_f is hidden from the screen — left the board."],[218.4985625,"head_nees is hidden from the screen — left the board."],[218.4985625,"mean_f is hidden from the screen — left the board."],[218.4985625,"nees_f is hidden from the screen — left the board."]]},{"start":219.69856249999998,"say":"Tek bir koşudaki NEES çok gürültülüdür, tek başına karar vermeye yetmez. Bu yüzden aynı senaryoyu N kez, farklı rastgele gürültülerle koşarız.","live":[],"does":[[219.69856249999998,"head_anees is shown on the screen, written out."],[225.2410625,"plot is shown on the screen, written out."]]},{"start":229.5260625,"say":"Her zaman adımında N tane NEES değerinin ortalamasını alırız. Buna ortalama NEES, kısaca ANEES denir. Mavi eğri, elli koşuluk bir deneyin ANEES değeri.","live":["plot","head_anees"],"does":[[232.24106250000003,"plot moves to a new place on the board."],[232.24106250000003,"anees_f is shown on the screen, written out."],[236.80106250000003,"curve is shown on the screen, written out."]]},{"start":240.4985625,"say":"Peki ne kadar sapma kabul edilebilir? N çarpı ANEES, serbestlik derecesi N çarpı durum boyutu olan bir ki kare dağılımına uyar.","live":["anees_f","plot","head_anees","curve"],"does":[[243.40106250000002,"dist_f is shown on the screen, written out."]]},{"start":249.46106249999997,"say":"Bu dağılımın yüzde doksan beşlik aralığını N ile böleriz. Elli koşu ve iki boyutlu durum için sınırlar bir virgül kırk sekiz ve iki virgül elli dokuz. İşte yeşil kesikli çizgiler.","live":["anees_f","dist_f","plot","head_anees","curve"],"does":[[255.28106250000002,"bounds_f is shown on the screen, written out."],[259.20106250000003,"r_lo is shown on the screen, written out."],[259.20106250000003,"r_hi is shown on the screen, written out."]]},{"start":261.1985625,"say":"Tutarlı bir filtrenin ANEES eğrisi zamanın büyük bölümünde bu bandın içinde kalır. Bizim eğrimiz de tam iki civarında dolaşıyor.","live":["anees_f","dist_f","bounds_f","plot","head_anees","curve","r_lo","r_hi"],"does":[[267.8010625,"point is shown on the screen, grown."]]},{"start":269.6385625,"say":"Eğri üst sınırın üstüne çıkarsa filtre aşırı güvenlidir, yani kovaryansı küçüktür. İlk şüpheliler çok küçük seçilmiş bir süreç gürültüsü Q ya da modelde eksik bir dinamiktir.","live":["anees_f","dist_f","bounds_f","plot","head_anees","curve","r_lo","r_hi","point"],"does":[[269.95605289224414,"point is hidden from the screen."],[271.20106250000003,"curve is redrawn as the numbers it depends on change."],[271.20106250000003,"shift ticks to 1.3."]]},{"start":281.3760625,"say":"Eğri alt sınırın altına inerse filtre fazla temkinlidir. Q ya da başlangıç kovaryansı gereğinden büyük seçilmiş olabilir.","live":["anees_f","dist_f","bounds_f","plot","head_anees","curve","r_lo","r_hi"],"does":[[283.08106250000003,"curve is redrawn as the numbers it depends on change."],[283.08106250000003,"shift ticks to -0.9."]]},{"start":289.8210625,"say":"Ayarlar düzeltildiğinde eğri banda geri döner. Dikkat: bu test gerçek durumu bilmeyi gerektirir, yani yalnızca benzetimde yapılabilir.","live":null,"does":[[290.44106250000004,"curve is redrawn as the numbers it depends on change."],[290.44106250000004,"shift ticks to 0.0."],[299.26166666666666,"anees_f is hidden from the screen — left the board."],[299.26166666666666,"bounds_f is hidden from the screen — left the board."],[299.26166666666666,"dist_f is hidden from the screen — left the board."],[299.26166666666666,"head_anees is hidden from the screen — left the board."],[299.26166666666666,"plot is hidden from the screen — left the board."],[299.26166666666666,"curve is hidden from the screen — plot left the board."],[299.26166666666666,"r_lo is hidden from the screen — plot left the board."],[299.26166666666666,"r_hi is hidden from the screen — plot left the board."]]}]},{"title":"Ölçüm Tutarlılığı: NIS","start":300.30333333333334,"end":413.52070833333335,"objects":{"accept":"an AreaUnder [green] drawn in dens (x_range=(0.05, 7.38), target='pdf')","avg_f":"a Math [text] that says \"$K overline(epsilon)_nu tilde.op chi^2_(K n_z)$\"","chi_nis":"a Math [text] that says \"$epsilon_(nu,k) tilde.op chi^2_(n_z)$\"","dens":"an Axes (x_range=(0.0, 12.0), y_range=(0.0, 0.6), x_ticks_every=2.0)","heading":"a Heading that says \"Ölçüm Tutarlılığı: NIS\"","innov_f":"a Math [text] that says \"$bold(nu)_k = bold(z)_k - bold(H) hat(bold(x))_(k|k-1)$\"","nis_f":"a Math [text] that says \"$epsilon_(nu,k) = bold(nu)_k^T bold(S)_k^(-1) bold(nu)_k$\"","nis_val":"a VariableNumber (initial_value=1.8, format_spec='.2f')","pdf":"a FunctionPlot [blue] drawn in dens (function=<function>, x_range=(0.0, 12.0))","probe":"a PlotPoint [yellow] labelled \"1.80\" drawn in dens (target='pdf', x=<VariableNumber nis_val = 0.03>)","s_f":"a Math [text] that says \"$bold(S)_k = bold(H) bold(P)_(k|k-1) bold(H)^T + bold(R)$\""},"beats":[{"start":300.30333333333334,"say":"NEES testinin bir zayıflığı var: gerçek durumu bilmemiz gerekiyor. Sahadaki gerçek bir araçta bu bilgi yoktur, elimizde yalnızca ölçümler vardır.","live":[],"does":[[300.30333333333334,"heading is shown on the screen, written out."]]},{"start":309.97083333333336,"say":"Filtre her adımda gelecek ölçümü tahmin eder. Gelen ölçüm ile bu tahmin arasındaki farka inovasyon denir.","live":["heading"],"does":[[315.06333333333333,"innov_f is shown on the screen, written out."]]},{"start":317.30583333333334,"say":"Filtre bu farkın büyüklüğünü de öngörür: inovasyon kovaryansı S. Durum belirsizliğinin ölçüm uzayına taşınmış hali, artı ölçüm gürültüsü R.","live":["innov_f","heading"],"does":[[320.54333333333335,"s_f is shown on the screen, written out."],[324.0233333333333,"s_f (the \"bold(H) bold(P)_(k|k-1) bold(H)^T\" part) is emphasized."],[326.0233333333333,"s_f (the \"bold(H) bold(P)_(k|k-1) bold(H)^T\" part) is no longer emphasized."],[326.0233333333333,"s_f (the \"bold(R)\" part) is emphasized."],[327.15583333333336,"s_f (the \"bold(R)\" part) is no longer emphasized."]]},{"start":327.7558333333333,"say":"İnovasyonu S matrisinin tersiyle ağırlıklandırırsak NIS elde ederiz: normalleştirilmiş inovasyon karesi. Yapı NEES ile aynı, ama gerçek değere hiç ihtiyaç yok.","live":["innov_f","s_f","heading"],"does":[[331.22333333333336,"nis_f is shown on the screen, written out."]]},{"start":339.12083333333334,"say":"Tutarlı bir filtrede NIS, serbestlik derecesi ölçüm boyutu olan bir ki kare dağılımına uyar. Sağdaki mavi eğri, iki boyutlu bir ölçüm için bu dağılımdır.","live":["innov_f","s_f","nis_f","heading"],"does":[[341.22333333333336,"chi_nis is shown on the screen, written out."],[344.9433333333333,"dens is shown on the screen, written out."],[344.9433333333333,"pdf is shown on the screen, written out."]]},{"start":349.16333333333336,"say":"Hipotez testini kuralım. Sıfır hipotezi, filtrenin tutarlı olduğudur. Yeşil alan, yüzde doksan beş güvenlik kabul bölgesidir.","live":["innov_f","s_f","nis_f","chi_nis","dens","heading","pdf"],"does":[[353.86333333333334,"accept is shown on the screen, written out."]]},{"start":357.53583333333336,"say":"Sınırlar sıfır virgül sıfır beş ve yedi virgül otuz sekiz. Bir adımda NIS bir virgül sekiz çıktı diyelim. Kabul bölgesinin içinde, reddetmek için bir neden yok.","live":["innov_f","s_f","nis_f","chi_nis","dens","heading","pdf","accept"],"does":[[363.9033333333333,"probe is shown on the screen, written out."]]},{"start":368.28583333333336,"say":"Peki on virgül beş çıkarsa? Bu, kuyrukta kalan ve çok olası olmayan bir değer. Bir kez olursa tesadüftür, sık sık oluyorsa filtre aşırı güvenlidir.","live":["innov_f","s_f","nis_f","chi_nis","dens","heading","pdf","accept","probe"],"does":[[369.62333333333333,"probe is redrawn as the numbers it depends on change."],[369.62333333333333,"nis_val ticks to 10.5."]]},{"start":378.91583333333335,"say":"Tipik nedenler, çok küçük seçilmiş bir ölçüm gürültüsü R, yanlış bir ölçüm modeli H ya da aykırı ölçümlerdir.","live":null,"does":[[379.10333333333335,"s_f (the \"bold(R)\" part) is indicated — a transient flash."],[382.86333333333334,"innov_f (the \"bold(H)\" part) is indicated — a transient flash."]]},{"start":386.9558333333333,"say":"Ters yönde, NIS sürekli sıfıra çok yakınsa filtre ölçümleri olduğundan gürültülü sanıyordur. Bu kez R büyük seçilmiş olabilir.","live":null,"does":[[388.98333333333335,"probe is redrawn as the numbers it depends on change."],[388.98333333333335,"nis_val ticks to 0.03."]]},{"start":395.8933333333333,"say":"Tek bir adım yerine K adımlık zaman ortalaması çok daha güçlü bir testtir. K çarpı ortalama NIS, K çarpı ölçüm boyutu serbestlikli bir ki kare dağılımına uyar.","live":null,"does":[[398.22333333333336,"avg_f is shown on the screen, written out."]]},{"start":406.55083333333334,"say":"En güzeli şu: bu test gerçek değer istemediği için sahada, canlı veriyle de çalıştırılabilir.","live":["innov_f","s_f","nis_f","chi_nis","avg_f","dens","heading","pdf","accept","probe"],"does":[[406.9433333333334,"A box is drawn around avg_f."],[412.47904166666666,"avg_f is hidden from the screen — left the board."],[412.47904166666666,"chi_nis is hidden from the screen — left the board."],[412.47904166666666,"dens is hidden from the screen — left the board."],[412.47904166666666,"pdf is hidden from the screen — dens left the board."],[412.47904166666666,"accept is hidden from the screen — dens left the board."],[412.47904166666666,"probe is hidden from the screen — dens left the board."],[412.47904166666666,"heading is hidden from the screen — left the board."],[412.47904166666666,"innov_f is hidden from the screen — left the board."],[412.47904166666666,"nis_f is hidden from the screen — left the board."],[412.47904166666666,"s_f is hidden from the screen — left the board."]]}]},{"title":"İnovasyon Beyazlığı ve KS Testi","start":413.52070833333335,"end":539.0931875,"objects":{"amp":"a VariableNumber","b_hi":"a Line [green] drawn in lags (start=(0.0, 0.196), end=(11.0, 0.196), dashed=True)","b_lo":"a Line [green] drawn in lags (start=(0.0, -0.196), end=(11.0, -0.196), dashed=True)","band_f":"a Math [text] that says \"$abs(hat(rho)_l) < frac(1.96, sqrt(K))$\"","cdf":"an Axes (x_range=(-3.0, 3.0), y_range=(0.0, 1.1), x_ticks_every=1.0)","crit_f":"a Math [text] that says \"$D_n < frac(1.36, sqrt(n))$\"","emp_curve":"a FunctionPlot [blue] drawn in cdf (function=<function>, x_range=(-3.0, 3.0))","gap_line":"a Line [red] labelled \"D_n\" drawn in cdf (start=(1.45, 0.9264707403903516), end=(1.45, 0.8333333333333334))","head_ks":"a Heading that says \"Normallik: Kolmogorov–Smirnov Testi\"","head_white":"a Heading that says \"İnovasyon Beyazlığı\"","ks_f":"a Math [text] that says \"$D_n = max_x abs(F_n (x) - Phi(x))$\"","lags":"an Axes (x_range=(0.0, 11.0), y_range=(-0.4, 0.8), x_ticks_every=2.0)","norm_f":"a Math [text] that says \"$u_k = frac(nu_k, sqrt(S_k)) tilde.op cal(N) (0, 1)$\"","phi_curve":"a FunctionPlot [yellow] drawn in cdf (function=<function>, x_range=(-3.0, 3.0))","rho_f":"a Math [text] that says \"$hat(rho)_l = frac(sum_k nu_k nu_(k+l), sum_k nu_k^2)$\"","stems":"a Line [blue] drawn in lags (start=(1.0, 0.0), end=(1.0, ((amp * 0.8) + 0.09)))","stems_10":"a Line [blue] drawn in lags (start=(10.0, 0.0), end=(10.0, ((amp * 0.10737418240000006) + 0.08)))","stems_2":"a Line [blue] drawn in lags (start=(2.0, 0.0), end=(2.0, ((amp * 0.6400000000000001) + -0.05)))","stems_3":"a Line [blue] drawn in lags (start=(3.0, 0.0), end=(3.0, ((amp * 0.5120000000000001) + 0.12)))","stems_4":"a Line [blue] drawn in lags (start=(4.0, 0.0), end=(4.0, ((amp * 0.4096000000000001) + -0.08)))","stems_5":"a Line [blue] drawn in lags (start=(5.0, 0.0), end=(5.0, ((amp * 0.3276800000000001) + 0.06)))","stems_6":"a Line [blue] drawn in lags (start=(6.0, 0.0), end=(6.0, ((amp * 0.2621440000000001) + 0.1)))","stems_7":"a Line [blue] drawn in lags (start=(7.0, 0.0), end=(7.0, ((amp * 0.20971520000000007) + -0.11)))","stems_8":"a Line [blue] drawn in lags (start=(8.0, 0.0), end=(8.0, ((amp * 0.1677721600000001) + 0.07)))","stems_9":"a Line [blue] drawn in lags (start=(9.0, 0.0), end=(9.0, ((amp * 0.13421772800000006) + -0.06)))","white_f":"a Math [text] that says \"$E[bold(nu)_k bold(nu)_j^T] = bold(S)_k delta_(k j)$\""},"beats":[{"start":413.52070833333335,"say":"Tutarlılık testleri büyüklüğe bakar. Optimal bir Kalman filtresinin inovasyonları bir şey daha sağlamalı: zaman içinde birbirinden bağımsız olmalı. Buna beyazlık denir.","live":[],"does":[[413.52070833333335,"head_white is shown on the screen, written out."],[421.3607083333333,"white_f is shown on the screen, written out."]]},{"start":424.5407083333333,"say":"Mantık şu: inovasyon, ölçümün tahmin edilemeyen kısmıdır. Bugünkü inovasyon yarınkini tahmin etmeye yarıyorsa, filtre eldeki bilgiyi tam kullanmıyor demektir.","live":["white_f","head_white"],"does":[[430.0407083333333,"white_f (the \"delta_(k j)\" part) is indicated — a transient flash."]]},{"start":435.6057083333333,"say":"Bunu otokorelasyonla ölçeriz. İnovasyon dizisini, l adım kaydırılmış haliyle çarpar, toplar ve normalleştiririz.","live":null,"does":[[436.16070833333333,"rho_f is shown on the screen, written out."],[439.89370833333334,"lags is shown on the screen, written out."]]},{"start":444.15070833333334,"say":"Beyaz bir dizide sıfırdan farklı her gecikmede bu değer küçüktür. Mavi çubuklar sıfır çevresinde rastgele dağılıyor.","live":["white_f","rho_f","lags","head_white"],"does":[[448.4807083333333,"stems is shown on the screen, written out."],[448.5773740164257,"stems_2 is shown on the screen, written out."],[448.67403969951806,"stems_3 is shown on the screen, written out."],[448.7718161658634,"stems_4 is shown on the screen, written out."],[448.8792224804105,"stems_5 is shown on the screen, written out."],[448.98662879495754,"stems_6 is shown on the screen, written out."],[449.0940351095046,"stems_7 is shown on the screen, written out."],[449.20144142405167,"stems_8 is shown on the screen, written out."],[449.30884773859873,"stems_9 is shown on the screen, written out."],[449.4026046646012,"stems_10 is shown on the screen, written out."]]},{"start":451.9807083333333,"say":"Ne kadar küçük? K örnekte yüzde doksan beş sınırı, bir virgül doksan altı bölü kök K. Yüz örnekte yaklaşık sıfır virgül iki. Yeşil kesikli çizgiler bu sınır.","live":["white_f","rho_f","lags","head_white","stems","stems_2","stems_3","stems_4","stems_5","stems_6","stems_7","stems_8","stems_9","stems_10"],"does":[[455.0407083333333,"band_f is shown on the screen, written out."],[460.8007083333333,"b_hi is shown on the screen, written out."],[460.8007083333333,"b_lo is shown on the screen, written out."]]},{"start":463.26070833333335,"say":"Şimdi modelde eksik bir dinamik olduğunu düşünün, örneğin ivmeyi modellemedik. İnovasyonlar renklenir: ilk gecikmeler sınırın çok üstüne çıkar ve yavaşça söner.","live":["white_f","rho_f","band_f","lags","head_white","stems","stems_2","stems_3","stems_4","stems_5","stems_6","stems_7","stems_8","stems_9","stems_10","b_hi","b_lo"],"does":[[468.84070833333334,"stems is redrawn as the numbers it depends on change."],[468.84070833333334,"stems_2 is redrawn as the numbers it depends on change."],[468.84070833333334,"stems_3 is redrawn as the numbers it depends on change."],[468.84070833333334,"stems_4 is redrawn as the numbers it depends on change."],[468.84070833333334,"stems_5 is redrawn as the numbers it depends on change."],[468.84070833333334,"stems_6 is redrawn as the numbers it depends on change."],[468.84070833333334,"stems_7 is redrawn as the numbers it depends on change."],[468.84070833333334,"stems_8 is redrawn as the numbers it depends on change."],[468.84070833333334,"stems_9 is redrawn as the numbers it depends on change."],[468.84070833333334,"stems_10 is redrawn as the numbers it depends on change."],[468.84070833333334,"amp ticks to 0.6."]]},{"start":473.90070833333334,"say":"Bu görüntü, modelin bir şeyi kaçırdığını gösterir. Çare, model yapısını gözden geçirmek ya da süreç gürültüsünü doğru yapıda kurmaktır.","live":null,"does":[[477.08070833333335,"rho_f is indicated — a transient flash."],[481.9882083333333,"band_f is hidden from the screen — left the board."],[481.9882083333333,"head_white is hidden from the screen — left the board."],[481.9882083333333,"lags is hidden from the screen — left the board."],[481.9882083333333,"stems is hidden from the screen — lags left the board."],[481.9882083333333,"stems_2 is hidden from the screen — lags left the board."],[481.9882083333333,"stems_3 is hidden from the screen — lags left the board."],[481.9882083333333,"stems_4 is hidden from the screen — lags left the board."],[481.9882083333333,"stems_5 is hidden from the screen — lags left the board."],[481.9882083333333,"stems_6 is hidden from the screen — lags left the board."],[481.9882083333333,"stems_7 is hidden from the screen — lags left the board."],[481.9882083333333,"stems_8 is hidden from the screen — lags left the board."],[481.9882083333333,"stems_9 is hidden from the screen — lags left the board."],[481.9882083333333,"stems_10 is hidden from the screen — lags left the board."],[481.9882083333333,"b_hi is hidden from the screen — lags left the board."],[481.9882083333333,"b_lo is hidden from the screen — lags left the board."],[481.9882083333333,"rho_f is hidden from the screen — left the board."],[481.9882083333333,"white_f is hidden from the screen — left the board."]]},{"start":483.18820833333336,"say":"Beyazlık bağımsızlığı sınar. Bir de dağılımın şekline bakarız: inovasyonlar gerçekten Gauss mu? Her inovasyonu kendi standart sapmasına böleriz, tutarlı filtrede sonuç standart normal dağılır.","live":[],"does":[[483.18820833333336,"head_ks is shown on the screen, written out."],[488.64070833333335,"cdf is shown on the screen, written out."],[491.6807083333333,"cdf moves to a new place on the board."],[491.6807083333333,"norm_f is shown on the screen, written out."]]},{"start":495.8007083333333,"say":"Sarı eğri standart normalin birikimli dağılım fonksiyonu. Mavi merdiven ise on iki normalleştirilmiş inovasyonun deneysel birikimli dağılımı.","live":["norm_f","cdf","head_ks"],"does":[[496.0407083333333,"phi_curve is shown on the screen, written out."],[499.60070833333333,"emp_curve is shown on the screen, written out."]]},{"start":505.01320833333335,"say":"Kolmogorov Smirnov testi, bu iki eğri arasındaki en büyük dikey uzaklığa bakar. Bu uzaklığa D istatistiği denir.","live":["norm_f","cdf","head_ks","phi_curve","emp_curve"],"does":[[506.32070833333336,"ks_f is shown on the screen, written out."],[508.88070833333336,"gap_line is shown on the screen, written out."]]},{"start":513.0657083333333,"say":"Burada D yaklaşık sıfır virgül sıfır dokuz. On iki örnek için yüzde doksan beşlik kritik değer sıfır virgül otuz dokuz. D bunun çok altında, normallik reddedilmez.","live":["norm_f","ks_f","cdf","head_ks","phi_curve","emp_curve","gap_line"],"does":[[518.4807083333334,"crit_f is shown on the screen, written out."]]},{"start":524.4682083333333,"say":"Test başarısız olursa genellikle kalın kuyruklu gürültü ya da aykırı ölçümler vardır. O zaman ölçüm kapısı ya da sağlam bir gürültü modeli düşünülür. Unutmayın, NIS ortalaması tutsa bile dağılımın şekli yanlış olabilir.","live":["norm_f","ks_f","crit_f","cdf","head_ks","phi_curve","emp_curve","gap_line"],"does":[[524.9607083333334,"crit_f is indicated — a transient flash."],[538.0515208333334,"cdf is hidden from the screen — left the board."],[538.0515208333334,"phi_curve is hidden from the screen — cdf left the board."],[538.0515208333334,"emp_curve is hidden from the screen — cdf left the board."],[538.0515208333334,"gap_line is hidden from the screen — cdf left the board."],[538.0515208333334,"crit_f is hidden from the screen — left the board."],[538.0515208333334,"head_ks is hidden from the screen — left the board."],[538.0515208333334,"ks_f is hidden from the screen — left the board."],[538.0515208333334,"norm_f is hidden from the screen — left the board."]]}]},{"title":"İstatistiksel Dayanıklılık: Monte Carlo","start":539.0931875,"end":611.3554583333333,"objects":{"expected":"a Point [yellow] labelled \"n_x\" drawn in line (location=(2.0, 0.0))","heading":"a Heading that says \"İstatistiksel Dayanıklılık: Monte Carlo\"","line":"a NumberLine labelled \"overline(epsilon)\" (x_range=(0.0, 4.0), include_numbers=True)","mc_f":"a Math [text] that says \"$bold(x)_0^i tilde.op cal(N) (hat(bold(x))_0, bold(P)_0)$\"","p_hi":"a Point [green] labelled \"3.42\" drawn in line (location=(<VariableNumber r2 = 2.41>, 0.0))","p_lo":"a Point [green] labelled \"0.96\" drawn in line (location=(<VariableNumber r1 = 1.63>, 0.0))","r1":"a VariableNumber (initial_value=0.96, format_spec='.2f')","r2":"a VariableNumber (initial_value=3.42, format_spec='.2f')","runs":"a Table [text] that says \"N ANEES aralığı 10 $[0.96, 3.42]$ 50 $[1.48, 2.59]$ 100 $[1.63, 2.41]$\" (rows=(('N', 'ANEES aralığı'), ('10', '$[0.96, 3.42]$'), ('50', '$[1.…, header=True)","seg":"a Line [green] drawn in line (start=(<VariableNumber r1 = 1.63>, 0.0), end=(<VariableNumber r2 = 2.41>, 0.0))"},"beats":[{"start":539.0931875,"say":"Şimdiye kadar konuştuğumuz testlerin çoğu tek bir koşuya güvenmez. Gürültü rastgeledir, tek bir şanslı ya da şanssız koşu bizi yanıltabilir. Çözüm Monte Carlo benzetimidir.","live":[],"does":[[539.0931875,"heading is shown on the screen, written out."]]},{"start":550.7406875,"say":"Her koşuda başlangıç durumunu, süreç gürültüsünü ve ölçüm gürültüsünü bağımsız olarak yeniden çekeriz. Senaryo aynı, rastgelelik farklı. Sonra RMSE, ANEES ve NIS gibi metrikleri tüm koşular üzerinden ortalarız.","live":["heading"],"does":[[551.5331875,"mc_f is shown on the screen, written out."]]},{"start":565.6956875,"say":"Peki kaç koşu yeterli? Koşu sayısı arttıkça ANEES kabul bandı daralır. On koşuda bant sıfır virgül doksan altı ile üç virgül kırk iki arasında, oldukça geniş.","live":["mc_f","heading"],"does":[[565.6956875,"line is shown on the screen, written out."],[566.6931875,"runs is shown on the screen, written out."],[571.0131875,"runs is shown on the screen, written out."],[571.7331875,"seg is shown on the screen, written out."],[571.7331875,"p_lo is shown on the screen, written out."],[571.7331875,"p_hi is shown on the screen, written out."]]},{"start":577.1481875,"say":"Elli koşuda bir virgül kırk sekiz ile iki virgül elli dokuz arasına iner. Yüz koşuda ise bir virgül altmış üç ile iki virgül kırk bir arası.","live":["mc_f","line","heading","seg","p_lo","p_hi"],"does":[[577.2931875,"seg is redrawn as the numbers it depends on change."],[577.2931875,"p_lo is redrawn as the numbers it depends on change."],[577.2931875,"p_hi is redrawn as the numbers it depends on change."],[577.2931875,"runs is shown on the screen, written out."],[577.2931875,"r1 ticks to 1.48."],[577.2931875,"r2 ticks to 2.59."],[581.7331875,"seg is redrawn as the numbers it depends on change."],[581.7331875,"p_lo is redrawn as the numbers it depends on change."],[581.7331875,"p_hi is redrawn as the numbers it depends on change."],[581.7331875,"runs is shown on the screen, written out."],[581.7331875,"r1 ticks to 1.63."],[581.7331875,"r2 ticks to 2.41."]]},{"start":586.3256875,"say":"Bant, beklenen değer olan ikinin çevresinde sıkışıyor. Daha çok koşu, daha keskin bir test demektir ve küçük tutarsızlıklar da yakalanır. Pratikte elli ile yüz koşu iyi bir başlangıçtır.","live":null,"does":[[587.0931875,"expected is shown on the screen, written out."]]},{"start":598.6956875,"say":"Bir uyarı daha: tek senaryo yetmez. Farklı manevralar, başlangıç hataları ve gürültü seviyeleriyle de deneriz. Rastgele tohumları da kaydederiz ki her sonuç birebir tekrarlanabilsin.","live":["mc_f","line","heading","seg","p_lo","p_hi","expected"],"does":[[606.3331875,"mc_f is indicated — a transient flash."],[610.3137916666667,"heading is hidden from the screen — left the board."],[610.3137916666667,"line is hidden from the screen — left the board."],[610.3137916666667,"seg is hidden from the screen — line left the board."],[610.3137916666667,"p_lo is hidden from the screen — line left the board."],[610.3137916666667,"p_hi is hidden from the screen — line left the board."],[610.3137916666667,"expected is hidden from the screen — line left the board."],[610.3137916666667,"mc_f is hidden from the screen — left the board."],[610.3137916666667,"runs is hidden from the screen — left the board."]]}]},{"title":"Zamanlama, Replay ve Teşhis","start":611.3554583333333,"end":757.5614166666667,"objects":{"a_pt":"a Point [red] labelled \"t_a\" drawn in timeline (location=(5.6, 0.0))","budget_f":"a Math [text] that says \"$t_(upright(\"hesap\")) + t_(upright(\"gecikme\")) < T_s$\"","deadline":"a Line [red] drawn in timing (start=(0.0, 10.0), end=(100.0, 10.0), dashed=True)","delay":"a Brace [red] labelled \"upright(\"gecikme\")\" drawn in timeline (x_start=3.4, x_end=5.6)","diag":"a Table [text] that says \"Belirti İlk bakılacak yer ANEES, NIS üst sınırın üstünde Q veya R çok küçük, eksik model ANEES, NIS alt sınırın altında Q, R veya $P_0$ çok büyük İnovasyonlar renkli Eksik dinamik, Q yapısı KS testi başarısız Aykırı değer, Gauss dışı gürül…\" (rows=(('Belirti', 'İlk bakılacak yer'), ('ANEES, NIS üst sınırın üst…, header=True)","exec_curve":"a FunctionPlot [blue] drawn in timing (function=<function>, x_range=(0.0, 100.0))","head_diag":"a Heading that says \"Testler Başarısız Olunca\"","head_oosm":"a Heading that says \"Zamanlama: Sırası Bozuk Ölçümler\"","head_rt":"a Heading that says \"Replay ve Gerçek Zaman\"","k_pt":"a Point [yellow] labelled \"t_k\" drawn in timeline (location=(5.0, 0.0))","late":"a CurvedArrow [red] drawn in timeline (start=(3.4, 0.0), end=(5.6, 0.0))","m_pt":"a Point [red] labelled \"t_m\" drawn in timeline (location=(3.4, 0.0))","oosm_list":"a Block [text] that says \"Atmak: basit ama bilgi kaybı Yeniden işlemek: geri sar, tekrar oynat Geriye kestirim: doğrudan bugüne kat\"","point":"a Point [yellow] drawn in timing (location=(70.0, 11.662543472984721))","rt_list":"a Block [text] that says \"Replay: aynı kayıt, aynı sonuç Gerçek zaman: en kötü durum süresi Zaman damgası: ölçüm anı, varış anı değil\"","timeline":"a NumberLine labelled \"t\" (x_range=(0.0, 8.0), include_numbers=True)","timing":"an Axes (x_range=(0.0, 100.0), y_range=(0.0, 14.0), x_ticks_every=20.0)"},"beats":[{"start":611.3554583333333,"say":"Son boyut zamanlama. Gerçek sistemlerde ölçümler her zaman sırayla gelmez. Bir radar ölçümü üç virgül dördüncü saniyede alınmış, ama ağ gecikmesi yüzünden ancak beş virgül altıda gelmiş olabilir.","live":[],"does":[[611.3554583333333,"head_oosm is shown on the screen, written out."],[611.3554583333333,"timeline is shown on the screen, written out."],[619.4354583333334,"m_pt is shown on the screen, written out."],[620.7954583333334,"late is shown on the screen, written out."],[623.1954583333334,"a_pt is shown on the screen, written out."]]},{"start":624.8154583333334,"say":"Bu arada filtre çoktan beşinci saniyeye ilerlemiştir. Buna sırası bozuk ölçüm, kısaca OOSM denir.","live":["timeline","head_oosm","m_pt","late","a_pt"],"does":[[625.6354583333333,"k_pt is shown on the screen, written out."],[630.9154583333334,"delay is shown on the screen, written out."]]},{"start":633.0129583333334,"say":"Üç yol var. En basit yol, ölçümü atmaktır, ama bilgi kaybederiz.","live":["timeline","head_oosm","m_pt","late","a_pt","k_pt","delay"],"does":[[633.0129583333334,"oosm_list is shown on the screen, written out."],[635.5954583333333,"oosm_list (the \"Atmak\" part) is emphasized."]]},{"start":638.4204583333333,"say":"İkinci yol, geçmiş durumları bir tamponda saklamak, ölçüm anına geri sarmak ve sonrasını yeniden işlemektir. Doğrudur ama hesap yükü getirir.","live":["oosm_list","timeline","head_oosm","m_pt","late","a_pt","k_pt","delay"],"does":[[638.5954583333333,"oosm_list (the \"Atmak\" part) is no longer emphasized."],[638.5954583333333,"oosm_list (the \"Yeniden işlemek\" part) is emphasized."]]},{"start":648.0379583333333,"say":"Üçüncü yol, gecikmiş ölçümü geriye doğru bir kestirimle doğrudan bugünkü duruma katmaktır. Daha ucuzdur ama dikkatli bir türetme ister.","live":null,"does":[[648.2354583333333,"oosm_list (the \"Geriye kestirim\" part) is emphasized."],[648.2354583333333,"oosm_list (the \"Yeniden işlemek\" part) is no longer emphasized."],[656.4454583333334,"oosm_list (the \"Geriye kestirim\" part) is no longer emphasized."]]},{"start":657.0454583333333,"say":"Nasıl test ederiz? Kaydedilmiş veriyi, gecikmeleri yapay olarak karıştırıp tekrar oynatırız ve sonucu sıralı işlenmiş referansla karşılaştırırız. NEES ve NIS burada da tutmalı.","live":null,"does":[[661.1554583333333,"late is indicated — a transient flash."],[668.2029583333333,"head_oosm is hidden from the screen — left the board."],[668.2029583333333,"oosm_list is hidden from the screen — left the board."],[668.2029583333333,"timeline is hidden from the screen — left the board."],[668.2029583333333,"m_pt is hidden from the screen — timeline left the board."],[668.2029583333333,"late is hidden from the screen — timeline left the board."],[668.2029583333333,"a_pt is hidden from the screen — timeline left the board."],[668.2029583333333,"k_pt is hidden from the screen — timeline left the board."],[668.2029583333333,"delay is hidden from the screen — timeline left the board."]]},{"start":669.4029583333333,"say":"Bir de kayıttan tekrar oynatma testi var. Aynı kayıt aynı filtreye verildiğinde her seferinde birebir aynı sonucu almalıyız. Almıyorsak kodda bir zamanlama ya da başlatma hatası vardır.","live":[],"does":[[669.4029583333333,"head_rt is shown on the screen, written out."],[670.5154583333333,"rt_list is shown on the screen, written out."],[675.2354583333333,"rt_list (the \"aynı sonuç\" part) is emphasized."]]},{"start":681.6179583333334,"say":"Son olarak gerçek zaman. Her döngüde hesap süresi ile gecikmenin toplamı, örnekleme periyodundan küçük olmalı. Mavi eğri döngü başına hesap süresi, kırmızı çizgi on milisaniyelik sınır.","live":["rt_list","head_rt"],"does":[[681.6179583333334,"timing is shown on the screen, written out."],[685.8754583333333,"budget_f is shown on the screen, written out."],[688.7154583333333,"exec_curve is shown on the screen, written out."],[691.2754583333333,"deadline is shown on the screen, written out."]]},{"start":694.3529583333334,"say":"Ortalama süre sınırın rahatça altında. Ama yetmişinci döngü civarında bir sıçrama sınırı aşıyor. Gerçek zamanda önemli olan ortalama değil, en kötü durumdur.","live":["rt_list","budget_f","timing","head_rt","exec_curve","deadline"],"does":[[698.8354583333333,"point is shown on the screen, grown."],[701.0262315967672,"point is hidden from the screen."],[703.0354583333334,"rt_list (the \"aynı sonuç\" part) is no longer emphasized."],[703.0354583333334,"rt_list (the \"en kötü durum\" part) is emphasized."]]},{"start":704.5704583333334,"say":"Bir de her ölçümü varış anına göre değil, gerçek ölçüm anına göre işleyin. Zaman damgası hatası, tutarlılık testlerini sessizce bozar.","live":null,"does":[[709.7554583333333,"rt_list (the \"en kötü durum\" part) is no longer emphasized."],[709.7554583333333,"rt_list (the \"ölçüm anı\" part) is emphasized."],[713.3029583333333,"budget_f is hidden from the screen — left the board."],[713.3029583333333,"head_rt is hidden from the screen — left the board."],[713.3029583333333,"rt_list is hidden from the screen — left the board."],[713.3029583333333,"timing is hidden from the screen — left the board."],[713.3029583333333,"exec_curve is hidden from the screen — timing left the board."],[713.3029583333333,"deadline is hidden from the screen — timing left the board."],[713.3029583333333,"rt_list (the \"ölçüm anı\" part) is no longer emphasized."]]},{"start":714.5029583333334,"say":"Toparlayalım. Bir test başarısız olduğunda nereye bakacağımızı bu tablo özetliyor.","live":[],"does":[[714.5029583333334,"head_diag is shown on the screen, written out."],[718.6754583333334,"diag is shown on the screen, written out."]]},{"start":720.2879583333333,"say":"ANEES ya da NIS üst sınırı aşıyorsa filtre aşırı güvenlidir: Q ya da R çok küçük, ya da model eksik. Alt sınırın altındaysa tersi, kovaryanslar şişkin.","live":["head_diag"],"does":[[720.5154583333333,"diag is shown on the screen, written out."],[727.7154583333333,"diag is shown on the screen, written out."]]},{"start":731.7404583333333,"say":"İnovasyonlar renkliyse modelde eksik bir dinamik aranır. KS testi başarısızsa aykırı değerlere ve Gauss dışı gürültüye bakılır.","live":null,"does":[[731.9154583333334,"diag is shown on the screen, written out."],[735.5954583333333,"diag is shown on the screen, written out."]]},{"start":740.9204583333333,"say":"Replay ile gerçek zamanlı sonuçlar ayrışıyorsa zaman damgalarına ve geciken ölçümlere bakılır.","live":null,"does":[[741.1554583333334,"diag is shown on the screen, written out."]]},{"start":747.3204583333334,"say":"Bu testlerin hepsinden geçen bir filtre artık yalnızca çalışan değil, kendi belirsizliğini doğru bilen bir filtredir. Dersin amacı da tam olarak buydu.","live":null,"does":[[748.1554583333334,"diag (the \"column=2\" part) is emphasized."],[754.2754583333333,"diag (the \"column=2\" part) is no longer emphasized."],[756.5197499999999,"diag is hidden from the screen — left the board."],[756.5197499999999,"head_diag is hidden from the screen — left the board."]]}]}]},"durationSeconds":758,"chapters":[{"title":"Neden Test Ederiz? Doğruluk ve RMSE","startSeconds":0,"narration":"Bir Kalman filtresi yazdınız, kod çalışıyor ve kestirimler makul görünüyor. Peki filtrenin gerçekten doğru çalıştığını nasıl bilirsiniz? Bu derste bunun için kullandığımız testleri tek tek kuracağız. Filtreyi altı ayrı soruyla sorgulayacağız. Birincisi doğruluk: hata ne kadar büyük? Bunu RMSE ile ölçeriz. İkincisi kovaryans tutarlılığı: filtre kendi belirsizliğini doğru biliyor mu? NEES ve ANEES bunu ölçer. Üçüncüsü ölçüm tutarlılığı, yani NIS. Dördüncüsü inovasyonların beyaz ve Gauss dağılımlı olup olmadığı. Beşincisi Monte Carlo ile istatistiksel dayanıklılık. Altıncısı da zamanlama: geç gelen ölçümler, kayıttan tekrar oynatma ve gerçek zaman. Bu altı sorunun ortak bir fikri var. Filtre her adımda bize iki şey verir: bir kestirim ve bu kestirime ne kadar güvendiğini söyleyen bir kovaryans. Testler, bu ikisinin gerçekle uyuşup uyuşmadığına bakar. Önce doğruluk. Gerçek durumu bildiğimiz bir benzetimde her an kestirim hatasını hesaplayabiliriz: gerçek durumdan kestirimi çıkarırız. Bu mavi eğri, tek bir koşudaki hatanın zamanla değişimi. Bazen pozitif, bazen negatif, ortalaması sıfıra yakın. Bu yüzden hatayı doğrudan ortalamak bize büyüklüğü söylemez. Çözüm, önce karesini almak. Sarı eğri hatanın karesi, artık her şey pozitif. Sonra bu kareleri ortalarız ve karekök alarak birimi geri getiririz. Formüldeki N, Monte Carlo koşu sayısı. Her koşunun hata karesi toplanır, koşu sayısına bölünür ve karekökü alınır. Bu örnekte sonuç yaklaşık sıfır virgül yetmiş üç metre. Yeşil çizgiler bu seviyeyi gösteriyor: hata tipik olarak bu bandın içinde dolaşır. Ama dikkat. RMSE yalnızca hatanın ne kadar büyük olduğunu söyler. Filtrenin bu hatayı önceden bilip bilmediğini söylemez. Bunun için kovaryansa bakmamız gerekiyor."},{"title":"Kovaryans Tutarlılığı: NEES ve ANEES","startSeconds":121.0010625,"narration":"Kalman filtresi yalnızca bir kestirim üretmez, bu kestirimin ne kadar belirsiz olduğunu da söyler: kovaryans matrisi P. Sarı kesikli çizgiler, filtrenin kendi iddiası olan artı eksi iki sigma bandı. Tutarlı bir filtrede gerçek hata bu bandın içinde kalır, yalnızca arada bir dışarı taşar. Burada durum tam olarak böyle. Şimdi filtrenin kendine fazla güvendiğini düşünün. Kovaryans gerçekte olduğundan küçük. Bant daralıyor ve hata sürekli dışarı taşıyor. Buna aşırı güvenli filtre diyoruz. Tersi de olabilir. Kovaryans gereğinden büyükse bant genişler ve hata kenarlara hiç yaklaşmaz. Bu da fazla temkinli bir filtre. İkisi de kötü. Aşırı güvenli filtre yeni ölçümleri dinlemeyi bırakır ve sapar. Fazla temkinli filtre gürültüye gereğinden çok tepki verir. Doğru bant ikisinin arasında. Bunu tek bir sayıya dökelim. Hatayı kovaryansın tersiyle ağırlıklandırırız. Sonuç NEES: normalleştirilmiş kestirim hatası karesi. Kilit nokta, ortadaki P üzeri eksi bir terimi. Hata büyük ama filtre küçük kovaryans iddia ediyorsa NEES büyür. Yani NEES, gerçek hatayı filtrenin iddiasıyla kıyaslar. Filtre tutarlıysa hata sıfır ortalamalı Gauss dağılımlıdır ve kovaryansı gerçekten P olur. O zaman NEES, serbestlik derecesi durum boyutu olan bir ki kare dağılımına uyar. Ki kare dağılımının ortalaması serbestlik derecesine eşittir. Dolayısıyla tutarlı bir filtrede NEES ortalaması durum boyutuna eşit olmalı. İki boyutlu bir durum için bu sayı iki. Tek bir koşudaki NEES çok gürültülüdür, tek başına karar vermeye yetmez. Bu yüzden aynı senaryoyu N kez, farklı rastgele gürültülerle koşarız. Her zaman adımında N tane NEES değerinin ortalamasını alırız. Buna ortalama NEES, kısaca ANEES denir. Mavi eğri, elli koşuluk bir deneyin ANEES değeri. Peki ne kadar sapma kabul edilebilir? N çarpı ANEES, serbestlik derecesi N çarpı durum boyutu olan bir ki kare dağılımına uyar. Bu dağılımın yüzde doksan beşlik aralığını N ile böleriz. Elli koşu ve iki boyutlu durum için sınırlar bir virgül kırk sekiz ve iki virgül elli dokuz. İşte yeşil kesikli çizgiler. Tutarlı bir filtrenin ANEES eğrisi zamanın büyük bölümünde bu bandın içinde kalır. Bizim eğrimiz de tam iki civarında dolaşıyor. Eğri üst sınırın üstüne çıkarsa filtre aşırı güvenlidir, yani kovaryansı küçüktür. İlk şüpheliler çok küçük seçilmiş bir süreç gürültüsü Q ya da modelde eksik bir dinamiktir. Eğri alt sınırın altına inerse filtre fazla temkinlidir. Q ya da başlangıç kovaryansı gereğinden büyük seçilmiş olabilir. Ayarlar düzeltildiğinde eğri banda geri döner. Dikkat: bu test gerçek durumu bilmeyi gerektirir, yani yalnızca benzetimde yapılabilir."},{"title":"Ölçüm Tutarlılığı: NIS","startSeconds":300.30333333333334,"narration":"NEES testinin bir zayıflığı var: gerçek durumu bilmemiz gerekiyor. Sahadaki gerçek bir araçta bu bilgi yoktur, elimizde yalnızca ölçümler vardır. Filtre her adımda gelecek ölçümü tahmin eder. Gelen ölçüm ile bu tahmin arasındaki farka inovasyon denir. Filtre bu farkın büyüklüğünü de öngörür: inovasyon kovaryansı S. Durum belirsizliğinin ölçüm uzayına taşınmış hali, artı ölçüm gürültüsü R. İnovasyonu S matrisinin tersiyle ağırlıklandırırsak NIS elde ederiz: normalleştirilmiş inovasyon karesi. Yapı NEES ile aynı, ama gerçek değere hiç ihtiyaç yok. Tutarlı bir filtrede NIS, serbestlik derecesi ölçüm boyutu olan bir ki kare dağılımına uyar. Sağdaki mavi eğri, iki boyutlu bir ölçüm için bu dağılımdır. Hipotez testini kuralım. Sıfır hipotezi, filtrenin tutarlı olduğudur. Yeşil alan, yüzde doksan beş güvenlik kabul bölgesidir. Sınırlar sıfır virgül sıfır beş ve yedi virgül otuz sekiz. Bir adımda NIS bir virgül sekiz çıktı diyelim. Kabul bölgesinin içinde, reddetmek için bir neden yok. Peki on virgül beş çıkarsa? Bu, kuyrukta kalan ve çok olası olmayan bir değer. Bir kez olursa tesadüftür, sık sık oluyorsa filtre aşırı güvenlidir. Tipik nedenler, çok küçük seçilmiş bir ölçüm gürültüsü R, yanlış bir ölçüm modeli H ya da aykırı ölçümlerdir. Ters yönde, NIS sürekli sıfıra çok yakınsa filtre ölçümleri olduğundan gürültülü sanıyordur. Bu kez R büyük seçilmiş olabilir. Tek bir adım yerine K adımlık zaman ortalaması çok daha güçlü bir testtir. K çarpı ortalama NIS, K çarpı ölçüm boyutu serbestlikli bir ki kare dağılımına uyar. En güzeli şu: bu test gerçek değer istemediği için sahada, canlı veriyle de çalıştırılabilir."},{"title":"İnovasyon Beyazlığı ve KS Testi","startSeconds":413.52070833333335,"narration":"Tutarlılık testleri büyüklüğe bakar. Optimal bir Kalman filtresinin inovasyonları bir şey daha sağlamalı: zaman içinde birbirinden bağımsız olmalı. Buna beyazlık denir. Mantık şu: inovasyon, ölçümün tahmin edilemeyen kısmıdır. Bugünkü inovasyon yarınkini tahmin etmeye yarıyorsa, filtre eldeki bilgiyi tam kullanmıyor demektir. Bunu otokorelasyonla ölçeriz. İnovasyon dizisini, l adım kaydırılmış haliyle çarpar, toplar ve normalleştiririz. Beyaz bir dizide sıfırdan farklı her gecikmede bu değer küçüktür. Mavi çubuklar sıfır çevresinde rastgele dağılıyor. Ne kadar küçük? K örnekte yüzde doksan beş sınırı, bir virgül doksan altı bölü kök K. Yüz örnekte yaklaşık sıfır virgül iki. Yeşil kesikli çizgiler bu sınır. Şimdi modelde eksik bir dinamik olduğunu düşünün, örneğin ivmeyi modellemedik. İnovasyonlar renklenir: ilk gecikmeler sınırın çok üstüne çıkar ve yavaşça söner. Bu görüntü, modelin bir şeyi kaçırdığını gösterir. Çare, model yapısını gözden geçirmek ya da süreç gürültüsünü doğru yapıda kurmaktır. Beyazlık bağımsızlığı sınar. Bir de dağılımın şekline bakarız: inovasyonlar gerçekten Gauss mu? Her inovasyonu kendi standart sapmasına böleriz, tutarlı filtrede sonuç standart normal dağılır. Sarı eğri standart normalin birikimli dağılım fonksiyonu. Mavi merdiven ise on iki normalleştirilmiş inovasyonun deneysel birikimli dağılımı. Kolmogorov Smirnov testi, bu iki eğri arasındaki en büyük dikey uzaklığa bakar. Bu uzaklığa D istatistiği denir. Burada D yaklaşık sıfır virgül sıfır dokuz. On iki örnek için yüzde doksan beşlik kritik değer sıfır virgül otuz dokuz. D bunun çok altında, normallik reddedilmez. Test başarısız olursa genellikle kalın kuyruklu gürültü ya da aykırı ölçümler vardır. O zaman ölçüm kapısı ya da sağlam bir gürültü modeli düşünülür. Unutmayın, NIS ortalaması tutsa bile dağılımın şekli yanlış olabilir."},{"title":"İstatistiksel Dayanıklılık: Monte Carlo","startSeconds":539.0931875,"narration":"Şimdiye kadar konuştuğumuz testlerin çoğu tek bir koşuya güvenmez. Gürültü rastgeledir, tek bir şanslı ya da şanssız koşu bizi yanıltabilir. Çözüm Monte Carlo benzetimidir. Her koşuda başlangıç durumunu, süreç gürültüsünü ve ölçüm gürültüsünü bağımsız olarak yeniden çekeriz. Senaryo aynı, rastgelelik farklı. Sonra RMSE, ANEES ve NIS gibi metrikleri tüm koşular üzerinden ortalarız. Peki kaç koşu yeterli? Koşu sayısı arttıkça ANEES kabul bandı daralır. On koşuda bant sıfır virgül doksan altı ile üç virgül kırk iki arasında, oldukça geniş. Elli koşuda bir virgül kırk sekiz ile iki virgül elli dokuz arasına iner. Yüz koşuda ise bir virgül altmış üç ile iki virgül kırk bir arası. Bant, beklenen değer olan ikinin çevresinde sıkışıyor. Daha çok koşu, daha keskin bir test demektir ve küçük tutarsızlıklar da yakalanır. Pratikte elli ile yüz koşu iyi bir başlangıçtır. Bir uyarı daha: tek senaryo yetmez. Farklı manevralar, başlangıç hataları ve gürültü seviyeleriyle de deneriz. Rastgele tohumları da kaydederiz ki her sonuç birebir tekrarlanabilsin."},{"title":"Zamanlama, Replay ve Teşhis","startSeconds":611.3554583333333,"narration":"Son boyut zamanlama. Gerçek sistemlerde ölçümler her zaman sırayla gelmez. Bir radar ölçümü üç virgül dördüncü saniyede alınmış, ama ağ gecikmesi yüzünden ancak beş virgül altıda gelmiş olabilir. Bu arada filtre çoktan beşinci saniyeye ilerlemiştir. Buna sırası bozuk ölçüm, kısaca OOSM denir. Üç yol var. En basit yol, ölçümü atmaktır, ama bilgi kaybederiz. İkinci yol, geçmiş durumları bir tamponda saklamak, ölçüm anına geri sarmak ve sonrasını yeniden işlemektir. Doğrudur ama hesap yükü getirir. Üçüncü yol, gecikmiş ölçümü geriye doğru bir kestirimle doğrudan bugünkü duruma katmaktır. Daha ucuzdur ama dikkatli bir türetme ister. Nasıl test ederiz? Kaydedilmiş veriyi, gecikmeleri yapay olarak karıştırıp tekrar oynatırız ve sonucu sıralı işlenmiş referansla karşılaştırırız. NEES ve NIS burada da tutmalı. Bir de kayıttan tekrar oynatma testi var. Aynı kayıt aynı filtreye verildiğinde her seferinde birebir aynı sonucu almalıyız. Almıyorsak kodda bir zamanlama ya da başlatma hatası vardır. Son olarak gerçek zaman. Her döngüde hesap süresi ile gecikmenin toplamı, örnekleme periyodundan küçük olmalı. Mavi eğri döngü başına hesap süresi, kırmızı çizgi on milisaniyelik sınır. Ortalama süre sınırın rahatça altında. Ama yetmişinci döngü civarında bir sıçrama sınırı aşıyor. Gerçek zamanda önemli olan ortalama değil, en kötü durumdur. Bir de her ölçümü varış anına göre değil, gerçek ölçüm anına göre işleyin. Zaman damgası hatası, tutarlılık testlerini sessizce bozar. Toparlayalım. Bir test başarısız olduğunda nereye bakacağımızı bu tablo özetliyor. ANEES ya da NIS üst sınırı aşıyorsa filtre aşırı güvenlidir: Q ya da R çok küçük, ya da model eksik. Alt sınırın altındaysa tersi, kovaryanslar şişkin. İnovasyonlar renkliyse modelde eksik bir dinamik aranır. KS testi başarısızsa aykırı değerlere ve Gauss dışı gürültüye bakılır. Replay ile gerçek zamanlı sonuçlar ayrışıyorsa zaman damgalarına ve geciken ölçümlere bakılır. Bu testlerin hepsinden geçen bir filtre artık yalnızca çalışan değil, kendi belirsizliğini doğru bilen bir filtredir. Dersin amacı da tam olarak buydu."}]}}
