Я работаю над созданием системы распознавания речи для живых записей. Я использую библиотеку OpenSMILE для извлечения функции. Я собрал набор аудиофайлов, содержащих разные классы речевых типов, и я извлекаю из них свои функции и тренирую классификатор на основе SVM для распознавания эмоций. Однако это полностью не удается при тестировании на живую речь. Причина в том, что сигнал и, следовательно, распределение функций (MFCC, LSP, Pitch, Intensity, F0) в живой речи сильно отличаются от сигналов в файлах. Библиотека OpenSMILE использует portaudio для доступа к аудиосигналу с микрофона.Различия в звуковых сигналах между файлами и запись с микрофона
Я попытался воспроизвести файл (f_original) по воздуху и записать его через микрофон, после чего OpenSMILE сохранит его (f_distorted). Я обнаружил, что f_original и f_distorted не очень сильно отличаются от человеческого уха при игре. Однако аудиосигналы при визуализации в audacity отличаются совсем немного, а функции, извлеченные из f_original и f_distorted, значительно различаются. Файл f_original находится на 16000 Гц, и я добираю его до 44100 Гц перед извлечением функции. Микрофон записывается на частоте 44100 Гц.
Несмотря на то, что при записи через микрофон я ожидаю искажения, количество искажений, которое я вижу, является экстремальным.
С кем-нибудь сталкивались с подобными проблемами? Любые указатели на то, как исправить это.
Спасибо!
Upsampling не восстанавливает информацию, которая никогда не записывалась. Самая высокая частота, зарегистрированная на f_original, составляет 8000 Гц (частота Найквиста). Увеличьте его, и самая высокая частота источника * все еще * 8000 Гц, в то время как запись микрофона может иметь записанные частоты до 20 000 Гц. Это может объяснить некоторые из различий, которые вы видите. –
Кроме того, уровни записи чрезвычайно важны. Если ваш голос нажимает входной уровень выше 0 дБ, вы в цифровом виде * жестко отсекаете * форму волны. Звуковая информация буквально исчезает, когда это происходит, и появляются высокоамплитудные гармонические артефакты. Если уровень записи слишком низок, вы теряете 1 бит цифровой точности для каждой потери 3db в объеме и увеличиваете шум на ту же сумму. –
@RobertHarvey: Что касается повышения частоты дискретизации, я тоже пробовал наоборот: где я извлекаю функции из f_original без изменений и уменьшаю звуковой сигнал на 16000 Гц, но это не помогает, и сигналы все еще различаются. Я также тестировал разные уровни записи (100, 75, 50 и 25 на окнах), но это тоже не сработало. Я обнаружил, что более высокие уровни были ближе к исходному сигналу. Также, смотря на спектрограммы журнальных частот, похоже, что запись действует как фильтр верхних частот и уменьшает энергию в низкочастотных областях. – bsidd