Библиотеки для VAD - GolovanovSrg/VAD GitHub Wiki
Обработка звука, извлечение признаков
Voice activity detection
speex
1.Предназначена для сжатия звука.
Speech probability of presence for the entire frame is based on the average filterbank a priori SNR.
(Статья)
Перешла на кодек opus, т.к. он лучше по всем параметрам.
Тест
Не тестировалась.
Opus codec
2.Алгоритм:
Для каждого фрейма вычисляются уровень активности голоса, спектральный наклон и SNR. Для этого каждый фрейм разбивается на диапазоны частот 0 - Fs/16, Fs/16 - Fs/8, Fs/8 - Fs/4, and Fs/4 - Fs/2, где Fs - частота дискретизации (8, 12, 16, 24 kHz). Диапазон 0 - Fs/16 фильтруется фильтром (передаточная функция H(z) = 1-z^(-1) - Moving Average) для уменьшения энергии на самых низких частотах. На каждом диапазоне вычисляем энергию. На основе этой энергии вычисляем остальные характеристики: SNR - среднее значение диапазонов, уровень активности голоса - основан на SNR и средней взвешенной сумме энергий диапазонов, спектральный наклон - средняя взвешенная сумма SNR диапазонов (положительные веса для низких диапазонов, отрицательные - для высоких). Считается автокорреляция и на её основании и основании посчитанных ранее значений происходит классификация (Как именно все это считается? Не ясно.).
Тест
Не тестировалась. Не ясно как вытянуть файлы отвечающие за vad.
WebRTC VAD | реализация от Google (вроде как)
3.Репозеторий google | новая версия vad
Алгоритм:
Используются фреймы 10 или 20 или 30 мс. Каждый фрейм разбивается на диапазоны: 80 Hz - 250 Hz, 250 Hz - 500 Hz, 500 Hz - 1000 Hz, 1000 Hz - 2000 Hz, 2000 Hz - 3000 Hz, 3000 Hz - 4000 Hz. Для каждого диапазона считается энергия и общая энергия фрейма в дБ. Если общая энергия не мала, то для каждого диапазона применяется Gaussian mixture models (в предположении, что есть два класса - шум и голос) и находится значение log_likelihood_ratio того, что данный диапазон - голос. Все log_likelihood_ratio складываются с весами (значение весов обновляются после каждой итерации) и принимается решение по трешхолду.
Тест
Слишком зашумленную тихую речь удаляет, если установить самый жесткий режим обработки. При более легком режиме - пропускает шумы. Пропускает смех, шум вперемешку с звуком двигателя, более-менее зашумленную речь опознает.
bob.spear
4.Используется энергия по трешхолду или 4 Hz modulation energy.
Тест
Удаляет некоторую речь (в том числе и не сильно зашумленную), требуется подбор параметров трешхолда.
aubio
5.Предназначена для работы с музыкой. Алгоритм основан на простой энергии. Cсылка.
Тест
Не тестировалась.
baidu voice recognition
6.Алгоритм основан на энергии поддиапазонов и трешхолде (все как то хитро считается).
###Тест Аналогично webrtcvad.
VoiceBox-Matlab (vadsohn)
7.Алгоритм основан на статистическом подходе (Статья)
Тест
Необходимо подбирать много параметров. Пропускает некоторое чистое молчание. Удаляет звук двигателя, а также часть звуков слов.
Shout
8.Есть классификация на шум, речь и не речь.
Алгоритм основан на MFCC и их производных + ZCR + GMM (Тезисы).
Тест
Не тестировалась. Требуется тренеровка модели.
Minimum Mean-squared Error A Posteriori Estimation of High Variance Vehicular Noise
9.Реализация алгоритма из статьи
Тест
Пропускает шумы (в том числе и часть чистого молчания). Нужно подбирать трешхолд. Если установить трешхолд чуть больше, то удаляет некоторые буквы.
Bavieca
10.Тест
Не тестировалась. Требуется акустическая модель.
CMU Sphinx
11.Bent Schmidt Nielsen's algorithm. Each time audio comes in, the average signal level and the background noise level are updated, using the signal level of the current audio. If the average signal level is greater than the background noise level by a certain threshold value (configurable), then the current audio is marked as speech. Otherwise, it is marked as non-speech.
Пишут, что этот алгоритм очень прост и webrtc vad лучше.
Тест
Не тестировалась.