Gözlemci yapalim

Başlatan picusta, 26 Ocak 2006, 15:13:16

picusta

Gözlemci nedir? ne ise yarar?

Bir sistemi durum geri besleme ile kontrol etmek istiyorsak, o anki durum degiskenini bilmemiz lazim.
Baska bir deyisle, bir çok uygulamada ölçülen degerle kontrol edilmek istenen deger ayni değildir. çünkü ya ölçülmesi imkansiz yada sensörün getirecegi maliyet fazla.
En basit örnegi su : farzedelim bir hiz ölçerimiz var ve konumu kontrol etmek istiyoruz. Bunun için yaptigimiz sey hizin entegralini alip konumunu bulmak.
Simdi elimizde daha karisik bir sistem var diyelim. 3 tane su deposu ve birbirine benzer borular ile bagli. Ilk depoyu bir vana ile dolduruyoruz suyun seviyesi yükseliyor, ve tabandaki basinç arttigi için ikinci depoya giden su akimi artiyor.
Simdi soru su :  Bu üç deponun seviyesini en az sensör kullanarak nasil buluruz? Sorunun cevabi ise söyle : Durum gözlemcisi kullanarak sadece sistemin girisi olan vana açikligi ve sistemin çikisi olan su çikis akimini ölçerek (yani 2 sensör kullanarak) 3 deponun seviyesini bulabiliriz.
Burda durum gözlemcisinin ilk islevini gördük : sanal sensör.

Ayrica durum gözlemcisi diyagnostik yapanlara çok yariyor.
Nedir bu diyagnostik denilen olay? Hatanin oldugunu anlama ve yerini mümkün olabildigince hassas bir sekilde tesbit etme (hangi komponentte).
Bir önceki örnekte yapacagimiz gözlemci sistemi bir nevi gerçek zamanda simüle edecek. Simülasyon için kulanacagi model ise daha önceden buldugumuz sistemin modeli olacak. Bu modeli çikartirken herseyin yolunda gittigini varsayiyoruz, mesela depolar saglam, su sizdirmiyor, vana normal çalisiyor.
Eger bir depoya ayrica seviye ölçer eklersek, gözlemci ile buldugumuz degerle karsilastirabiliriz. Ve sistemin modele göre ne kadar sapma yaptigini görebiliriz, normal çalismadan ne kadar sapiyor.
Böyle birkaç tane test yapabilirsek, mantik kullanarak hatanin tam olarak hangi komponentten gelidigini veya gelebilecegi ihtimali verebiliriz. Bu da ayri bir bilim/mühendislik dali.
Uygulama kismina geçmeden önce böyle bir girisin iyi olacagini düsündüm.
Ezberden yaziyorum, yanlis yapabilirim. Hata görürseniz düzeltmekten kaçinmayin.

picusta

Simdi daha teknik kismina inersek bu durum degiskenleri nelerdir: sistemi betimleyen degiskenler diyebiliriz.
Mesela havaya atilan bir top alirsak, durumunu betimleyen seyler gittigi yön, bulundugu konum, ve hizi olarak olarak alabiliriz. Bunlari biliyorsak, sistemimizin nasil bir yörünge izleyecegini bulabiliriz.
Kontrol edilen sistemlerde ayrica bir de giris vardir ve bu giris sayesinde sistemimizi kontrol ederiz, böylece kendi halinde değil istedigimiz yörüngede gitmesini isteyebiliriz.
Durum degiskenlerini anlamak için coskun20'nin yazdigi bir önceki yaziya bakabilirsiniz.
 Durum denklemi
Durum denkleminde yapilan sey, sistemin gelecekteki halini (türevini veya örnekleme yapilirsa bir sonraki örnek), sistemin o anki durumu ve sisteme uygulanan girise göre ifade eden denklemdir.
X(n+1) = A X + B u
Burda X denilen büyüklük durum degiskenlerini bulunduran vektördür. X(n+1) ise durum degiskenlerinin gelecekteki degerleri.
A matrisi X'nin boyunda kare bir matris.
u ise sisteme verilen giris (vana açikligi, voltaj)   B ise bu girisin sisteme yapacagi yön verme vektörü. Eger bu B vektörü 0 ise, demekki giris ile durum degiskenleri arasinda bir bag yok, ve sistem kendi basina hareket ediyor, kontrol edilemeyen bir sistem.
Bu durum denkleminin yaninda bir de çikis denklemi var. Bu ise ölçtügümüz Y degerini durum degiskenlerine göre ifade ediyor:
Y =C X
tek çikis varsa C yatay bir vektördür. daha çok çikis varsa bir matristir.
Basta dedigim gibi ölçtügümüz degerle (Y) durum degiskenleri ayni sey değildir.
Mesela sistemimizde 2 durum degiskeni olsun örnegin 2 voltaj. Ama bizim aslinda ölçecegimiz sey (AVOmetre, osiloskop, veya ADC) diyelim ki sadece bu 2 voltajin toplamini ölçebilriz.
çikis denklemi söyle olur:
ADC = V1 + V2
Burda çikis (Y) ADC olacak. V1 V2 durum degiskenleri.
O zaman bulacagimiz C matrisi söyle olur:

