Bu MFCC hesaplamasında DCT adımının doğru bir yorumu mu?


9

Bu, burada tartışmanın devamıdır . Orada yorum yapardım, ama 50 temsilcim yok, bu yüzden yeni bir soru soruyorum.

MFCC hesaplama sürecinde DCT adımını şu şekilde anlıyorum: Arkasındaki mantık, filtrelerin çakışması nedeniyle log-spektral büyüklüklerdeki (filtre bankasından) korelasyonu ayırmaktır. Esasen, DCT bu log-spektral büyüklüklerin verdiği spektrum temsilini yumuşatır.

Aşağıdaki görüntüdeki mavi çizginin, log-spektral büyüklüklerin vektörü tarafından temsil edilen spektrumu temsil ettiğini söylemek doğru olur mu ve kırmızı çizgi, bir kez DCT-ified olduğunda o vektördür?

DCT-ified log-spektral büyüklükler (yani MFCC'ler) ile sadece log-spektral büyüklükler ???


test için kodunuzu nereden indirebilirim?
auraham

Aşağıdaki resim? Yayında resim yok.
Eric Platon

Yanıtlar:


16

En başından başlayalım. Cepstrum'u hesaplamanın standart yolu aşağıdaki gibidir:

C(x(t))=F-1[günlük(F[x(t)])]

MFCC katsayıları durumunda durum biraz farklıdır, ancak yine de benzerdir.

Ön vurgulama ve pencereleme işleminden sonra, sinyalinizin DFT'sini hesaplar ve örtüşen üçgen filtrelerin filtre bankasını erime ölçeğinde ayrılmış olarak uygularsınız (bazı durumlarda doğrusal ölçek mel'den daha iyidir):

resim açıklamasını buraya girin

Cepstrum tanımına gelince, şimdi spektrumun zarfını (azaltılmış spektrum) mel-frekans ölçeğinde temsil ettiniz. Eğer bunu temsil ederseniz, o zaman onun orijinal sinyal spektrumunuza benzediğini göreceksiniz.

Bir sonraki adım, yukarıda elde edilen katsayıların logaritmasını hesaplamaktır. Bunun nedeni, cepstrumun sinyali vokal kanalının dürtü tepkisinden ayıran homomorfik bir dönüşüm olması gerektiğidir. Nasıl?

Orijinal konuşma sinyali s(t) çoğunlukla dürtü yanıtı ile kıvrılır h(t) vokal kanalı:

s^(t)=s(t)h(t)

Frekans alanında evrişim spektrumların bir çarpımıdır:

S^(f)=S(f)'H(f)

Bu, aşağıdaki özelliğe dayanarak iki parçaya ayrılabilir: günlük(birb)=günlük(bir)+günlük(b).

Ayrıca dürtü tepkisinin zaman içinde değişmemesini bekliyoruz, bu nedenle ortalamanın çıkarılmasıyla kolayca çıkarılabilir. Şimdi grup enerjilerimizin logaritmalarını neden aldığımızı görüyorsunuz.

Cepstrum tanımındaki son adım Ters Fourier Dönüşümü olacaktır F-1. Sorun şu ki, sadece log enerjilerimiz var, faz bilgisi yok, bu yüzden uyguladıktan sonra ifftkarmaşık değerli katsayılar elde ediyoruz - tüm bu çabaların kompakt bir temsil olması çok zarif değil. Her ne kadar FT'nin 'basitleştirilmiş' versiyonu olan Ayrık Kosinüs Dönüşümü'nü alabilir ve gerçek değerli katsayıları alabiliriz! Bu prosedür, cosinusoidleri log-enerji katsayılarımızla eşleştirerek görselleştirilebilir. Cepstrum'un 'spektrum spektrumu' olarak da adlandırıldığını hatırlayabilir misiniz? Bu tam adım - log-energy zarf katsayılarımızda herhangi bir periyodiklik arıyoruz.

resim açıklamasını buraya girin

