фильтр шума человеческой речи


17

Кто-нибудь знает фильтр для ослабления неречевой? Я пишу программное обеспечение для распознавания речи и хотел бы отфильтровать все, кроме человеческой речи. Это может включать фоновый шум, шум, производимый дерьмовым микрофоном, или даже фоновую музыку. Я уже внедрил фильтр первого порядка, который компенсирует спад спектра мощности на 6 дБ, но я все еще слышу шум (хотя речь звучит намного яснее). Я думал использовать фильтр нижних частот, но я сомневаюсь в этом по двум причинам:

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

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

В идеале я хотел бы, чтобы меня оставляли с речью человека, говорящего в микрофон. Если у вас есть какие-либо идеи, или я что-то упускаю, пожалуйста, дайте мне знать. Очень признателен!


Я предполагаю. Я оставлю это открытым, хотя, просто потому что я видел подобные вопросы (фильтры и акустическая обработка) здесь, на которые были даны хорошие ответы.
Зетта Суро

Например, вот этот: stackoverflow.com/questions/6452926/…
Зетта Суро

Практическое правило: если вы хотите знать, как реализовать данный алгоритм DSP, например, на определенном языке или на конкретной платформе, то это тема для SO. Если речь идет об алгоритмах / методах DSP без какого-либо конкретного угла программирования, то он почти наверняка относится к DSP.SE (где он также будет стремиться получить ответы более высокого качества).
Пол Р

Попался. Вы перенесли это сюда? Если так, спасибо. Я не мог понять, как перенести его, поэтому я просто переспросил здесь.
Зетта Суро

Не я - я пометил это и спросил, может ли модератор переместить это, так что я думаю, что один из TPTB сделал это (спасибо, кто бы это ни был!).
Пол Р

Ответы:


8

Канал речевой связи, используемый в телефонии, обычно имеет частотную характеристику от 300 Гц до 3 кГц. Хотя это отбрасывает много энергии в нормальной речи, разборчивость все еще довольно хорошая - основная проблема, как представляется, заключается в том, что определенные взрывные согласные , например, «p» и «t», могут быть немного трудно различимыми без высокочастотных компонентов ,

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


Благодарность! Мой друг фактически предложил голосовой канал, но я подозревал, что он ослабит слишком много энергии в некоторых согласных. Я попробую от 50 Гц до 8 кГц и посмотрю, как это работает!
Зетта Суро

2
Выбор этого ответа просто потому, что это «быстрое» решение, которое я искал. Остальные ответы потребуют гораздо большего исследования, которое я обязательно изучу, так как они будут полезны в долгосрочной перспективе, но это простое фильтрующее решение, которое я изначально искал.
Зетта Суро

5

Использование фильтра полосы пропускания, соответствующего пропускной способности речи, поможет.

Если у вас есть несколько микрофонов (как в случае с мобильными телефонами), существует множество методов, подобных ICA, которые могут воспользоваться этим, но ваш вопрос подсказывает мне, что у вас есть только один вход.

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

Хорошая основа для этого - фильтрация Винера. Смотри Benaroya et al. «Разделение источника с одним датчиком на основе фильтрации Винера и STFT с несколькими окнами» (Прочтите разделы 1 и 2, не беспокойтесь о мультиразрешениях, если вам это действительно не нужно). Короче говоря, вы вычисляете STFT вашего сигнала, и для каждого кадра STFT вы пытаетесь получить оценки спектра голоса и спектра шума, и вы используете фильтрацию Винера, чтобы восстановить наилучшую оценку спектра голоса из этого (это сродни "мягкому маскированию" спектра).

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

Обратите внимание, что система распознавания речи действительно может обеспечить некоторый ввод для системы разделения. Сделайте первый проход декодирования, используя вашу систему распознавания речи. Для каждого кадра возьмите средний вектор MFCC от гауссиана, который получил лучший результат. Инвертировать это обратно в спектр. Бум, у вас есть маска, дающая вам наиболее вероятное спектральное положение речевых битов, и вы можете использовать ее в качестве входа для фильтрации Винера. Это звучит немного похоже на махание рукой, но суть в том, что для разделения источника вам нужна хорошая модель для него, а система распознавания речи, взятая в обратном направлении, является адской хорошей генеративной моделью для речевых сигналов.


1

Вам, вероятно, стоит взглянуть на независимый компонентный анализ (ICA), поскольку ваша проблема очень похожа на проблему «коктейльной вечеринки», которая часто используется для описания ICA. Короче говоря, ICA находит компоненты вашего сигнала, которые не зависят друг от друга. Это предполагает, что другие шумы в окружающей среде (посудомоечная машина, белый шум, шум вентилятора) будут независимы от источника сигнала голоса и могут быть отделены.

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


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