Допоможіть обчислити / зрозуміти MFCC: Коефіцієнти частоти мель-частоти


17

Я читав в Інтернеті шматочки та фрагменти, але просто не можу все це скласти разом. У мене є деякі базові знання про сигнали / DSP речі, які повинні бути достатньою умовою для цього. Мене цікавить врешті-решт кодування цього алгоритму на Java, але я ще не розумію його повністю, тому я тут (це вважається математикою, правда?).

Ось як я думаю, що це працює разом із прогалинами в моїх знаннях.

  1. Почніть зі свого звукового зразка мови, скажімо, файл .wav, який ви можете прочитати у масиві. Назвіть цей масив , де варіюється від (так вибірки). Значення відповідають інтенсивності звуку, я думаю - амплітудам.n 0 , 1 , , N - 1 Nх[н]н0,1,,N-1N

  2. Розділіть аудіосигнал на окремі "кадри" розміром 10 мс, якщо ви вважаєте, що мовленнєвий сигнал є "нерухомим". Це форма квантування. Отже, якщо швидкість вибірки становить 44,1 кГц, 10 мс дорівнює 441 вибірці або значенню .х[н]

  3. Зробіть перетворення Фур'є (FFT для обчислення). Тепер це робиться на всьому сигналі або на кожному окремому кадрі ? Я думаю, що є різниця, оскільки в цілому перетворення Фур'є розглядає всі елементи сигналу, тому з'єднаний з з'єднані з де - менші кадри. У будь-якому випадку, скажімо, ми робимо деякий FFT і закінчуємо на решту цього.F ( x [ n ] ) F ( x 1 [ n ] ) F ( x 2 [ n ] ) F ( x N [ n ] ) x i [ n ] X [ k ]х[н]Ж(х[н])Ж(х1[н])Ж(х2[н])F(xN[n])xi[n]X[k]

  4. Картографування до масштабу Мела та ведення журналів. Я знаю, як перетворити звичайні номери частот на шкалу Мела. Для кожного з ("вісь x", якщо ви мені дозволите), ви можете зробити формулу тут: http://en.wikipedia.org/wiki/Mel_scale . Але як щодо "y-значень" або амплітуд ? Вони просто залишаються тими ж значеннями, але зміщуються до відповідних плям на новій осі Мела (x-)? Я бачив, що в деякому документі було щось про реєстрацію фактичних значень тому що якщо коли один з цих сигналів вважається шумом, ви не хочете , робота журналу в цьому рівнянні перетворює мультиплікативний шум у аддитивний шум, який, сподіваємось, може бути відфільтрований (?).kX[k]X[k]X[k]X[k]=A[k]B[k]

  5. Тепер останнім кроком є ​​прийняття DCT вашого зміненого зверху (однак він в кінцевому підсумку стає модифікованим). Потім ви берете амплітуди цього кінцевого результату, і це ваші MFCC. Я читав щось про викидання значень високої частоти.X[k]

Тому я намагаюся по-справжньому вияснити, як обчислити цих хлопців крок за кроком, і явно деякі речі ухиляються від мене згори.

Крім того, я чув про використання "фільтрів банків" (масив частотних фільтрів в основному) і не знаю, чи це стосується створення кадрів з вихідного сигналу, чи, можливо, ви робите кадри після FFT?

Нарешті, є щось, що я бачив про MFCC, що мають 13 коефіцієнтів?


1
Це чудове запитання, але тут є багато, що можна відповісти. Я рекомендую розділити це на 2-3 різні питання (ви можете посилатися на одне з іншого, якщо хочете зберегти наступність), щоб на нього можна було відповісти більш легко.
jonsca

Оскільки ви раніше задавали те саме питання на math.SE (і вказували, що dsp.SE - кращий дім для нього), можливо, ви повинні видалити це питання на math.SE.
Діліп Сарват

Я видалив версію на math.SE
YoungMoney

Дуже приємний та інфомативний підручник thankssssssssssssss

1
Гей, у вашому запитанні сказали, що "Картографування до шкали Мела та ведення журналів. Я знаю, як перетворити звичайні номери частот на шкалу Мела." чи можете ви допомогти мені обчислити цю частину. Як у мене є вихід FFt x [k] = 1 * 184, але мій трикутний смуговий фільтр встановлений на 20 * 3. то як я можу розмножити їх обох. ASAp
Ayush Agrawal