Şimdi görüyorsunuz, şimdi orijinal spektrumun nasıl göründüğünü anlamak oldukça zor. Ek olarak, genellikle sadece ilk 12 MFCC'yi alıyoruz, çünkü daha yüksek olanlar log enerjilerindeki hızlı değişiklikleri tanımlamaktadır, bu da genellikle tanıma oranını daha da kötüleştirmektedir. DCT yapmanın nedenleri şunlardı:

  • Başlangıçta IFFT yapmalısınız, ancak DCT'den gerçek değerli katsayıları almak daha kolaydır. Ek olarak, artık tam spektrumumuz yok (tüm frekans bölmeleri), ancak mel filtre bankalarında enerji katsayıları var, bu nedenle IFFT kullanımı biraz fazladır.

  • İlk şekilde, filtre bankalarının üst üste geldiğini görüyorsunuz, bu yüzden yan yana olanlardan gelen enerji iki arasında yayılıyor - DCT onları süslemeye izin veriyor. Bunun örneğin diyagonal kovaryans matrislerini (diğer katsayılar arasında korelasyon yok) kullanabileceğiniz Gauss Karışım Modelleri durumunda iyi bir özellik olduğunu unutmayın (tüm katsayılar ilişkilidir) - bu işleri basitleştirir.

  • Mel frekans katsayılarını dekolatize etmenin başka bir yolu, sadece bu amaç için kullanılan PCA (Ana Bileşen Analizi) olacaktır. Şansımız için, dekorla ilgili sinyaller söz konusu olduğunda DCT'nin PCA'nın çok iyi bir yaklaşımı olduğu kanıtlandı, bu nedenle Ayrık Kosinüs Dönüşümü kullanmanın başka bir avantajı oldu.


Bazı literatür:

Hyoung-Gook Kim, Nicolas Moreau, Thomas Sikora - MPEG-7 Ses ve Ötesi: Ses İçeriği Dizine Ekleme ve Alma


1
Neden IFFT'den karmaşık sayıların mutlak değerini alamıyoruz? Karmaşık sayıları ele almak çok daha zorsa, neden her zaman DCT'yi değil, bir cepstrum hesaplarken IFFT'yi alıyoruz? Açıklama için teşekkürler. Bu rakam özellikle yardımcı oldu.
acannon828

1
@ acannon828: Lütfen düzenlenen cevabımın son 3 noktasına bakın. Umarım şimdi her şeyi açıklar.
jojek

Harika yanıt .. Buna ekleyebileceğiniz herhangi bir literatür.
Bob Burt

1
@BobBurt: İşte böyle!
jojek

Kitap için teşekkürler. Bunların çoğu bu konuda açıklanmış gibi görünüyor. Kitap ayrıca vokal sistemi hakkındaki teoriyi de kapsıyor mu - bununla ilgili bir şey bulamıyorum.
Bob Burt

3

DCT'yi düzeltmekten daha fazlası spektrumu temsil etmek için gereken boyutların sayısını azaltır. DCT, boyutsallığın azaltılması için iyidir, çünkü ilk birkaç katsayıdaki spektrum enerjisinin çoğunu sıkıştırma eğilimindedir.


Teşekkürler. Bu, @pichenettes'in boyutsallık azalması ile ne anlama geldiğini anlamama yardımcı oldu.
acannon828

3

Bunun arkasındaki mantık, filtrelerin çakışması nedeniyle log-spektral büyüklüklerdeki (filtre bankasından) korelasyonu ayırmaktır. Esasen, DCT bu log-spektral büyüklüklerin verdiği spektrum temsilini yumuşatır.

Bu yanlış. Log-spektral büyüklükler arasında sadece örtüştükleri için değil, aynı zamanda herhangi bir sayı dizisinin log-spektral büyüklüğün "anlamlı" (olduğu gibi, doğal konuşma ve sesde meydana gelen) serisini temsil etmemesi nedeniyle de bir korelasyon vardır. "anlamlı" log-spektral büyüklükler, daha yüksek frekanslarda, vb. genel bir enerji azalması ile, oldukça pürüzsüz olma eğilimindedir. Tüm "anlamlı" log-spektral büyüklük vektörlerinin uzamının boyutunun 40'tan küçük veya hangi sayıda bant kullanırsanız kullanın; ve DCT, 40 kanallı verileri bu daha küçük alana eşlemek için boyutsallık azalması olarak görülebilir.

Esasen, DCT bu log-spektral büyüklüklerin verdiği spektrum temsilini yumuşatır.

DCT herhangi bir düzeltme yapmaz. DCT verilerinden yeniden yapılandırırken yumuşatma görürsünüz - yumuşatma, DCT'nin bilgi kaybından ve sonraki katsayı kesilmesinden kaynaklanır.

Ancak MFCC katsayıları düzleştirilmiş spektrumu saklamaz - bir dizi ilişkisiz DCT katsayılarını depolar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.