İstenmeyene Göğüs Gerenler : Filtreler – 3 – Sinyal İşleme Uygulaması


Evet sanırım artık beklediğiniz yazı geldi. Bunca matematik ve onlarca çalışmadan sonra artık bu işin ekmeğini yeme zamanının geldiğini düşünüyorum. Özellikle sinyal işlemede çok özel bir yeri olan “Filtreleme” konusu barındırdığı sihirli matematik ile beni ciddi anlamda büyülemiştir. Bir filtre tasarlamanın birden fazla yolu olması, kalite faktörü, filtrenin cevabı gibi bir çok ayrıntıyı içinde barındırsa da bunların çok da zor olmadığını az çok gördük. Eğer işin temelini anladıysanız gelin sonra bir uygulama ile bu yazı dizisini tamamlayalım.

Öncelikle, eğer okumadıysanız eski yazıları mutlaka okumanızı tavsiye ederim. Bunun sebebi burada kullanacağım filtreleme kodlarını daha önceki yazılarımda anlatmış olmamdır.

Özellikle ses sinyallerini işlerken sıkça kullanılan filtreler daha önceki yazılardan gördüğünüz üzere kendi içinde derya deniz! Önemli olanın uygulamaya göre en iyi filtreyi seçmek olduğunu unutmamak gerekiyor. Ben bu yazıda daha önceden kullandığımız analog filtrenin uygulanışını göstereceğim. Bilinear Z Transform ile bir analog filtrenin nasıl dijital bir filtreye dönüştüğünü anlatmıştım. Şimdi bunu filtreyi Python uygulaması ile ses sinyali üzerinden gerçek zamanlı olarak test edelim.. Bu uygulamayı ayrıca bir mikrodenetleyici üzerinde çalıştırmayı da düşünüyorum. Bunu daha sonraki yazılarda görmeniz olası.

Öncelikle girdi olarak ses sinyalini bilgisayardan alacağımız için bize bir mikrofon veya farklı bir çözüm gerekiyor. Ben bu işi bilgisayarda bulunan “Stereo Karışımı” özelliğini kullanarak yaptım. Python içerisinde bulunan “PyAudio” kütüphanesi ses girdiğini yazılım ile almamızı sağlıyor. Oldukça basit ve kullanışlı olan bu kütüphane bize çok az kodla devasa işleri yapmamızı sağlıyor.

Öncelikle Stereo Karışımını “Varsayılan Aygıt” olarak belirliyoruz. Ardından Python için PyAudio kütüphanesi kurmamız gerekiyor. Bu kütüphanenin kurulumu Windows ortamı için biraz zor olabiliyor. Visual C++ 14 kurulu olması gerekiyor. Ayrıca kullandığınız Python sürümüne uygun kütüphaneyi şu siteden indirip elle kurmanız daha sağlıklı olacaktır.

Elle kurulum için önce pip, setuptools gibi güncellemeleri yapın. Akabinde Python 3.7 64Bit için şu dosyayı yükleyin.

Bu aşamadan sonra programlamaya başlayabiliriz. Ben arayüzünü kullanışlı bulduğum ve geliştirme aşamasından büyük kolaylıklar sağladığı için PyCharm’ı tercih ediyorum. Bir Python dosyası açtıktan sonra aygıtları kontrol etmek adına şu kodu çalıştırıp çıktıyı görmemiz gerekiyor.

Benim aldığım çıktı şu şekilde.

Evet Stereo Karışımı listede gözüküyor her şey yolunda.

Şimdi ise ses sinyalini almak için WEB Tarayıcı üzerinden bir Tone Generator kullanabiliriz. Şu site sade ve içerdiği özellikler ile gayet kullanışlı duruyor. Buradan bir sinüs üretip test yapmaya başlayabiliriz.

Araştırma yaparken şurada çok işe yarayacak bir kod bloğu buldum. Bu kodu üzerinde çok ufak bir düzenleme yaparak filtreleme kodunu ekleyip çalıştırmak mümkün. Tone Generator ile önce filtresiz olarak çalıştıralım. Ben bir kaç rakamı değiştirip test yaptım.

Evet bu adımda değerler çok tutarlı. Bir sonraki adımda filtreleme kodunu ekleyebiliriz. Ben ekleme işini yapmadan önce daha önce yazdığımız filtre kodunda ufak bir düzenleme yaptım. Bu K1, K2 ve K3 katsayılarının sadece 1 defa hesaplanmasını sağlıyor. Sürekli olarak bunu hesaplamaya gerek yok. Eski ve yeni filtreleme kodlarını inceleyerek bu ufak farkı görebilirsiniz. Aşağıda güncel hali mevcut. Bunu projeye ekleyerek filtreleme işini başlatalım.

Yazılım içerisinde gerekli düzenlemeleri yaparken önce R, C ve Ts değerlerini girelim.

Son olarak filtreleme kodunu döngüye ekleyelim.

Tüm yapacaklarımız bundan ibaret. Artık filtrenin keyfini çıkarabilirsiniz. Hatta aynı anda çalıştırıp farkı incelemeniz mümkün.


Tabi böyle kuru kuru olmaz dimi ? O halde kendi bestem olan parçalarla sizleri baş başa bırakıyorum. Keyifli seyirler.

Projeye Github hesabım üzerinden ulaşabilirsiniz.

Esen Kalın.

You may also like...

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir