Kalman Filtresi Sonucu Sabitleme

Başlatan ugurer, 30 Kasım 2016, 22:43:05

ugurer

Merhaba arkadaşlar. Load cell kullanarak ağırlık ölçümü gerçekleştiriyorum. Filtre araştırırken Kalman Filtresi ile karşılaştım. Çok az örneklemeyle mükemmele yakın bir sonuç elde edebiliyorum fakat gürültüden dolayı çıkan sonuç sürekli olarak değişkenlik gösteriyor. Ölçümde ki hata payım %0.02 bu yüzden çok hassas olması gerekiyor. Kullandığım yöntem kabaca şu
pk[0]=pk[0]+0.0004;//0.0004 matematiksel formüllerde ifade edilen Q değeridir.Tahmini değerdir. Değiştirip etkisini //görebilirsin.
kalmank=(float)((pk[0])/(pk[0]+r));//kalmank kalman katsayısı oluyor
xk[1]=(float)xk[0]+(float)kalmank*(float)((float)ham_deger-(float)xk[0]);//çıktının filtreli hali
pk[1]=(1-kalmank)*pk[0];//bir sonrakinde kullanmak için güncelliyor pk yı
pk[0]=pk[1];
xk[0]=xk[1];
Çıkan sonucun stabil olması için ne yapabilirim? Destekleriniz için şimdiden teşekkür ederim.

Melih1802

Şemayı görmeden yorum zor fakat arada OpAmp ADC yoksa yazılımla işi toparlamak biraz zor. Şema eklersen yardımcı olmak kolaylaşır.

muhittin_kaplan

google -> bilgin esme kalman for dummies

ugurer

ADC olarak hx711 kullanıyorum loadcell'e besleme olarak da 5V kullanıyorum herhangi bir opamp yada yükseltme yok. Şöyle söyleyeyim normalde filtre olarak ortalama almayı kullanıyoruz yani ADC'den 40 tane örnek alıp 40'a bölüyoruz. Bu şekilde yapınca ölçüm sonucunda stabilliği sağlayabiliyoruz fakat sizde tahmin edersiniz ki çok yavaş oluyor bu yöntemle. Kalman filtresi ile yapınca çok hızlı sonuç alıyoruz fakat elde ettiğimiz değer sürekli değişiyor. He yanlış anlamayın 1 kilo 2 kilo değişim olmuyor ama dediğim gibi %0.02'lik bir tolerans değerim var bu yüzden sonucun çok değişken olmaması gerekiyor.

Muhittin_kaplan Bey gönderdiğiniz linki daha önceden de incelemiştim hatta baya bir makale falan da araştırdım elde edilen veriyi sabitlemeyle alakalı bir bilgi bulamadım maalesef.

muhittin_kaplan

yapmak istediğiniz Kalman kullanarak "bir çeşit ortalama" alarak lowpass filtre benzeri birşey yapmak mı ? Yoksa PID türevi bir kontrol algoritması oluşturmak mı ?

Melih1802

Yine şema olmadığından, dirençler %1 hatta daha altında bir toleransa sahip mi. Aymı şekilde kondansatörler ve diğer malzemeler. Kullandığınız kart + otamın nemi. Kartın tasarımı, graund plane, nem için epoksi kaplama, alttan ve üstten faraday kafesi izoleli muhteşem besleme.

Bu saydıklarım son derece profesyonel kartlarda gördüğüm tasarımlardır.  Belki az bile yazdım.

ugurer

@muhittin_kaplan bey aynen PID benzeri olabilir yani oturması gereken bir değer var ve buna ne kadar çabuk oturursa o kadar iyi bizim için. Kalmanda da yapmaya çalıştığımız bu temel olarak ilk 2 3 değerde olması gereken değere oturmalı sonrasında da çok az değişim olması gerekiyor. Şöyle bir örnek ölçüm gönderiyim daha iyi ifade edebilmek için
olt  50.008   -   50.005 
olt  50.006   -   49.987 
olt  50.006   -   49.994 
olt  50.006   -   50.014 
olt  50.004   -   50.000 
olt  50.004   -   50.000 
olt  50.006   -   50.029 
olt  50.008   -   50.011 
olt  50.008   -   49.994 
olt  50.008   -   49.996 
olt  50.008   -   49.992 
olt  50.006   -   49.964 
olt  50.004   -   49.992 
olt  50.002   -   49.979 
olt  50.000   -   49.992 
olt  49.998   -   49.992 

Sol tarafta görünenler 40 örneklemeyle elde edilen sonuç, sağ taraf ise kalmanla elde ettiğimiz sonuç. Demek istediğim ağırlık ölçümü bittikten sonra sonuçta oynama olmamasını yada çok çok az bir değişim istiyorum.
@Melih1802 Hocam anladım demek istediğinizi fakat PCB'yi ben çizmedim ve dediğiniz gibi devre kısmında çok fazla filtreleme yok bu sorunu programla halletmeye çalışıyorum.

ugurer

@pro-TR Hocam yeni üye olduğum için galiba mesaj atamıyorum. R değeri formülün kendisinde var yanlış hatırlamıyorsam sistemin hata payı oluyor bir de Q değişkeni var o da yaptığınız modellemenin hata payı.

muhittin_kaplan


ugurer

@muhittin_kaplan ilginiz için teşekkür ederim fakat sonucu stabil hale getirmeyle alakalı bir şey göremedim linkte.

muhittin_kaplan

Hocam linkte kaynağı açık olan bir kalman simulator mevcut. oradan  Q R değerleriyle oynayarak gerekli verilere ulaşabilirsiniz (sanırım)
(Konunun donanım tarafına hiç değinmiyorum, Yukarıda gerekli cevap verilmiş.)

muhittin_kaplan

peki ölçüm derinliği ne olacak, kaçkez örneklediğinizde 0.02 lik bir sapma değerini görmek istiyorsunuz ?

hareketli ortalama işinize yaramıyor mu ?

ugurer

Video'yu izledim de o açıdan bakmamıştım hiç. R ve Q üzerinde baya bir oynadım hocam da sonucu o da değiştirmiyor. Şu şekilde olması lazım atıyorum teraziye 50kg ağırlığı koyduk bu ağırlık üzerinde olduğu sürece görmemiz gereken değerde ki değişim %0.02'yi geçmemeli belirli bir ölçüm sayısı ya da süre yok.
Kalman sayesinde ani değişimleri filtre edebiliyorum ama dediğim gibi işte ekranda gösterdiğim değer özellikle son iki digit hep değişiyor.

tekosis

burada medyan filtreleme işe yarar gibi görünüyor.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

muhittin_kaplan

aslında lowpass istiyorsunuz.
Derin Hareketli Ortalama (Yada Unutulan Geçmiş de deniliyor) ile çözülür düşüncesindeyim.
Peki ölçülecek olan ağırlıkların çözünürlülüğü ne olacak 0.02 değişim demişsiniz ama A nesnesi 1gram iken B nesnesi 1,04 gram olabiliyor mu ?