elektrik port üyelik servisleri elektrik port üyelik servisleri

Matlab ile Ses Bölütleme

Ses analizi ve ses işleme uygulamalarında sıklıkla kullanılan ses bölütleme, bir konuşma içinde geçen sesleri nefes aralıklarını tespit ederek ayırma işlemidir. Ses bölütleme, ses uygulamalarında ilk basamak olarak kullanılmaktadır. Daha sonrasında, bölütlenen kelimeler üzerinde ses tanıma, sesli komut yönlendirme gibi uygulamalar yapılabilmektedir. Bu yazımızda matlab ortamında, daha önceden kaydedilmiş bir konuşmada geçen kelimeleri ayırt edip, yeni bir ses dosyası halinde nasıl kaydedeceğimizi anlatacağız.



A- A+
22.11.2014 tarihli yazı 10854 kez okunmuştur.
Matlab, tüm mühendislik dalları için önemli kütüphaneler  içeren bir programdır. Biz bu uygulamamızda Matlab’ın DSP (Digital Signal Processing) kütüphanesini kullanarak basit bir ses işleme uygulaması yapacağız. Uygulamamızı yapabilmemiz için ‘.wav’ formatında kaydedilmiş  kısa bir konuşmaya ihtiyacımız olacak. Ses kaydedici bir çok program bulunmaktadır. Bu uygulamamızda basit ve kullanışlı olan wavesurfer  programını tercih ettik.

Kodlara geçmeden önce masa üstüne yeni bir klasör oluşturup kaydettiğimiz ses dosyasını ve matlabda kod yazdığımız  '.mfile' dosyasını bu klasöre kaydediyoruz.  

 

Peki Kodlarımızla Hangi İşlemleri Yapacağız?


İlk olarak kaydettiğimiz ses dosyasını matlab ortamında dijital olarak alacağız.
Aldığımız ses dosyasının enerji değerlerini belli örnekleme aralıklarında çıkaracağız.
Sesli sessiz bölge tespiti yapabilmek  için bir eşik değeriyle enerji değerlerimizi karşılaştıracağız.
Bu karşılaştırma sonucunda oluşan  matris üzerinden bir algoritma geliştirerek kelimelerimizi ayıracağız.
Ayırdığımız kelimeleri yeni bir ses dosyası halinde kaydedeceğiz.

 
►İlginizi Çekebilir: Yapay Zeka ve Çin Odası Deneyi

 

Sesin Enerji Değerlerinin Çıkartılması ve Sesli Sessiz Bölge Tespiti




Kodların yanlarında gerekli açıklamalar yapılmıştır. Burada eklemek istediğimiz  birkaç husus var; energies değişkeni sesimizin 100 ms aralıklarla aldığımız örneklerin enerji değerlerini belirtmektedir. Vuv değişkeni ise threshold (eşik) değerimizle yapılan karşılaştırma sonucunda elde edilmiş sesli ve sessiz bölgeleri göstermektedir. Bölütleme işlemini vuv dizisi üzerinden kelimelerin bitiş ve başlangıç yerlerini belirleyerek yapacağız.

 

Kelime Sayısı Tespiti 



 
Energies dizisinin uzunluğu belirlendikten sonra vuv  dizisi içinde 1'den sonra 0 gelen satırların tespiti yapılıyor. Birden sonra sıfır gelen diziler, kelimenin bittiği noktaları gösteriyor. Kaç tane kelimenin bitiş noktası varsa o kadar kelime sayısı vardır diyoruz ve k_s değişkenine kelime sayısını atıyoruz.

 

Kelimelerin Yerlerinin Belirlenmesi




Bu kısımda bas ve son adında iki tane dizi değişkeni tanımlıyoruz. Kelimelerin başladığı ve bittiği dizilerin yerlerini bu değişkenlere atayacağız. Birinci iç içe geçen for döngüsünde 0'dan sonra 1 gelen dizi değeri tespit edilmek isteniyor. Örnek verecek olursak vuv(5)=0 iken vuv(6)=1 ise dizinin 6. elemanından itibaren bir kelimenin başladığını anlıyoruz. Aynı mantıkla ikinci iç içe for döngüsünde vuv dizisinin tüm elemanları taratılarak 1 den sonra 0 gelen satırlar belirleniyor. Bunlar da bizim kelimelerimizin bitiş yerini belirtiyor. Örneğin,  bas(1)=6 son(1)=11 ise 6. ve 11.  dizi değerleri arasında bir kelime tespiti yapıldığını anlıyoruz. Son olarak tespit edilen dizilerin 4800 değeriyle çarpıldığını görüyoruz. Bu değer wavread fonksiyonu ile okuma yaparken alınan sesin örnekleme frekansını gösteriyor(fs). Dizi elemanlarını bu değerle çarparak seslerin hangi frekans aralıklarında olduğunu belirliyoruz. Bir sonraki kısımda bu değeri kullanarak sesi yazdıracağız.

Bölütlenen Sesleri Kaydetme




Bu kısımda geçen k1,k2,k3,k4 değerleri bölütlediğimiz kelimelerin speech değişkenindeki yerini temsil etmektedir. Wavwrite() fonksiyonunu kullanarak, speech dizisinin yani kaydettiğimiz sesin digital verilerinin tutulduğu dizinin ilgili bölümünü yazdırarak kelimelerimizi bölütlemiş oluyoruz. 

 

Grafiklerle Kodların Özeti


Matlab'da kodların anlanmasında workspace alanının kullanımı önemlidir. Bu kısımda kod parçalarımızda oluşan değişkenlerin içeriklerini görebiliriz. Bu konudaki tavsiyemiz workspace üzerinden değişkenleri kontrol ederek kodları incelemeniz. Bir diğer tavsiyemiz ise oluşan değişkenleri grafiksel boyutta incelemeniz olacaktır. Bu konuda matlab’in grafik çizdirme fonksiyonu olan plot() fonksiyonunu incelemenizi öneririz. Biz şimdi uygulamamızda  kaydettiğimiz sesin değerlerini içeren speech değişkenini, kaydettiğimiz sesin enerjisini belirten energies değişkenini ve sesli sessiz bölge tespiti yaptığımız vuv değişkenini plot() komutuyla çizdirerek inceleyelim.





Grafiklere alt alta baktığımızda kaydettiğimiz sesi, keydettiğimiz sesin enerjisini ve sesli sessiz bölgeleri (vuv dizisi) aynı hizada görebiliyoruz. Bu şekilde yazdığımız kodların tutarlı olduğunu anlayabiliriz. Son olarak oluşturduğumuz klasöre yazdırdığımız yeni sesleri dinleyerek sistemin doğruluğunu kontrol edebiliriz.



Osman AYMAZ Osman AYMAZ Yazar Hakkında Tüm yazıları Mesaj gönder Yazdır



ANKET
Endüstri 4.0 için En Hazır Sektör Hangisidir

Sonuçlar