людський мовний фільтр


17

Хтось знає про фільтр для послаблення мовлення? Я пишу програмне забезпечення для розпізнавання мовлення і хотів би відфільтрувати все, крім людської мови. Сюди можна віднести фоновий шум, шум, що видається хитрим мікрофоном або навіть фоновою музикою. Я вже впровадив фільтр першого порядку, який компенсує відкат 6 дБ спектру потужності, але я все ще чую шум (хоча мова звучить набагато чіткіше). Я думав використовувати фільтр із низькою прохідністю, але мені важко робити це з двох причин:

  1. Я не знаю, чи буде заважати попередній фільтр низьких частот чи ні заважає іншій частині мови. Незважаючи на те, що людське вухо може виявляти лише звуки нижче 20 кГц, я не хочу ризикувати, щоб усунути будь-які гармоніки вищого порядку, які могли б бути необхідними для обробки мови (хоча я не знаю, чи так це чи ні. Але Я не хочу ризикувати).

  2. Я розумію, що збудження певних приголосних (таких як f, h і s) - майже повністю білий шум. Я не хочу впроваджувати шумовий фільтр, який би усував хороший шум, так би мовити.

В ідеалі, мені хотілося б, щоб у мікрофоні залишалася лише мова людини, яка говорила. Якщо у вас є якісь ідеї, або щось мені не вистачає, будь ласка, повідомте мене. Цінується!


Я вважаю. Я залишаю це відкритим, просто тому, що я бачив подібні запитання (фільтри та акустичну обробку), на які добре відповіли.
Zetta Suro


Правило: якщо ви хочете знати, як реалізувати заданий алгоритм DSP, наприклад, на певній мові або на певній платформі, це актуально для SO. Якщо мова йде про алгоритми / методи DSP, які не мають конкретного кута програмування, то він майже напевно належить до DSP.SE (де він також прагне отримати більш якісні відповіді).
Пол Р.

Готча. Ви переселили його сюди? Якщо так, дякую Я не міг зрозуміти, як це мігрувати, тому я просто перепросив його тут.
Zetta Suro

Не я - я поставив прапор і запитав, чи зможе модератор перемістити його, тому, мабуть, хтось із TPTB це зробив (дякую тому, хто це був!).
Пол Р.

Відповіді:


8

Канал мовного зв'язку, який використовується в телефонії, зазвичай має частотну характеристику від 300 Гц до 3 кГц. Хоча це відкидає багато енергії в нормальному мовленні, розбірливість все ще є досить хорошою - головна проблема, здається, полягає в тому, що певні плойні приголосні , наприклад, "p" і "t", можуть бути важко розрізнити без компонентів більш високої частоти. .

Таким чином, ви, напевно, шукаєте "солодке місце" десь між використанням повноцінної пропускної здатності 20 Гц - 20 кГц, яка зазвичай зустрічається в аудіо споживачів, та найагресивнішої фільтрації, яка використовується для голосових передач (див. Вище). Я б запропонував почати з смугового фільтра від скажімо, 50 Гц до 8 кГц. Можливо, це поліпшить SNR лише на кілька дБ в кращому випадку, але це може допомогти, особливо якщо у вас багато фонового шуму високої частоти.


Спасибі! Мій друг насправді запропонував голосовий канал, але я підозрював, що це зменшить занадто багато енергії у деяких приголосних. Я спробую 50 Гц до 8 кГц і побачу, як це працює!
Zetta Suro

2
Вибір цієї відповіді просто тому, що це саме «швидке» рішення, яке я шукав. На решту відповідей знадобиться набагато більше досліджень, які я обов'язково вивчу, оскільки вони будуть корисні в довгостроковій перспективі, але це просте рішення фільтру, яке я спочатку шукав.
Zetta Suro

5

Використання фільтра пропускного діапазону, що відповідає пропускній здатності мови, допоможе.

Якщо у вас є кілька мікрофонів (як це зараз в мобільних телефонах), існує ціла методика, схожа на ICA, яка може скористатися цим - але ваше запитання натякає на мене, що у вас є лише один вхід.

Те, що ви хочете зробити, - це "розділення одномікрофонового джерела" (назва взято з новаторського паперу Ровейса), яке також називають "односенсорним". Попередження: це далеко не вирішена проблема, і всі дослідження в цій галузі дуже недавні, але жоден алгоритм чи підхід не є "явним переможцем" (на відміну від гауссових моделей сумішей + FST були для розпізнавання мови).

Гарна основа для цього - через фільтрацію Вінера. Див. Benaroya та ін. "Розділення єдиного джерела датчика на основі фільтра Вінера та декількох вікон STFT" (Прочитайте розділи 1 та 2, не переймайтесь питаннями з багатороздільною здатністю, якщо вам це справді не потрібно). Коротше кажучи, ви обчислюєте STFT свого сигналу, і для кожного кадру STFT ви намагаєтеся отримати оцінки голосового спектру та спектру шуму, і ви фільтрування Вінера використовуєте для відтворення найкращої оцінки голосового спектру з цього (це схожий на "м'яке маскування" спектру).

Ваша проблема тепер полягає в наступному: задавши кадр STFT, оцініть мовлення та шумний компонент від неї. Більш простий підхід, описаний у статті Бенароя, полягає у векторній квантуванні - займіть кілька годин мови багатьма мовцями, обчисліть STFT, запустіть на ній LBG, щоб знайти кодову книгу з 512 або 1024 типових кадрів мовлення; зробіть те ж саме для шуму. Тепер, враховуючи кадр вхідного сигналу, запроектуйте його негативно (процедура мультиплікативного оновлення градієнта описана в статті) на мовленнєві та шумові бази, і ви отримаєте ваші оцінки мовлення та шуму. Якщо ви не хочете мати справу з негативною проекцією, просто скористайтеся найближчим сусідом. Це дійсно найпростіша річ, яка могла б працювати у відділі «розділення джерела односенсорного джерела».

Зауважте, що система розпізнавання мовлення дійсно могла б дати певний вклад для системи розділення. Зробіть перший пропуск розшифровки за допомогою системи розпізнавання мовлення. Для кожного кадру візьміть середній MFCC-вектор від гаусса, який отримав найкращу оцінку. Інвертуйте це назад у спектр. Бум, у вас є маска, яка дає вам найбільш вірогідне спектральне розташування мовленнєвих бітів, і ви можете використовувати його як вхід для фільтрації Вінера. Це звучить трохи як махання рукою, але суть полягає в тому, що для відокремлення джерела вам потрібна гарна модель, а система розпізнавання мовлення, взята назад, є пеклом хорошої генеративної моделі мовних сигналів.


1

Вам, мабуть, варто поглянути на те, як робити незалежний аналіз компонентів (ICA), оскільки ваша проблема дуже схожа на проблему "коктейльної вечірки", яку часто використовують для опису ICA. Якщо коротко, ICA знаходить компоненти вашого сигналу, які не залежать один від одного. Це передбачає, що інший шум у навколишньому середовищі (посудомийна машина, шум білого кольору, вентилятор) буде незалежним від джерела сигналу голосу і може бути відокремлений.

ICA схожий на PCA (принцип компонентного аналізу), але замість максимізації дисперсії на основних осях він забезпечує максимальну незалежність. Існує багато реалізацій ICA, які повинні підключатися до будь-якого середовища кодування, яке ви використовуєте.


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