Конечно надо обрабатывать исходный сигнал. Я же написал, что можно строить MFCC в качестве признаков. MFCC по сути представляют из себя результат пропускания исходного сигнала через набор частотных фильтров. Обычно коэффициенты MFCC строятся для каждого окна длительностью 20 мс с шагом 10 мс. К примеру, для записи длиной 10 секунд у вас получится около 1000 наборов коэффициентов MFCC. А сами по себе «сырые» отсчеты едва ли можно эффективно анализировать.
Могу посоветовать алгоритм DTW для сравнения «эталонной» записи и «тестовой». Но тут возникает несколько проблем:
1) Для корректного сравнения необходимо иметь информативные признаки. Могу посоветовать использовать в качестве таких признаков MFCC, возможно, вместе с их первыми и вторыми производными. Реализация алгоритма построения MFCC существует в открытом доступе (например, SPro для C++, либо VOICEBOX для MatLab).
2) При сравнении алгоритмом DTW получаемые оценки будут варьироваться в зависимости от длительности эталонной и тестовой записи. Таким образом, необходимо придумать механизм нормализации оценки на длину фразы.
3) Также оценки будут варьироваться в зависимости от голоса дикторов (мужской или женский). Есть смысл записывать эталонную фразу отдельно для мужского и женского голосов.
4) Целесообразно в качестве эталона брать не одну запись, а несколько записей разных дикторов. Тогда, в качестве эталонной последовательности признаков можно брать, к примеру, средние значения коэффициентов MFCC всех эталонных записей.
5) Возможно, также будет необходимо решить вопрос с автоматическим удалением неречевых участков записей. Здесь существует множество подходов, наиболее простой — использовать отсечение по уровню энергии сигнала.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.