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.
22.11.2014 tarihli yazı 32736 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.
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.
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.
YORUMLAR
Aktif etkinlik bulunmamaktadır.
- Dünyanın En Görkemli 10 Güneş Tarlası
- Dünyanın En Büyük 10 Makinesi
- 2020’nin En İyi 10 Kişisel Robotu
- Programlamaya Erken Yaşta Başlayan 7 Ünlü Bilgisayar Programcısı
- Üretimin Geleceğinde Etkili Olacak 10 Beceri
- Olağan Üstü Tasarıma Sahip 5 Köprü
- Dünyanın En İyi Bilim ve Teknoloji Müzeleri
- En İyi 5 Tıbbi Robot
- Dünyanın En Zengin 10 Mühendisi
- Üretim için 6 Fabrikasyon İşlemi
- DrivePro Yaşam Döngüsü Hizmetleri
- Batarya Testinin Temelleri
- Enerji Yönetiminde Ölçümün Rolü: Verimliliğe Giden Yol
- HVAC Sistemlerinde Kullanılan EC Fan, Sürücü ve EC+ Fan Teknolojisi
- Su İşleme, Dağıtım ve Atık Su Yönetim Tesislerinde Sürücü Kullanımı
- Röle ve Trafo Merkezi Testlerinin Temelleri | Webinar
- Chint Elektrik Temel DIN Ray Ürünleri Tanıtımı
- Sigma Termik Manyetik Şalterler ile Elektrik Devrelerinde Koruma
- Elektrik Panoları ve Üretim Teknikleri
- Teknik Servis | Megger Türkiye
ANKET