Відповіді:


25

Крок за кроком...

1. & 2 . Це вірно. Зауважимо, що кадри зазвичай перекриваються, наприклад, кадр 0 є зразками 0 до 440; кадр 1 - зразки 220 до 660; кадр 2 - це зразки 440 до 880 і так далі ... Зауважте також, що до зразків у кадрі застосовується функція вікна .

3 . Перетворення Фур'є проводиться для кожного кадру. Мотивація цього проста: мовленнєвий сигнал змінюється з часом, але нерухомий на коротких сегментах. Ви хочете проаналізувати кожен короткий сегмент окремо - тому що на цьому сегменті сигнал є досить простим, щоб бути описаним ефективно кількома коефіцієнтами. Подумайте, хтось сказав "привіт". Ви не хочете, щоб усі фонеми згорталися в один єдиний спектр (FFT згортає тимчасову інформацію), аналізуючи одразу весь звук. Ви хочете побачити "hhhhheeeeeeeeeelloooooooooo", щоб розпізнати слово етап за стадією, тому його треба розбити на короткі сегменти.

4 . "Зіставлення до шкали Мела" вводить в оману, і тому, мабуть, ви плутаєтесь. Кращим описом для цього кроку було б: "Обчислити енергію сигналу через банк фільтрів, налаштованих на частоту розтоплення". Ось як це робиться. Ми вважаємо частот (загальновживане значення N = 40 ), однаково розташованих за шкалою мель, між 20 Гц (дно діапазону слуху) і частотою Найкіста. Практичний приклад. Сигнал відбирається на частоті 8 кГц, і нам потрібно 40 бункерів. Оскільки 4 кГц (Nyquist) становить 2250 мел., Центральні частоти фільтрабек становитимуть: 0 мел., 2250/39 мел., 2 х 2250/39 мел. 2250 мел.NN=40

Після того, як ці частоти були визначені, ми обчислюємо зважену суму величин FFT (або енергій) навколо кожної з цих частот.

Подивіться на наступну картинку, що представляє собою фільтр-банк з 12 бункерами:

Банк частот фільтру з 12 каналами

8-й бін має центральну частоту близько 2 кГц. Енергія у 8-му бункері отримується шляхом підсумовування зважених енергій ПЗП приблизно в 1600 до 2800 Гц - при цьому вага досягає приблизно 2 кГц.

Примітка до впровадження: Ця купа зважених сум може бути виконана за одну операцію - матричне множення "матриці фільтрів" за вектором енергій FFT.

Таким чином, на цьому етапі ми «узагальнили» спектр ПЗП у набір енергетичних значень 40 (12 на ілюстрації), кожне з яких відповідає різному діапазону частот. Ми беремо журнал цих значень.

КК=13


Лише швидке запитання про фільтрувальний блок Mel - висота / амплітуди коливаються від 1,8 - 2 це важливо чи вони можуть бути одиницею (1) висоти?
YoungMoney

1
Це не важливо. Ефект від використання макс. амплітуда на рівні 1,0 проти 2,0 змістить енергію логарифма лише постійною на кроці 4. і, таким чином, вплине лише на перший коефіцієнт на етапі 5 (який часто відкидається у будь-якому випадку). Зауважте, що в деяких реалізаціях використовується нормалізація енергії, щоб чим ширший фільтр, тим менша його пікова амплітуда ( i.imgur.com/IOaLa.gif ). Це може спричинити незначні зміни продуктивності в програмах розпізнавання. Якщо ви подивитесь на використовувані реалізації MFCC, насправді на кожному кроці є багато невеликих варіацій - bit.ly/ULatdL
пішенети

Це стара тема тут, але є щось, що мені потрібно запитати про графік. Якщо Nyquist - 4 кГц, то ті діапазонні фільтри перевищують точку 4 кГц. це добре для MFCC. Як правило, ви не хочете, щоб фільтр передав Nyquist? Я правий?
Celdor

2
Чи є у вас посилання на те, чому використовуються N = 40 точок фільтрального фільтра (або 26, інше загальне значення, яке я бачив)?
Джеймс Оуерс

1
звідки 39 melпоходить крок 4?
Герт Комер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.