4 - Açık Cezeri Kütüphanesi (rand ve randn komutları ile tek boyutlu sinyal işlemleri)

Herkese Merhaba, Açık Cezeri Kütüphanesi ile ilgili düzenlenen yeni yazı dizimize hoş geldiniz.

Not: OCL çok sık güncellendiği için, bu derse başlamadan önce github sitesinden OCL'nin son sürümünü indirip sisteminize kurmanız gerekmektedir. Bunun için 2.dersimiz olan OCL kurulumu dersine https://open-cezeri-library.blogspot.com.tr/2018/03/ack-cezeri-kutuphanesinin-kurulumu.html bakabilirsiniz.

Bu dersimizde OCL ile çeşitli istatistiksel işlemlerin tek boyutlu diziler üzerinde nasıl gerçekleştirildiğini inceleyeceğiz. Geçen derslerimizde hatırlarsanız OCL'de tek boyutlu diziler

CMatrix cm=CMatrix.getInstance(start,end,value);
CMatrix cm=CMatrix.getInstance().zeros(100,1);
CMatrix cm=CMatrix.getInstance().ones(100,1);
CMatrix cm=CMatrix.getInstance().ones(100,1).multiplyScalar(value);
CMatrix cm=CMatrix.getInstance().vector(0,0.1,360);
CMatrix cm=CMatrix.getInstance().linspace(0,360,1500);

yapılabiliyordu. Bunun dışında rand ve randn metotlarını kullanarak ta tek boyutlu sinyal üretebilirsiniz. rand ve randn komutlarını birçok şekilde kullanabiliriz. Diğer komutlarda olduğu gibi, ilk iki parametre matrisin satır ve sütun sayısı olacak.

CMatrix cm=CMatrix.getInstance().rand(100,1);

denildiğinde değerleri 0..1 arasında değişen random değerlerden meydana gelmiş 100 satır ve 1 sütünluk bir sinyal üretir. Burada kullanılan rand metodunun içinde düzgün dağılan random fonksiyonu (uniformly distributed random function) kullanılmıştır. Eğer random sayısının 0 ile 1 arasında değilde orta noktası 0 olup standart sapması unit (1) olan bir dağılım olmasını istiyorsanız randn metodunu kullanmanız gerekir. Kullanım deseni rand ile aynıdır. Normal dağılım fonksiyonu Şekil-1'de gösterilmiştir. Daha detaylı bilgi için http://www.statisticshowto.com/probability-and-statistics/normal-distributions/ bakılabilir.

Şekil-1 : Normal Dağılım Grafiği (Gaussian dağılımına da benzemektedir)


randn metodunu daha çok gerçek hayattakine benzer şekilde bir dağılım modellemesi yapmak istenildiğinde kullanılabilir. Mesela: 100 öğrenciden meydana gelen bir sınıfta Matematik dersinde öğrencilerin aldığı notların modellenmesi gibi. Bunun için bir örnek üzerinden gidelim. Örneğimizde iki adet CMatrix nesnesi yapmamız gerekiyor. Bunlardan birincisine cmUniform diğerine de cmNormal diyeceğiz. Her iki matrisin ürettiği değerleri plot edip görsel olarak aralarındaki farkları anlamaya çalışacağız.


        CMatrix cmUniform = CMatrix.getInstance()
                .rand(1000, 1)
                .plotFX("UnOrdered")
                .sort()
                .plotFX("Ordered in Ascending Order")
                .hist(100)
                ;

rand(1000,1) komutu 1000 x 1 olan bir sütün matrisi üretiyor ve plotFX ile ekrana çiziyor. (plotFX OCL'ye yeni eklendi bunun yerine plot da kullanılabilir, farkı FX uzantısı ile JavaFX kullanıldığını kullanıcıya belirtmek içindir, JavaFX normal swing'e göre daha kaliteli çizimler üretmektedir, bu yüzden OCL'nin gelecek versiyonlarında özelikle veri görselleştirme işlemlerinde swing'ten JavaFX geçiş yapılacaktır) Matrisin değerleri 0 ile 1 arasında uniformly distributed (düzgün dağılmış) seçiliyor. Bu işlemlerin sonucunda elde edilne ekran çıktısı Şekil-2 de gösterilmektedir.



Şekil-2 : rand ile üretilen orjinal sütun matrisinin plotFX çıktısı

                .sort()
                .plotFX("Ordered in Ascending Order")

komutları ise ilk önce matrisi artan sıralama ile sıralıyor daha sonra da sıralanmış matrisi plot ediyor. İlgili çıktı Şekil-3 de gösterilmiştir.



Şekil-3 : Yükselen (ascend) sıra ile sıralanmış (sort edilmiş) çıktısı

en son yazılan hist(100) komutu ise dağılımın  histogramını 100 bölgeye ayırarak gösteriyor. Çıktısı aşağıda.



Şekil-4: Düzgün dağılımlı (uniformly distributed) rand fonksiyonun çıktısının histogramı 


        CMatrix cmNormal = CMatrix.getInstance()
                .randn(1000, 1)
                .plotFX("UnOrdered")
                .sort()
                .plotFX("Ordered in Ascending Order")
                .hist(100)
                ;
randn ile normal dağılımlı matrisimizin çıktıları ise aşağıdaki Şekil 5-7 de gösterilmiştir.



Şekil-5: randn ile normal dağılım (dağılımın mean değerinin sıfırda olduğuna dikkat ediniz)



Şekil-6: Yukarıya doğru sıralanmış hali (dağılımın başı ile sonuna doğru bölgede doğrusal olmayan fonksiyon genelde en fazla değerlerin ortada kümelenmiş olduğuna kenarlarda ise nispeten daha az sayıda değer üretildiğine işaret etmektedir)



Şekil-7: Şekil-6'da anlatılanları tasdik eder nitelikte histogram grafiği.

Uygulama Yapalım

500 kişilik bir okuldaki öğrencilerin Sinyal ve Görüntü İşleme Uygulamaları dersinden aldıkları notları benzetim (simülasyon) yolu ile analiz edelim. Bunun için gerekli olan OCL komutlarını alt alta yazarak kodlayınız.

Bu sorunun cevabında izlediğiniz yöntemi veya kodları yorumlar kısmında tartışabilirsiniz.

youtube kanalımıza abone olmayı ve yorum yazmayı unutmayalım. Herkese iyi kodlamalar.

https://www.youtube.com/watch?v=XiL8RtApi78 





Yorumlar

  1. 500 kişilik bir okuldaki öğrencilerin Sinyal ve Görüntü İşleme Uygulamaları dersinden aldıkları notları benzetim (simülasyon) yolu ile analiz edelim. Bunun için gerekli olan OCL komutlarını alt alta yazarak kodlayınız.



    CMatrix cmGoruntuIslemeDersNotlari = CMatrix.getInstance()
    .rand(500, 1) // 500 Öğrenci
    .multiplyScalar(100) // Rastgele değerlerin 0-100 arasına alınması.
    //randn fonk kullanılırsa, map etmek gerekiyor.
    .plotFX("UnOrdered")
    .sort()
    .plotFX("Ordered in Ascending Order")
    .hist()
    .println()
    ;

    YanıtlaSil

Yorum Gönder

Bu blogdaki popüler yayınlar

2 - Açık Cezeri Kütüphanesinin Kurulumu

3 - Açık Cezeri Kütüphanesi (tek boyutlu sinyaller nasıl üretilir)