`Y = [[1,0],[0,1]]((V1),(V2))`
`C=[[1,0],[0,1]]`
Bazen her durum degiskeni dogrudan çikista gözükmez, baska bir degiskeni etkiler ve biz sadece o degiskeni ölçeriz.

Simdi gözlemci kismina dönersek, fikir söyle: elimizde farzedelim ki A ve B matrisleri var, sistemi çok iyi biliyoruz.
O zaman niye bu hesaplama islemini (matris çarpimi toplamayi) bir mikroislemcide gerçeklestirmiyoruz? Bunu yaparsak, degsikenlerin nereye gidecegini bulabiliriz. Bu gözlemci dedigimiz seyin bir girisi demek ki sisteme uygulayacagimizin girisle ayni, sisteme ne veriyorsak onu verecegiz.
Ama diger taraftan X vektörünü bilmiyoruz, amacimiz da onu bulmak. Eger X vektörünü ilk anda 0 alirsak, gözlemcimiz sistemi takip eder, bir sonraki X'i bulur  ve böyle devam eder.
X(n+1) = A * 0 + B*u(n)
X(n+1) = B*u(n)
Ikinci örneklemede:
X(n+2) = A* X(n+1) + B*u(n+1)
X(n+2) = A* B * u(n) +B*u(n+1)
vs..
Demekki sadece u girisini alirsak gözlemcimiz sadece 0 aninda durum degiskenleri 0 ise sistemi takip ediyor.
Simdi çikisi göz önünde bulundurursak, ve çikistan feedback alip bunu gözlemciye verirsek, gözlemci sistem hakkinda daha iyi bilgi edinmezmi ?

z

@Picusta,

Picprojede bugüne kadar okuduğum en güzel yazı bu oldu.

Yanlışım varsa düzeltmeni isteyeceğim,

Elimizde fiziksel bir sistem var. Bunun yaklaşık matematiksel modelini de biliyoruz. Malesef sistemde kontrol etmek istediğimiz büyüklüğü ölçecek sensörümüz yok.

Ancak sistemdeki durum değişkenlerinden birini yada bir kaçını ölçecek sensörümüz var.

Bu durumda hem fiziksel sisteme hemde matematik modele aynı giriş sinyalini girersek sistem çıkışından ve matematiksel modelden hemen hemen aynı çıkışları almamız gerekir. (Fakat bozucu etkiler modelimize etkimiyor)

Klasik kontrolde çıkış bilgisini doğrudan sensör kullanarak öğreniyorduk. Ancak elimizde sensör olmadığı için sistem çıkışını doğrudan ölçemiyor fakat durum değişkenlerinden bazılarına ait sensör bilgilerini kullanarak gerçek sistemin ilgili durum değişkenlerini ölçebiliyoruz, matematik modelde ise sözkonusu durum değişkenlerini hesaplıyabiliyoruz.

Bu durumda bu sistemi elimizdeki modele ve gerçek sistemin bazı durum bilgilerine göre kontrol edebiliriz.

Bütün olay bu mu?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

CoşkuN

picusta'ya çok teşekkürler.Okulda gördüğümüz teorik bilgileri gerçek dünyayla bağdaştırmak her zaman kolay olmuyor.Bu yazı bu konuda faydalı oldu.Umarım bu tartışma böyle uzar gider,güzel şeyler öğreniriz.

picusta

