Statistical, Arduino ve diğer gömülü sistemlerde sensör verisini işlerken ihtiyaç duyulan temel ve gelişmiş istatistiksel analiz fonksiyonlarını tek bir çatı altında toplayan hafif bir kütüphanedir. Sensör gürültüsünü azaltmak, ani sıçramaları (spike) bastırmak, dağılımı analiz etmek ve zaman içinde verinin eğilimini incelemek için optimize edilmiştir.
Başlangıçta medyan / mod tabanlı filtreleme için geliştirilmiş olsa da bugün hem sabit boyutlu diziler (array) hem de akış (stream) tabanlı veriler üzerinde çalışan kapsamlı bir istatistik seti sunar.
Amaç, sahadan gelen ham veriyi daha anlamlı ve kontrol edilebilir hale getirerek sensör tabanlı sistemlerde doğruluk ve kararlılığı artırmaktır.
Dizi (Array) İstatistikleri
Sabit boyutlu float dizileri üzerinde:
- Average, Sum, Max, Min, Sq_Sum
- Arithmetic / Geometric / RMS / Extended RMS Average
- Sigma, Quartile, IQR
- Standard Deviation & Standard Deviation Error
- Variance
- Bubble Sort tabanlı sıralama
Bu sayede örneğin bir sensörün son N ölçümünden:
- Gürültüden arındırılmış medyan değeri
- Anlık min–max aralığı
- Standart sapma ve varyans bilgisini
tek seferde alabilecek bir yapı kurabiliyorsun.
Akış (Stream) İstatistikleri
Uzun süre çalışan sistemlerde veriyi dizilerde tutmak yerine stream tabanlı takip etmek gerektiğinde:
- Toplam veri adedi (count)
- Akışın aritmetik ortalaması
Bu yöntem, RAM’in sınırlı olduğu mikrodenetleyicilerde uzun süreli ölçümlerde büyük avantaj sağlar. Her yeni ölçüm geldiğinde ortalama, minimum, maksimum gibi metrikler anında güncellenir ve tüm veriyi hafızada tutmaya gerek kalmaz.
Lineer Regresyon (Array & Stream)
Hem sabit boyutlu diziler hem de akış verisi için:
- Slope (eğim)
- Offset (kesişim)
- R² (determinasyon katsayısı)
hesaplayarak, sensör verisinin zaman içindeki trendini takip etmeye izin veriyor.
Bu analiz özellikle şu durumlarda kritik önem taşır:
- Sensör kalibrasyonu ve doğruluk kontrolü
- Zaman içinde oluşan drift/kayma tespiti
- Yavaş değişen süreçlerin trend analizleri
Eğim Tabanlı Anomali Algılama
Kütüphanede, son n adet ölçümün eğimini hesaplayarak:
- Sensör verisinin yükseliş / düşüş trendini
- Ani değişimlerin normal mi, anomali mi olduğuna dair basit bir fikir veren
slope tabanlı bir yapı da var.
Bu temel yapı, daha üst seviye anomaly detection ve karar mekanizmalarına altlık oluşturmak için kullanılabilir.
Ne Zaman Kullanmalısın?
Statistical tam olarak şu senaryolarda işine yarıyor:
- ADC üzerinden aldığın sensör değeri gürültülü ve arada saçma spike’lar atıyorsa
- Uzun süreli ölçümlerde ortalama, min, max, standart sapma gibi metrikleri hafızayı doldurmadan takip etmek istiyorsan
- Elindeki ham sensör verisinin trendini, eğimini, R² değerini görmek istiyorsan
- Daha sonra ML/edge tarafında kullanacağın basit özellikleri (features) mikrodenetleyici tarafında çıkarmak istiyorsan
Kısacası: ham veriyi olduğu gibi göndermek yerine, sahada işleyip anlamlı hale getirmek istediğin her projede Statistical kullanabilirsin.
Kurulum
Arduino IDE
- Arduino IDE’de Library Manager’ı aç.
- Arama kutusuna “Statistical” yaz.
Statistical(Author: Günce Akkoyun) kütüphanesini seç ve Install de.
Alternatif olarak:
- GitHub’daki Releases bölümünden
.zipindirip - Sketch → Include Library → Add .ZIP Library… ile manuel ekleyebilirsin.
PlatformIO
platformio.ini dosyanda ilgili ortam (env) içine şu şekilde ekleyebilirsin:
[env:my_board]
platform = ...
board = ...
framework = arduino
lib_deps = akkoyun/Statistical
Versiyon sabitlemek istersen @ ile versiyon ekleyebilirsin (örneğin @^2.1.0 gibi).
Kullanım Senaryoları
Aklında daha net canlanması için birkaç tipik kullanım senaryosu:
- Medyan filtreleme: Akım, gerilim, sıcaklık gibi ölçümlerde spike değerleri bastırmak.
- Sensör verisi normalize etme: Geometrik ortalama veya RMS ortalama ile daha kararlı çıktılar elde etmek.
- Uzun süreli logging: Her veriyi kaydetmek yerine periyodik ortalama/min/max/stddev kaydederek hafıza kullanımını azaltmak.
- Trend analizi: Lineer regresyon ile eğim, offset ve R² hesaplayarak sensör davranışını takip etmek.
Bu kütüphane, gerçek sahada kullanılan projelerden gelen ihtiyaçlara göre sürekli gelişen bir açık kaynak projedir. Kullanıcı geri bildirimleri, yeni fonksiyonların eklenmesi ve mevcut yapının iyileştirilmesi açısından kritik öneme sahiptir.
Bu kütüphaneyi hem kişisel hem de ticari projelerinde özgürce kullanabilirsin. Herhangi bir lisans kısıtı uygulanmamaktadır; amacım, bu kütüphanenin mümkün olduğunca fazla gerçek dünya projesinde yer almasıdır. Özel bir entegrasyon ihtiyacın, ticari bir planın veya teknik bir sorunun varsa bana e‑posta üzerinden her zaman ulaşabilirsin: akkoyun@me.com Geri bildirimlerini veya kullanım senaryolarını paylaşman, projeyi geliştirmem açısından büyük katkı sağlar.