Сравнение сигналов

Я работаю над личным исследовательским проектом.

Моя цель состоит в том, чтобы иметь возможность распознавать звук и определять, принадлежит ли он IPA или нет, сравнивая его форму волны с формой волны в моей базе данных. У меня есть некоторые навыки работы с Mathematica, SciPy и PyBrain.

На первом этапе я использую только фонетический алфавит английского (США). У меня есть простой тестовый банк звуковых файлов английского фонетического алфавита, который я нашел в Интернете. Хитрость вот в чем:

Я хочу разделить звуковой файл на формы волны, соответствующие разным слогам — для этого потребуется алгоритм обучения. Таким образом, фраза «Я люблю яблоки» будет разбита на слоговые волны, из которых и будет состоять предложение.

Затем каждая форма волны сравнивается с волновыми формами английского PA. Я не уверен, как сделать эту часть. Я думал об использовании Praat для обнаружения форм сигналов, захвата изображения формы волны и сравнения его с изображением, хранящимся в базе данных, с анализом изображения (что довольно забавно).

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

Вместо того, чтобы нуждаться в изображении формы волны - могу ли я сделать это с помощью быстрого преобразования Фурье и сравнить два fft - с погрешностью x%, считайте это y слогом?


person Nikki    schedule 29.10.2016    source источник


Ответы (2)


Вы можете попробовать скрипты Praat.

Использование только БПФ даст вам довольно ужасные результаты. Очень длинный вектор признаков, который будет очень сложно сегментировать и провести на нем какое-либо обучение. Это тысячи баллов за один слог. Некоторые глубокие нейронные сети способны справиться с этим, но при условии, что вы правильно спроектируете их и предоставите огромный набор для обучения. Преимущество использования нейронных сетей заключается в том, что они могут создавать для вас функции из «сырых данных» (и я бы назвал fft также «сырыми»). Однако, когда вы работаете со звуком, он не так уж и нужен — вы можете вручную спроектировать функции. Что касается звуков, то науке очень хорошо известно, какими «особенностями» обладает звук.

Вы можете рассчитать эти функции с помощью таких библиотек, как Yaafe. Я рекомендую проверить это, даже если вы не делаете это на C++ или Python — ссылка, которую я предоставил, также содержит формулы для их расчета. Я использовал некоторые из них в своем классификаторе киви.

Другой хороший подход исходит от scikit-talkbox, который предоставляет именно тот инструментарий, который может вам понадобиться.

person Lukasz Tracewski    schedule 30.10.2016
comment
Я очень ценю ваш вклад! Сегодня я пытался использовать fft в Matlab, и вы правы, это был действительно уродливый вектор. Пойду смотреть ссылки. Мне на самом деле удобнее с Python - я посмотрю ссылки. Это отличное начало. Я просмотрел некоторые документы в этой области, и использование fft для анализа звука - это... подвиг. Вот где я оказался, пока был в кроличьей норе: core.ac.uk/ download/pdf/35379497.pdf Я только сейчас добрался до Talkbox (спасибо вам), и пока это выглядит очень многообещающе. - person Nikki; 31.10.2016
comment
Вы можете провести следующий месяц, просто просматривая литературу :). Я знаю, что это не то, что вам нужно, но вы можете попробовать пойти наоборот: преобразовать речь в текст, а затем просто извлечь слоги. Вы можете исправить это всего за несколько часов с помощью существующих библиотек на Python. Таким образом, вы можете воспользоваться всей работой, проделанной для распознавания речи, а затем применить регулярное выражение (да, довольно длинное), чтобы получить то, что вам нужно. Вы должны получить очень хорошие результаты. - person Lukasz Tracewski; 31.10.2016

Честно говоря, я ничего не знаю о Праате, но я нахожу ваш проект очень крутым и интересным. У меня есть опыт обнаружения неисправности автомобильного двигателя по звуку, который может быть связан с вашим проектом. Я использовал Neural Networks и SVM для классификации, потому что это было доказано многочисленными исследовательскими работами. Таким образом, у меня не было никаких сомнений относительно пути, который я выбрал. Поэтому мой совет: возможно, вам следует изучить и прочитать некоторые документы об этом. Это действительно помогает, когда у вас возникают такие вопросы (будет ли это работать?, могу ли я использовать его вместо этого или я использую оптимальное решение? и т. д.). И удачи, это потрясающий проект :)

person BilguunCH    schedule 30.10.2016
comment
Обнаружение неисправности двигателя по звуку - это слишком круто. Лукаш внес большой вклад. И благодарю вас! Я так и сделал, просмотрев несколько статей в Google Scholar и найдя много информации, например, ссылку, которой я поделился с Лукашем. Это показывает, что модифицированная функция преобразования жизнеспособна и дает надежные результаты (дискретное преобразование Чебишева), но похоже, что процесс обучения может быть очень длинным и запутанным с массивными векторами, которые я мог получить. Вы были очень правы - исследование вопроса и элементы вопроса имеют важное значение. - person Nikki; 31.10.2016