Salı, Mayıs 15, 2012

Yapay Sinir Ağları ile Ses Tanıma 3

Kaldığımız yerden devam ediyoruz sadece mel filitreleme ile iş bitmiyor
 LOG
Kulağımız sesin şiddetini logaritmik bir ölçüde algılar. Benzer şekilde elde ettiğimiz 12 adet verinin logaritmik kullanılması toplam sistem başarımını arttırıyor.  Log işlemi için doğal logaritma iyi sonuç veriyor. Tekrar yeri gelmişken, Bkz. Euler ve ilk değinen J.Bernouilli için bkz. Bileşik faiz problemi. 
IDCT (ters ayrık cosinus dönüşümü)

DCT aslında DFT ile akraba diyebileceğimiz bir dönüşüm işlemidir ancak DFT den farklı olarak DCT de imaginer kısım yoktur yalnızda Reel bileşenler vardır. Ek bilgi; DCT imge sıkıştırmada frekans bileşenlerinin bulunması için sık kullanılır. Bknz.jpeg

İfadesi aşağıdaki gibi;


 
IDCT ile sonuçtaki 12 bileşene dönüşüm işlemi uygulanıyor. Sayısal işaret işleme konusunda üstat isimler IDCT yerine DCT işlemi ile de başarılı sonuçlar alınabileceğini söylüyorlar.
Cosinüs dönüşümü sonrası yüksek oranda benzersiz sonuçlar oluştuğundan, sonuçtaki 12 bileşenimize uyguluyor ve farklı ses sonuçlarının birbirinden daha çok farklılaşmasını sağlıyoruz.
Spectrum üzerinde bir dönüşüm yapıldığından dolayı bu aşamadan sonra elde edilen değerlere Cepstrum adı veriliyor. Spec- trum, Ceps- trum olarak ilk dört harf terslenerek adlandırılıyor. Sözlüklerde Cepstrum terimini bulamayabilirsiniz bu nedenle açıklama ihtiyacı duydum.

Litaratürdeki geçen tam ismi  "Mel-frequency cepstral coefficients (MFCCs)" şeklinde geçmektedir
 detaylı bilgi için bu isimle araştırma yapabilirsiniz.

Enerji Bileşeni

Araştırma yaparken birçok konuşma tanıma sisteminde bulduğumuz 12 cepstral bileşene ek olarak 1 adet de enerji bileşeni eklendiğini görebilirsiniz. Türkçe, sözcüklerin çok farklı enerji seviyesinde seslendirildiği bir dil olmadığından (ya da biz gerektiği gibi seslendirmediğimizden) biz enerji seviyesini dâhil etmedik.  İtalyanca, İspanyolca gibi vurgu ve tonlamaların çok daha fazla olduğu dillerde daha çok işe yarayan bir bileşen.

Liftering
Yukarıdaki gibi bir filtre ile adaptif olarak değişebilecek şekilde bazı değerlerin baskılanması veya yükseltilmesi işlemleri uygulanabilir.  Uygulamaya özel değişkenlik gösterir. Benzer şekilde şimdiye kadar değindiğimiz birçok işlemden sonra elde edilen değerlerin normalizasyonu yapılmaktadır.
*Bu aşamadan sonra elde ettiğimiz 12 adet MFCC katsayısını Cm dizisi olarak ifade edilecek.

Delta ve İvme(acceleration) Değişkenleri

Bu değişkenler sistem başarımını arttırıcı unsurlardır. Cm sonuç dizisindeki sonuçların ne kadar değiştiği ve ne hızla değiştiği ile ilgili bilgileri de sonuca dahil etmek istiyoruz.
 Delta bileşeni adından tahmin edildiği gibi değişimi ifade etmektedir. Delta bileşenini en kolay hesaplama yolu her değerden bir öncekini çıkarmaktır. 
