Macademia'nın robotik ve mühendislik programı · ücretsiz seviye tespiti ve kişisel öğrenme yolu

3. ünite / 8

Kalman süzgecine giriş: modele mi ölçüme mi güvenmeli

Tahmin ve güncelleme adımları, Q ve R'nin anlamı, kazancın oturması ve tek boyutta Kalman ile üstel ortalamanın akrabalığı.

Bu ünitenin sonunda

  • Tek boyutlu Kalman süzgecinin tahmin ve güncelleme adımlarını yazmak
  • Q ve R'nin süzgecin davranışını nasıl değiştirdiğini açıklamak
  • Durağan kazancı hesaplamak ve aynı kazançlı üstel ortalamayla karşılaştırmak
  • Kalman'ın ne zaman EMA'dan fazlasını verdiğini söylemek

Ders notları

Bir sensörü okurken iki bilgi kaynağın vardır: model ("sıcaklık on dakikada pek değişmez") ve ölçüm ("DHT22 şu an 24,3 diyor"). İkisi de hatalıdır. Kalman süzgeci her adımda ikisini, belirsizlikleriyle orantılı olarak karıştırır.

Model ve iki gürültü

xk = xk−1 + w, Var(w) = Q    zk = xk + v, Var(v) = R
  • Q (süreç gürültüsü): gerçek değer bir adımda ne kadar değişebilir? Sera yavaş ısınır, Q küçüktür.
  • R (ölçüm gürültüsü): sensöre ne kadar güvenebilirsin? DHT22 için yaklaşık 0,25² = 0,0625 °C².

İki adım

  1. Tahmin: x aynı kalır, belirsizlik büyür: P ← P + Q.
  2. Güncelleme: kazanç K = P / (P + R). Tahmin yeniliğin K katı kadar ölçüme kayar: x ← x + K(z − x). Belirsizlik küçülür: P ← (1 − K)P.

K 0'a yakınsa süzgeç modele güvenir (yumuşak ama geç tepki), 1'e yakınsa ölçüme güvenir (hızlı ama gürültülü). Ölçüm yoksa (NaN) yalnız tahmin adımı yapılır: P büyür, sonraki ölçüme daha çok güvenilir. Bu, eksik veriyi doldurmanın ilkeli bir yoludur.

Kazanç oturur

Q ve R sabitse P birkaç adımda sabit bir değere, K de durağan kazanca oturur:

P∞ = (Q + √(Q² + 4QR)) / 2    K∞ = P∞ / (P∞ + R)

Q = 0,02 ve R = 0,0625 için K∞ ≈ 0,43'tür. Oturduktan sonra Kalman güncellemesi x += K(z − x) tam olarak α = K olan bir üstel ortalamadır. Tek boyutta, sabit gürültüde Kalman'ın sana kattığı şey α'yı tahminle değil, fiziksel olarak anlamlı iki sayıdan (sensör belgesindeki gürültü ve sürecin hızı) türetmektir. Sera verisinde bu süzgeç gerçek sıcaklığa karşı yaklaşık 0,31 °C RMSE verir.

Kalman ne zaman fazlasını verir?

  • Değişken R: sensör bazen daha gürültülüyse (ör. GPS uydu sayısı düştüğünde) K her adımda kendini ayarlar.
  • Eksik ölçüm: P büyüyerek belirsizliği taşır.
  • Çok boyut ve füzyon: konum ve hız birlikte, ya da barometre ile ivmeölçer birlikte. Drone dersindeki füzyon bunun genelleşmesidir.
  • Yenilik izleme: z − x yeniliği beklenen dağılımın dışına çıkarsa model bozulmuştur. 5. günkü ısıtıcı arızasının ilk üç saatinde ortalama yenilik +0,68 °C'dir, bir gün önce aynı saatlerde −0,17 °C: bu, anomali uyarısının tohumudur.

Simülasyon

1B Kalman süzgeci: Q ve R ile oyna

Gürültülü bir ölçüm, bir model ve iki sayı: süreç gürültüsü Q (değer ne kadar hızlı değişebilir) ve ölçüm gürültüsü R (sensöre ne kadar güvenilir). Kazanç K'nın nasıl oturduğunu ve aynı kazançlı üstel ortalamayla farkı gör.

