Professional Documents
Culture Documents
ABSTRACT
Nowadays, it is very important to measure physical quantities in embedded system solutions. Sensors
are used for this purpose, but the data cannot be measured accurately because there is too much noise
due to environmental factors. Hardware and software filters are used to fix this problem. Hardware filters
are not preferred because they increase the system cost. Software filters, on the other hand, put an
additional load on the processor. However, these days using high speeds processor and having low costs,
have shifted the solutions to this area. The Kalman filter is one of the most important software filters
and is an estimation algorithm. It can be used to predict the next data in a system where there is a data
flow in a certain order and at a constant rate, as well as to normalize data differences due to
environmental factors and the environment's unequal conditions at all times. The model created
compares the assumed data with the data obtained as a result of the observation and looks at the
difference between them. In this way, the problems that arise in measurement due to unstable conditions
in real life and the situations that are tried to be estimated with little data can be eliminated. In that
project, using the STM32F407VG microcontroller, data is taken from the DHT2 temperature sensor
each 1ms periods, and the data filtered with the kalman filter are transferred to user interface from the
UART unit. The success of the system realized with the obtained experimental studies has been
demonstrated.
Keywords: Kalman Filter, STM32F407VG Microcontroller, UART
ÖZET
Günümüzde, gömülü sistem çözümlerinde fiziksel büyüklüklerin ölçülebilmesi çok önemlidir. Bu
amaçla sensörler kullanılır, fakat çevresel faktörlerden dolayı çok fazla gürültü olduğu için, veriler doğru
ölçülemez. Bu sorunu gidermek için donanımsal ve yazılımsal filtreler kullanılır. Donanım filtreleri
sistem maliyetini arttırdığı için çok tercih edilmez. Yazılım filtreleri ise, kullanılan işlemciye ek yük
bindirmektedir. Fakat günümüzde kullanılan yüksek hızlı işlemciler ve maliyetlerinin düşük olması,
çözümleri bu alana kaydırmıştır. Kalman filtresi yazılımsal filtrelerin önemlilerinden bir tanesi olup, bir
tahmin algoritmasıdır. Belirli bir düzende ve sabit bir hızda veri akışının olduğu bir sistemde, sonraki
verileri tahmin etmede kullanılacağı gibi, çevresel etmenler ve ortamın her anda eşit koşullara sahip
olmaması nedeniyle oluşan veri farklılıklarını normalize etmek için de kullanılır. Oluşturulan model
varsayılan veri ile gözlem sonucu ortaya çıkan veriyi karşılaştırır ve aralarındaki farka bakar. Bu sayede
gerçek hayatta sabit olmayan koşullar yüzünden ölçmede çıkan sorunlar ve az veri ile tahmin etmeye
çalışılan durumlar ortadan kaldırılabilir. Projede STM32F407VG mikrodenetleyicisi kullanılarak DHT2
sıcaklık sensöründen 1ms’lik periyotlar ile veriler alınarak kalman filtresi ile filtrelenmiş veriler UART
biriminden dış dünyaya aktarılmıştır. Elde edilen deneysel çalışmalar ile gerçekleştirilen sistemin
başarısı ortaya konmuştur.
Anahtar Kelimeler: Kalman Filtre, STM32F407VG Mikrodenetleyici, UART
1. GİRİŞ
Herhangi bir sinyal düşünün. Ses sinyali olabilir, Sensör bilgisi olabilir, radar sinyali olabilir hatta
sayısallaştırılmış resim olabilir. Ayrıca ortamda bir miktar gürültü olacaktır. Bu gürültüden nasıl
kurtulabiliriz. Elimizdeki sinyali içinde gürültü olmadan nasıl kullanabiliriz. Aklımıza ilk gelen
örneklerin ortalamasını almaktır. Bu basit yaklaşım çoğu gerçek problemlerde çalışmayacaktır. Bizim
daha gelişmiş bir yaklaşıma ihtiyacımız vardır. Dijital sinyal işleme bilginleri yıllardır bu problemle
ilgileniyorlar ve çok sayıda teknik geliştirilmiştir. Kalman filtresi bunların en güçlü olanlarından biridir.
2. YÖNTEM VE UYGULAMA
pozisyon tahmini hesaplanmayacak, ancak yeni bir kovaryans da (ortak sapma miktarı) hesaplanacaktır.
Kovaryans aracın hızı ile orantılıdır; Yüksek hızlarda parakete hesabının hassaslığı daha düşük, düşük
hızlarda daha yüksektir. Daha sonra, güncelleme fazında, aracın pozisyonu GPS biriminden alınır. Bu
ölçümle beraber bir miktar belirsizlik daha gelir ve bunun kovaryansının (ortak sapma miktarı) önceki
fazdan gelen tahminin kovaryansına oranı, yeni ölçümün güncellenen tahminini ne kadar etkileyeceğini
belirler. Gerçek pozisyondan uzaklaşıldıkça, bu hesaplama yöntemi, tahminleri gerçek pozisyona doğru
hızlıca ve gürültülü olmayacak şekilde çeker. Kalman filtresi pek çok farklı alanda sistemin durumunu,
değerlerini kestirebilen (tahmin edebilen) bir yöntemdir. Matematiksel olarak doğrusal sistemlerin
(lineer sistemlerin-hareket denklemleri birinci derece olan denklemler) durumlarını tahmin eder.
Pratikte çok faydalı bir filtredir. Ayrıca teorik yönü de güçlüdür. Çünkü mevcut filtreler içinde kestirim
hatasını (tahmini) minimize eden (gittikçe azaltan) tek filtredir. Kalman filtresi doğrusal sistemler için
optimal bir kestiricidir (tahmin edicidir). Ancak gerçek dünyada çok az sayıda doğrusal sistem vardır.
Bu problemin üstesinden gelmenin yaygın bir yaklaşımı, Kalman filtresini kullanmadan önce sistemi
doğrusal hale getirmektir ve bu yaklaşım “Genişletilmiş Kalman Filtresi” olarak bilinir. Bununla
birlikte, doğru sallaştırma kararsız kestirimler (kontrol edilemeyen tahminler) gibi bazı problemlerin
çıkmasına da yol açabilir.
a) Kalman filtresi her ne kadar filtre olarak geçse de bir filtre değil daha çok bir tahmin edicidir.
b) 20 yüzyılda yapılan en önemli buluşlardan biri olduğu söylenebilir.
c) Kalman filtresinin bir diğer özelliği de çalışırken de gelişebilmesidir ki bu filtrenin en güçlü
yanlarından birisidir.
d) Bilgisayar algoritmalarına uygulamaya çok elverişlidir.
e) Tekrarlı bir metottur. Yani bir önceki adımın çıktısı bir sonraki adımda girdi olarak
kullanılabilir.
f) Denklemleri çok karmaşık ve matrisleri çok gizemli olsa da çoğu zaman onları, karmaşık gerçek
bilimsel faaliyetler yapmıyorsanız ihmal edebilir ya da görmezden gelebilirsiniz.
Daha önceden de bahsedildiği gibi Kalman filtresinin tanımları ve denklemlerinin tüm yönleriyle
başlangıçta anlaşılması zordur. Çoğu durumda durum matrisleri atılırsa aşağıdaki denklem elde edilir.
Bununla başlamak daha kolaydır.
Burada alt indis olarak kullanılan k harfi durumları/evreleri gösterir. Biz onu ayrık/kesikli zaman
aralıkları olarak varsayabiliriz. Şöyle ki, k=1 olduğunda 1 ms (mili saniye), k=2 olduğunda ise 2 ms
olarak kabul edilebilir. Bizim amacımız x sinyalinin tahmini olan değerini bulmaktır. Biz her bir k için
bu değeri bulmaya çalışırız. Aynı zamanda burada ölçülen değerdir. Şunu aklımızda bulunmalıyız. Biz
bu ölçülen değerin doğruluğundan kesin olarak emin değiliz. Diğer türlü bütün bunları yapmamıza zaten
gerek kalmazdı. Burada Kalman Kazancı ki en önemli parametredir ve değeri ise sinyalin önceki
durumdaki tahminidir. Bu denklemdeki bilinmeyen tek eleman Kalman kazancıdır. Çünkü biz zaten
ölçülen değere ve öndeki tahmin edilen sinyale sahibiz, bunları biliyoruz. Her bir durum için buradaki
Kalman kazancını hesaplamalıyız. Bu doğal olarak kolay bir iş değildir. Bunu bulmak için tüm araçlara
sahibiz. Örnek olarak Kalman kazancını 0,5 gibi bir değer alalım. O zaman formülümüz basit bir
ortalamayı bulan fonksiyona dönüşecektir. Oysa kalman kazancı bundan daha ileri bir yeteneğe sahiptir.
Her bir adımda bu parametrenin değerini hesaplamalıyız. Böylece kalman filtresinin esas yeteneği
ortaya çıkmış olsun. Bu filtre en optimum ortalama faktörünü her bir adım için bulur ve bir yere kadar
geçmiş durumları da hatırlar.
Sinyalimizin her bir x k değeri birinci denklem kullanılarak bulunur. (doğrusal-rastsal denklem).
Herhangi bir x k değeri, önceki değerinin (x k-1) üzerine kontrol sinyali (u k) ve önceki işlem gürültüsü
(w k-1) eklenerek oluşturulan lineer bir kombinasyonla bulunur. Çoğu zaman kontrol sinyali u k pek
kullanılmaz. İkinci denklem bize şunu söyler. Herhangi bir ölçüm değeri (z k) (ki biz onun
doğruluğundan emin değiliz) sinyalin değeri (x k) ile ölçümün gürültüsünün (v k) lineer bir
kombinasyonundan oluşur (doğrusal olarak birleşiminden yani birinci derece bir denklem olarak, kare
ya da küp kök bir denklem halinde değil). Her ikisi de (w k-1,v k) Gaussian olarak ele alınır (Gaussian
ileride açıklanacak, çan eğrisi şeklinde bir grafiği vardır). İşlem/süreç gürültüsü (w k-1) ve ölçüm
gürültüsü (v k ) istatistiksel olarak birbirinden bağımsızdır. A, B ve H elemanları matrislerin genel
gösterimidir. Çoğu sinyal problemlerimizde bunlar sadece nümerik bir değerdir (bir sayıdır). Ayrıca ek
bir kolaylık olsun diye, çoğu zaman, her bir aşamada bu değerler değişebilmesine rağmen, bu değerleri
sabit varsayabiliriz. Eğer biz sistemimizden oldukça eminsek, (çoğu zaman bu şekilde yapılır), geriye
sadece gürültü fonksiyonlarının (w k-1 ,v k ) aritmetik ortalamasını ve standart sapmasını tahmin etmek
kalır. Şunu biliyoruz ki gerçek dünyada hiçbir sinyal Gaussian değildir. Fakat biz onu bir miktar yaklaşık
alma ile böyle kabul edebiliriz. Bu büyük bir problem değildir. Çünkü biz Kalman Filtresinin doğru
tahminlere doğru yakınsamaya çalıştığını göreceğiz. Hatta Gaussian gürültü parametreleri kötü bir
şekilde tahmin edilmiş olsa bile bu mümküdür.
Şunu unutmamalıyız ki; Gürültü parametreleri için yapmış olduğumuz iyi tahminler, daha iyi tahmin
sonuçları elde etmemizi sağlayacaktır.
Eğer modelinizi Kalman Filtresine uydurmayı başardınız ise, bundan sonraki adım gerekli parametreleri
ve başlangıç değerlerini belirlemektir.
İki ayrı denklem takımız vardır. Zaman güncelleme/Tahmin ve Ölçümü Güncelleme/Düzeltme. Her iki
denklem takımı da k. durumda (her bir zaman diliminde) işleme konulur.
gibi sabit bir değer alabilir. Bu denklemleri (adım 1 dekidenklemleri) karşınıza alıp bunları nasıl
sadeleştirebileceğinizi düşünmenizi tavsiye ederiz.
Adım 2’deki denklemlerde ise en zor belirlenecek katsayılar R ve Q dur. R’yi bulmak daha kolaydır.
Çünkü biz genellikle etraftaki gürültüden çoğunlakla eminizdir. Fakat Q değerini ise ortaya çıkarmak
o kadar kolay değildir. Ve bu aşamada özel bir metod veremiyoruz.
İhtiyacımız olan tüm bilgileri topladıktan sonra işleme başlayabiliriz. Şunu unutmayın, önceki tahminler
mevcut durum için girdi olacaktır. Yani her önceki tahmin bir sonraki hesaplamanın girdisi olacaktır.
Burada önceki tahmindir. Yani ölçümü düzeltme güncellemesi yapılmadan önceki ham tahmindir. Aynı
zamanda da önceki hata Kovaryansıdır (hatanın ortak değişme miktarı). Bu iki değeri bir sonraki aşama
olan Ölçümleri Güncelleme/Düzeltme aşamasında “önceki” değerler olarak kullanıyoruz. Yani bir
sonraki aşamaya girdi olarak veriyoruz.
Ölçüm güncelleme aşamasındaki denklemlerde biz gerçek değerini buluyoruz. Bu değer x’in k anındaki
değeridir. Yani esas bulmak istediğimiz değerdir. Aynı zamanda biz değerini de buluyoruz. Bu iki değeri
bir sonraki gelecek (k+1) aşaması için hesaplıyoruz. Kalman kazancı bir sonraki aşama için gerekli
olduğundan hesaplamıyoruz. Bu değer gizli, gizemli olmakla birlikte, bu denklemlerin en önemli
parçadır. Bu ikinci aşamadaki (ölçüm güncelleme aşaması) değerler “sonraki” değerlerdir.
Her şeyden önce, biz 1 boyutlu bir sinyal problemine sahibiz. Böylece modelimizdeki her bir eleman
sayısal değere sahiptir. Yani matris formatında değildir. Biz hiçbir kontrol sinyaline (u k) sahip değiliz.
Böylece bu değer 0 olur. Sinyalimiz sabit bir değere sahip olduğundan A katsayısı 1 değerini alır. Çünkü
biz bir sonraki gelen değeri biliyoruz. Buda öncekiler gibi aynı değeri alacaktır. Buradaki örnek basittir,
fakat başka linear örneklerde de bu A değerini işlemleri basitleştirmek için 1 olarak alabiliriz. H değeri
1 eşittir. Çünkü biz biliyoruz ki ölçüm, durum değeri (ölçülen esas değer) ile bir miktar gürültünün
birleşiminden ibarettir. Gerçek dünyada H değerinin 1’den farklı olduğu durumlarla nadiren karşılaşılır.
k=0 zamanından başlayalım. Bazı başlangıç durumlarını ya bulmalıyız ya da tahmin etmeliyiz. Burada
biz bazı başlangıç değerlerini atıyoruz.X 0 =0 (başlangıçtaki ölçüm değeri 0) ve P 0 =1 (Başlangıçtaki
hata kovaryansı) değerlerini varsayalım. Burada P 0 =0 değerini niye almadık. Cevabı basittir. Eğer biz
bu şekilde seçseydik, bu durum ortmada hiçbir gürültünün olmadığı anlamına gelirdi. Bu varsayım
sonradan gelecek tüm değerlerinin (tahmin değerlerinin) sıfır olmasına yol açacaktı. Bu nedenle P 0
değerini sıfırdan farklı bir değer seçiyoruz. Bu örnek için Kalman Filtresi Algoritmasında
kullanacağımız Zaman Güncelleme ve Ölçüm Güncelleme denklemlerini yazalım.
Şimdi her bir iterasyon (zaman dilimi) için durum tahmin değerlerini hesaplayalım. Burada ilk iki
iterasyon detaylı bir şekilde verilmiştir. Diğerleri de aynı şekilde hesaplanır. Algoritmanın bilgisayar
programı yazıldığında, Kalman Filtrenin uygulamasının çok daha kolay olduğu görülecektir. Şekil 3. İle
verilen grafik incelendiğinde, Kalman Filtrenin gerçek gerilim değerlerine nasıl yakınsadığı daha iyi
görülecektir. Burada 10 iterasyon gösterilmiştir. Eğer 50 yada daha fazla iterasyonlar yapılmış olsa çok
daha iyi değerler elde edilebilir.
4.Gerçekleştirilen Sistem
DHT22 sıcaklık ve nem algılayıcı kalibre edilmiş dijital sinyal çıkışı veren gelişmiş bir sensor birimidir.
Yüksek güvenilirliktedir ve uzun dönem çalışmalarda dengelidir. 8 bit mikroişlemci içerir, hızlı ve
kaliteli tepki verir.
-40 ile 80°C arasında +/-1°C hata payı ile sıcaklık ölçen birim, 0-100% RH arasında +/-5% RH hata
payı ile nem ölçümü yapabilmektedir.
STM32F4 geliştirme kartı üzerinde 168 MHz’lik, M4 tabanlı ARM Cortex mikro denetleyiciyi
barındırmaktadır. İsterseniz Cortex M4’ten de kısaca bahsedelim. ARM Cortex mikro denetleyici
standart uygulamaların yanında DSP fonksiyonlarına da sahip bir mimari olarak bilinmektedir. Bunun
bir eski sürümü olan Cortex M3’ün çekirdeğinde sadece mikro denetleyici uygulamaları baz alınmıştır.
Fakat yeni nesil M4’ün çekirdeğinde M3’tekiden farklı olarak FPU(Float Point Unit) bulunmaktadır.
Ayrıca FPU dışında sayılabilecek birçok artısıyla M3’e göre çok daha fazla özellik barındırmaktadır.
4.3.USB/TTL Dönüştürücü
PL2303 USB-TTL seri dönüştürücü kablo, USB birimini TTL ara yüzünde kullanmanıza imkân
sağlayan USB-seri dönüştürücü kablodur. TTL ara yüzüne sahip herhangi bir sensor birimini veya
deneme kartını bu kablo aracılığı ile USB portu üzerinden bilgisayarınıza bağlayarak iki birim arasında
haberleşme sağlayabilirsiniz. Lojik voltaj seviyesi ve besleme gerilimi 5V olduğu için birçok sistemle
rahatlıkla kullanılabilir. Kablo bir yüzü standart A tip USB konektörüne sahip olup diğer ucu dişi pin
konektörü şeklindedir.
5. Sonuçlar
Gerçek dünyadan sensörler yardımıyla alınan bilgilerin çok fazla gürültü içermesi kaçınılmazdır. Bu
gürültülerin giderilmesi için günümüzde yaygın olarak Kalman Filtresi kullanılmaktadır. Bu çalışmada
DHT22 sensörü ile okunan sıcaklık bilgilerindeki hataların en aza indirgenmesi için Kalman Filtresi
kullanılmıştır. Sensörden gelen sıcaklık bilgisinin okunması, Kalman Filtresinin gerçeklenmesi ve
sonuçların seri haberleşme ile PC ‘ye gönderilmesi için STM32F4 Discovery Geliştirme kiti
kullanılmıştır. Şekil 5.1 ile elde edilen sonuca bakıldığında, gerçek sonuç verilerinin Kalman filtresi
sayesinde yumuşatıldığı ve gürültülerin başarılı bir şekilde azaltıldığı görülmektedir. Bu sonuçta,
çalışmanın başarısını göstermektedir.
Kaynaklar
[1] Greg Welch, Gary Bishop, "An Introduction to the Kalman Filter", University of North Carolina at
Chapel Hill Department of Computer Science, 2001.
[2] M.S. Grewal, A.P. Andrews, "Kalman Filtering- Theory and Practice Using MATLAB", Wiley,
2001.
[3] Xia, W., Yan, J., & Li, Y. (2021, March). STM32-Based Contactless Temperature Measurement and
Identification Device. In IOP Conference Series: Earth and Environmental Science (Vol. 692, No. 2, p. 022041).
IOP Publishing.
[4] Shen, R., Hu, Z., Yan, L., Hou, D., & Ma, Q. (2022, January). Intelligent Temperature Measurement and
Access Control System. In 2022 14th International Conference on Measuring Technology and Mechatronics
Automation (ICMTMA) (pp. 197-201). IEEE.