Ancak gürültüden dolayı bozulmalarda veya farklı seslendirme biçimlerinde sistemimizi daha başarılı hale getirmek için, bulduğumuz cesptral bileşenlere bir polinom fit edip delta ve acc değişkenlerini bulmak çok daha mantıklıdır.
Polinom bulunduktan sonra fizik derslerinden de hatırlanabileceği gibi limp→0 iken 1.türev delta, 2.derece türev acceleration (kısaca acc)değişkenlerini verecektir.
2. dereceden bir polinom fit etmek kazanç/işlem yükü oranı düşünüldüğünde yeterli. Tabii matematiğe düşkün arkadaşlar bilirler polinom fit etmek için en iyi yöntemlerden birisi, en küçük kareler (least squares) yöntemidir. Bknz. Gauss
2. derece polinom h1 + h2*p + h3*p^2     gibi bir şey olacak. Ve Gauss yaklaşımına göre sonuç dizimizdeki 2P+1 kadar elemandan bu polinomu çıkarıp karesini alıyor ve topluyoruz. İdeal durumda toplamın limiti = 0 olmalı.
Yani;
0=p=-PPChn+p- ( h1 + h2p+ h3p2 ) 2
İfade1 
ukarıdaki ifadeye G dersek;
G∂h1= 0, ∂G∂h2= 0 ve ∂G∂h3= 0
İfade2
Yukarıdaki diferansiyeller çözüldüğünde elimizde sıfıra eşit 3 bilinmeyenli 3 ayrı denklem olur. Gerisi klasik matematik ve buradan polinoma ait h1,h2 ve h3 değişkenleri rahatlıkla bulunabilir.
limp→0( h1 + h2p+ h3p2 ) ifadesinin
1. derece türevi = h2 = delta değişkeni,
2.derece türevi = 2*h3 = acc değişkeni.

Dikkat edilmesi gereken noktalardan birisi de şu; 12 cepstral değişkenin tümüne bir polinom fit edilip polinom katysayıları bir kereye mahsus hesaplanmıyor. Cm dizisinin her elemanı için ilk denklemde büyük P ile ifade edilen sayıda önceki ve sonraki rakamlara göre bir polinom bulunuyor. Dolayısıyla 12 Cm değişkenimizden her birisi için 1 delta ve 1 acc değeri hesaplıyoruz.
*Delta sonuçları D dizisinde, Acc sonuçları için A dizisinde tutulsun.
Bir örnekle şöyle açıklayalım;
Biz sistemimizde P = 2 seçtik dolayısıyla -> 2P+1 = 5 

Yani, Cm dizisinin her serfinde farklı 5 adet elemanı üzerine bir polinom oturuyor ve katsayılar hesaplanıyor.
Cm[5] için aşağıdaki eşitlik İfade 2 den çözülür ve D[5] ve A[5] bulunur.
(Cm[3] – polinom)^2 +…………..+(Cm[7] – polinom)^2 = 0
Bu işlem Cm dizisinin tüm elemanlarına tek tek uygulanıyor. Sonuçta D ve A dizilerinin bütün elemanları hesaplanıyor. Bu 3 dizideki veriler uç uca dizilirse elimizde aşağıdaki gibi tek bir dizi oluşuyor.
AV = {Cm[0],……………………, Cm[11],D[0],…………….,D[11],A[0],………………..,A[11]}

Toplamda 20ms uzunluğundaki her bir çerçeve için 36 adet birbiriyle önemli ölçüde benzeşmeyen değer bulduk. Bu 36 adet değer bir vektör oluşturuyor.
Örneğin başlangıçtaki fener kelimesini 110 çerçeveye bölmüşsek ve her çerçeve için 36 elemanlı akustik vektörümüz varsa toplamda 110 akustik vektör * 36 = 3960 adet fener sözcüğünü ifade eden rakam var.
Aşağıda 2 farklı kişi tarafından seslendirilen ”mendil” sözcüğünün akustik vektörlerine ait grafikleri bulabilirsiniz.
 
Bu değerlerin ortalamalarını alıp üst üste çizdirdiğimizde aşağıdaki grafikte görüldüğü gibi birbirine çok yakın eğriler çıkıyor
Mesela iki ayrı Mendil ses kaydınından elde edilen grafik

 mendil (mavi) - mendil (kırmız)

Mendil ve araba kelimeleri ise aşağıdaki gibi birbiriyle uyuşmayan eğriler çiziyor.
 
Devam edecek ...

Hiç yorum yok: