Dr. GÜRAY SONUGÜR

Dr. Öğr. Üyesi Güray SONUGÜR – Öğrenci Bilgi Paylaşım Platformu

VTIY – Kalman Filtresi Uygulaması

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Hazırlayan: Ahmet Yasin CİVAN
% Tarih : 03.03.2017
% Yer : Afyon Karahisar / Uydukent
% http://ahmetyasincivan.com/kalman-filtresi-matlab-uygulama-kodlari/
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Gerçek zamanlı veriler için düzenleyen: Güray SONUGÜR
% Bu program dış ortamdan alınan verileri Kalman Filtrasinden geçirerek
% verilere güvenilemediği durumlarda tahminler yapmaktadır.
% Tarih : 09.05.2017
% Yer : AKÜ TEKNOLOJİ FAKÜLTESİ
% http://guraysonugur.aku.edu.tr
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clear
clc
close all;

%Başlangıç değerleri:
hata_kovaryansi = 1;
kalman_katsayisi = 0.1;
onceki_kalman = 0;

figure

%%

%COM5 de kurulu olan mega2560 arduino sınıfını “a” değişkenine atadık.
a=arduino(‘COM5′,’Mega2560’);

%Formülasyon:
%http://www.ibrahimcayiroglu.com/Dokumanlar/Makale_BilgiPaylasim/(1-2012)-%Kalman_Filtresi_Ve_Bir_Programlama_Ornegi-Ibrahim_CAYIROGLU.pdf alımıştır.
%K(k): Kalman kazancının o andaki değeri
%K(k-1): Kalman kazancının bir önceki değeri
%P(k): Hata kovaryansının o andaki değeri
%P(k-1): Hata kovaryansının bir önceki değeri
%R: Kalman katsayısı
%X(k)=Sinyalin o andaki hesaplanan değeri , Kalman tarafından tahmin edilen
%değer.
%X(k-1): Sinyalin bir önceki hesaplanmış değeri
%Z(k): Sinyalin o andaki ölçülen değeri (-ki biz doğruluğundan emin değiliz!)

for i = 1:800
olculen_veri(i)=readVoltage(a,’A1′); % A1 ldr sensörü, A0 potansiyometre

%Kalman kazancının yeni değeri bulunuyor.
%K(k)=P(k-1)/(P(k-1)+ R) R: Kalman katsayısı
kalman_kazanci = hata_kovaryansi/(hata_kovaryansi+ kalman_katsayisi);

%Yeni kalman çıkış değeri hesaplanıyor.
%X(k)=X(k-1) + (K(k)*(Z(k)-X(k-1)))
kalman_tahmin = onceki_kalman + (kalman_kazanci*(olculen_veri(i)-onceki_kalman));

% hata kovaryansının yeni değeri bulunuyor.
% P(k)=(1-K(k))*P(k-1)
hata_kovaryansi = (1-kalman_kazanci)*hata_kovaryansi;

%X(k-1) burada oluşturuluyor.
%X(k-1): onceki_kalman, X(k): kalman_tahmin
onceki_kalman = kalman_tahmin;

%X(k) değeri kalman_tahmin_sakla dizisine kayıt ediliyor.
kalman_tahmin_sakla(i) = kalman_tahmin;

plot(olculen_veri);
hold on
plot(kalman_tahmin_sakla,’r’);
drawnow
end
hold off;