Olay bunalmis hocanin dedigi gibi.
Yalniz söyle birkaç artisi var:
- Sensörden gelen bilgi sadece bir durum degiskeninin degeri olmayabilir. Birkaç durum degiskeninin lineer kombinaysonu da olabilir (lineer sistemlerde).
- Yazinin bu kisminda bahsettigim gözlemci sadece girisi aliyor ve hesaplama yapiyor. Buda gözlemcinin durum degiskenlerini takip etmesi için iki kosul sürüyor: sistemin durum degiskenlerinin basta 0 olmasi ve sistemin gürültüsüz olmasi.
Yazinin devaminda çikisi isin içine katarak bu iki kosuldan kurtulacagiz (gürültülü, bozutucu etkili ve degiskenler 0'dan baslamadan gözlemcimiz çalisacak).
- Gözlemcinin teorisinde gözlemci kurmak için A ve C matrislerinin belli bir kosula uymasi gerekecek. Sensörü alakasiz bir degiskene koyarsak gözlem yapamayiz, örnegin motor çalistiriyoruz, motor kapagi rengini veren bir sensör sistem hakkinda bilgi vermez (abartili bir örnek) .

z

Yeni bir konuyu kitaptan tek başına takip etmekle bir hocadan dinlemek arasında gerçekten fark varmış.

Bu konuyu (daha doğrusu konuya giriş bilgisini) bugüne kadar ilk kez  anladım.

Devamını sabırsızlıkla bekliyoruz.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

picusta

Simdi bunalmis hoca biraz abartiyo olayi:
"Picprojede bugüne kadar okuduğum en güzel yazı bu oldu." demesi sasirtti.
Sonra bir "hocadan dinlemek" halbuki dha mezun olmadim. Yazilari da gelisi güzel yazdim.
Neyse ben forumda nasil matris girecegim, hangi özel matemetik karakterlerini kullanabilirim diye soracaktim.

Ziya

Alıntı yapılan: "picusta"Simdi bunalmis hoca biraz abartiyo olayi:
"Picprojede bugüne kadar okuduğum en güzel yazı bu oldu." demesi sasirtti.
Sonra bir "hocadan dinlemek" halbuki dha mezun olmadim. Yazilari da gelisi güzel yazdim.
Neyse ben forumda nasil matris girecegim, hangi özel matemetik karakterlerini kullanabilirim diye soracaktim.
Bu linke bir bakın. Formül gördüğünüz yazıları alıntı yaparak cevaplıyor gibi yapın, yazım şeklini göreceksiniz... Detaylı bilgi ve formül girmeyle ilgili bilgiler o başlık altında var.

İlgiyle izliyoruz. Matlab'ta nasıl çözüldüklerini anlatabilirseniz seviniriz.
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

z

Ogreten her kez hoca sifatina layiktir. Mesela hesap makinasi kullanali kagit kalemle karekok almayi unuttum. Yanlis hatirlamiyorsam ortaokulda ogretiyorlardi. Bir ortaokul bebesini yakalasam tekrar hatirlatmasi icin bir hocaya gosterilen sayginin aynisini ona da gosteririm.

Neyse matris yazmak icin;

`[[a,b],[c,d]]((n),(k))`

Nasil yazdigimi gormek icin mesajimdan alinti yap.

`[[1,2,3],[4,5,6],[7,8,9]]`
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

CoşkuN

Hocam konu biraz daha ilerlesin MATLAB örnekleri de benden.Diğer "MATLAB ve Kontrol Teorisi " başlığında başlamıştım zaten.

picusta

örneksiz, semasiz ders olmaz tabii.
Bu forum sayesinde 21. yüzyil siniflarinin ne demek oldugunu daha iyi anliyorum. ögretmen veya ögrenciler istedikleri zaman derse giriyor, soru sorarken dersi bölmüyorlar, ögretmen bir konuyu iyi anlatamadigi zaman feedback'i aliyor böylece interaktif egitim oluyor. Süper bisimis.
Neyse konumuza dönelim asagida durum denkleminin açik bir semasi var. Bu sema nasil okunur?
Yukardaki blok Simulink'in state space bloku, oraya dogrudna A,B,C,D matrislerini giriyorsunuz ve sistem hazir.
Asagi kisimdaki ise state space elle sistem yapilmis.
U olan sistemimizin girisi, bu giris B matrisi ile çarpiliyor. Sonra X degeri aliniyor ve A matrisi ile çarpilip B*u ile toplaniyor. Böylece durum denklemimiz elde edilmis oluyor:
Xprime = A*X +B*u
Xprime dedigim X'in türevi.
Semada ise Xprime'i elde ettikten sonra bir kere integrali aliniyor (1/p) ki X olsun.
çikis denklemine baktigimiz zaman Y= C*X  + D*u.
X C matrisi ile çarpiliyor,   girisin dogudan çikisi etkisini gösteren D matrisi  ile toplaniyor.

D matrisi genelde 0, hesaplari kolaylastirmak için simdilik onu bir kenarda birakalim sonra gerekiyorsa hesaba katariz.

Evet geçen kaldigimiz yerde demistik ki, girisi(u) alip X vektörünü A ve B'yi bilerek hesaplayabiliriz sadece X'in 0 aninda 0 olmasi gerekiyor ve sistemde gürültü olmamali demistik.
Simdi gözlemci ile tahmin ettigimiz X vektörünü `hat X` yazalim, `dot hat X` ise bu vektörün türevi.
gözlemcinin denklemi: `dot hat X = A * hat X + B * U`
Bu gözlemcinin hatalara ragmen  X'i takip etmesini istiyorsak denkleme çikisi feedback alip ekleyebiliriz.
Yani denkleme ekleyecegimiz sey gözlemcinin hesapladigi çikis `hat y`  ile gerçek çikis y arasindaki fark olacak. Bu farki bir katsayi ile çarpip denklemimize koyarsak:
`dot hat X = A * hat X + B * U + K * (y - hat y )`
böylece tahmin ettigimiz vektörün kisitli bir zamanda gerçek X vektörüne dogru yaklasicagini garanti etmis oluyoruz. Yani sistemde baslangiç ta X sifir değilse veya sistemde bir anda modelden çikarsa bile, eninde sonunda gözlemci gerçek X'i bulacak.
Simdi bu denklemi çikis denklemi olan y=C*X denklemi ile biraz daha açalim elde ettigimiz:
`dot hat X = A * hat X + B * U + K * (C*X - C*hat X )`
Bu denklemde `hat X` leri toplarsak:
`dot hat X = (A -K*C) * hat X + B * U + K *y`
iste bu denklem klasik gözlemcinin denklemi.
Simdi `epsilon` diye bir vektör alalim, bu vektör gerçek X ile tahmin ettigimiz `hat X` arasindaki fark olsun:
`epsilon = X - hat X`
Yukaridaki buldugumuz gözlemci denklemi ile durum denklemini kullanarak hesaplayabiliriz:
`X = A*X + B*u ` ( durum denklemi)
`dot hat X = (A -K*C) * hat X + B * U + K *y` ( gözlemci denklemi)

`epsilon = X - hat X` ( bu denklemin türevini aliyoruz : )
`dot epsilon = A*X + B*u - ( (A -K*C) * hat X + B * U + K *C*X )`
`dot epsilon = (A-KC)*X - (A -K*C) * hat X + B * U - B*U`
`dot epsilon = (A-KC)* (X - hat X)`
`X- hat X             epsilon`  a esit oldugu için denklem söyle olur:
`dot epsilon = (A-KC)* epsilon`
demekki X ile tahmin ettigimiz X arasindaki fark A-KC matrisine göre hizla küçülüyor.
Sistemin stabl olmasi için demekki A-KC matrisinin öz degerlerinin stabl olmasi gerekiyor, ona göre K seçilmeli.
gördügümüz gibi gözlemcimizin hizini belirleyen bu K matrisi olacak, çok yavas seçilirse, kontrol için bir anlami olmaz. Eger çok hizli seçilirse, gözlemcimiz yüksek frekanstaki gürültülere çok hassas olacak, filtrelemek lazim.

picusta


Yukarda gözlemcinin çalisma prensibi:
gerçek sisteme giden girisi U ve sistemin çikisini Y aliyoruz.
U ile sistemi simüle ediyoruz, Y ile tahmini Y arasindaki farki alarak feedback gerçeklestiriyoruz ve tahmini X'i gerçek X ile yaklastiriyoruz.
Ayni semanin basitlestirilmis hali, feedback'i A-KC matrisi ile dogrudan yapiyoruz.
iki semada esdeger.

Bu arada sistemimiz gözlemlenebilir mi diye bir soru sormamiz gerekiyor. Yni seçtigimiz durum degiskenleri çikisa dogrudan veya dolayli bir sekilde etki ediyor mu? Eger etmiyorsa o durum degiskeni için gözlemlenemez deniyor.
Matlab'da bulmak için söyle bir komut yaziyoruz:
rank (obsv (A,C) )
eger buldugumuz sayi durum degiskenlerinin sayisina esit ise demek ki sistemimiz gözlemlenebilir, değilse (daha az ise) gözlemlenemez.
Evet, devam etmeden sorularinizi alayim.

z

Cikisimizda sensor olmayacakti ama.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

picusta

Alıntı yapılan: "bunalmis"Cikisimizda sensor olmayacakti ama.
Hiç sensör kullanilmayacak dememedim. En az sayida sensör kulanmak (en az 1) amacimiz.
Su kulesi örnekgini alirsak, 3 su deposunun seviyesini ölçen sensor kullanmiyoruz ama sistemin girisi (vana açikligi) ve çikisini (çikan su miktari) alarak 3 su kulesindeki seviyeyi buluyoruz.
Eger hiç çikistan veri almazsak, bu demek oluyor ki sadece sistemi simüle ediyoruz. En ufak bir sapmada veya sisteme yapilacak bir dis etki ile (örnegin su kulesinin birinin içine tas düstü ) simüle ettigimiz ile gerçek arasinda bir fark olacak ve bu farki hiç yok edemeyecegiz.

z

Demek istedigim biz gercek sistemin Y cikisi ile ilgileniyorsak neden Y cikisina sensor koyduk ve geri besleme yaptik. Y den farkli bir durum degiskenine sensor baglamayacakmiyduk?

Hani sistem cikisina sensor koymayacaktik.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com