Ölçüm (gri), Kalman kestirimi, gerçek (kesikli)11.715.318.922.526.109.5719.128.738.347.8saat°C
İlk 60 örnekte Kalman kazancı K00.250.50.751011.823.635.447.259K∞
K∞ = 0,426 (aynı değerli EMA α'sı) Gerçeğe göre RMSE: ham 0,490 · Kalman 0,339 · EMA(α = K∞) 0,344 °C
Sensör σ ≈ 0,50 °C → uygun R = σ² ≈ 0,250

Kod

Tek boyutlu Kalman süzgeci (C++ yapı)
// Model: x_k = x_(k-1) + w, Var(w) = q;  ölçüm z_k = x_k + v, Var(v) = r
struct Kalman1D {
  float q, r;          // süreç ve ölçüm gürültüsü (°C²)
  float x = NAN, p = 1.0f, k = 0.0f;

  float update(float z) {
    if (isnan(x)) { x = z; return x; }   // ilk ölçümle başla
    p += q;                              // tahmin: belirsizlik büyür
    if (isnan(z)) { k = 0; return x; }   // ölçüm yoksa yalnız tahmin
    k = p / (p + r);                     // kazanç: modele mi ölçüme mi güven
    x += k * (z - x);                    // güncelle: yeniliğin K katı
    p *= (1.0f - k);
    return x;
  }
};

// DHT22 için: r = 0,25² (belgedeki gürültü), q = 0,02 (sera yavaş ısınır)
Kalman1D kf{0.02f, 0.0625f};
Python: durağan kazanç ve EMA eşdeğerliği
import math

def steady_gain(q, r):
    p = (q + math.sqrt(q * q + 4 * q * r)) / 2   # tahmin öncesi P sonsuzda
    return p / (p + r)

for q in (0.002, 0.02, 0.2):
    K = steady_gain(q, 0.0625)
    print("q=%.3f  K=%.3f  ~ EMA alpha" % (q, K))  # q büyüdükçe K büyür: daha az yumuşatma
Kodu tarayıcıda çalıştırPython · NumPy · matplotlib · Pyodide

Python ve NumPy bu sayfada, tarayıcında çalışır (Pyodide). Kodu değiştirip yeniden çalıştırabilirsin; dersin veri setleri çalışma klasöründe hazır. Kod matplotlib kullanırsa grafikler çıktının altında görünür, yazdığı dosyalar (ör. egitim_gecmisi.csv) indirilebilir.

kalman.pypython

Çıktı

Çıktı burada görünecek.

Kendin dene

1B Kalman simülasyonunda R'yi 0,0625'te tut, Q'yu 0,002'den 0,2'ye çıkar: tahmin eğrisi ve kazanç K nasıl değişiyor? Sonra Q'yu sabit tutup R'yi 10 kat büyüt ve aynı etkiyi ters yönden elde ettiğini göster. Kazancın oturduğu değeri not et ve aynı α ile çizilen üstel ortalamanın Kalman eğrisinin üstüne bindiğini doğrula. Python kodunda K(son) ile formül değerini karşılaştır ve arızanın ilk saatlerindeki ortalama yeniliği normal günle karşılaştır.

Sık yapılan hatalar

  • Q ve R'yi gerçek birimlerle düşünmemek: R sensörün varyansıdır (°C²), standart sapması değil.
  • Kalman'ı aykırı değer temizliğinin yerine koymak: 85 °C'lik sıçrama, K kadar ağırlıkla tahmini bozar; önce aralık ya da Hampel denetimi.
  • Başlangıç P'sini çok küçük seçmek: süzgeç ilk ölçümlere güvenmez ve yavaş yakınsar.
  • Model yanlışken Q'yu küçültmeye devam etmek: süzgeç gerçek değişimi gürültü sanar ve geride kalır.

Yazılım mühendisliği bağlantısı

Kalman süzgeci küçük bir durum makinesidir: durum (x, P), girdi (z) ve iki saf geçiş (tahmin, güncelleme).

  • Parametreleri (Q, R, P0) koda gömme; yapılandırma olarak ver ve neden o değeri seçtiğini yorumla.
  • Özellik testi: sabit girdi verildiğinde tahmin o değere yakınsar; R → ∞ iken K → 0; Q → ∞ iken K → 1.
  • Durağan kazanç formülünü uzun bir döngünün son K değeriyle karşılaştıran bir test, iki kodun da doğru olduğunu kanıtlar.

Kendini sına

  1. R (ölçüm gürültüsü) büyütülürse kazanç K ne olur?

  2. Ölçüm NaN geldiğinde 1B Kalman ne yapar?

  3. Q ve R sabitken, kazanç oturduktan sonra 1B Kalman neye eşdeğerdir?

  4. Isıtıcı arızasının ilk saatlerinde Kalman yeniliği (z − x) nasıl davranır?

Parçalar ve ilgili sayfalar

Esc
  • PanelAna sayfaSayfa
  • ModüllerTüm modüllerSayfa
  • ParçalarParça ansiklopedisiSayfa
  • Mühendislik yoluBüyükler için robotik: 128 parça, 7 seviyeSayfa
  • Robotik dersi (ESOF 323)Üniversite robotik dersi, 14 haftaSayfa
  • Drone dersiBüyükler için: parça, simülasyon, yazılım; 10 üniteSayfa
  • Blok atölyesiSerbest blok programlamaAraç
  • Devre laboratuvarıSanal Arduino ve devreAraç
  • Robot arenasıSanal robot sürüşüAraç
  • OyunlarBloklarla 8 öğretici oyunAraç
  • Mikro Kart atölyesiSanal LED kartı bloklarla programlaAraç
  • Robot atölyesiMikro Kart'ı robota tak, bloklarla görev yapAraç