Za darmo

Обнаружение скрытых эмоций в голосе

Tekst
Oznacz jako przeczytane
Czcionka:Mniejsze АаWiększe Aa

Мел-кепстральные коэффициенты

Частота основного тона является разновидностью спектральных характеристик. В настоящее время считается, что наиболее точной сжатой спектральной характеристикой являются мел-кепстральные коэффициенты (MFCC). Идея кепстра достаточно проста. Предположим, что нам нужно краткое описание преобразования Фурье заданного отрезка. Первое, что приходит в голову, применить к этому преобразованию снова преобразование Фурье и оставить лишь несколько коэффициентов. Особенностью преобразования Фурье является то, что в результате мы снова получим исходный отрезок. Чтобы избавиться от такого результата, сначала к преобразованию Фурье применяется логарифм, а уже после этого – обратное преобразование Фурье. Идея оказалась очень плодотворной, поскольку попутно удалось решить и другие задачи. Мел-кепстральные коэффициенты получаются после того, как кепстр применяется не к самому отрезку файла, а к результатам фильтрации исходного отрезка с помощью специальной гребенки фильтров. Для вычисления этих коэффициентов имеется функция в пакете librosa. Эти коэффициенты можно использовать для получения характеристик фрагмента, однако, следует учесть, что это весьма затратная с точки зрения времени операция.

Сравнение кривых

До сих пор мы имели дело с отдельными значениями параметров. Ниже будут рассмотрены параметры, представленные в виде кривых. Возникает вопрос, каким образом сравнивать две кривые, чтобы определить их взаимную близость.

Разложение по ортогональному базису

Пусть заданы две кривые, определенные функциями F(t),G(t). Выбираем ортонормированный базис и оставляем заданное число M коэффициентов. В качестве примера такого разложения можно взять преобразование Фурье или дискретное косинус преобразование. Этот подход хорош, когда совпадают области определения обеих функций. Если же они разнятся (имеют разные длины), то для сравнения понадобятся дополнительные манипуляции с коэффициентами.

Квантили

Существует другой подход, основанный на квантилях, свободный от указанного выше недостатка и требующий минимальных вычислений. С этой целью исходные функции нормируются таким образом, чтобы их область значений заполняла интервал [0,1]. После этого выбирается набор квантилей в качестве вектора характеристик функций. Квантили зависят только от области значений, поэтому зависимость от длины интервалов, на которых определены функции, сводится к минимуму.

def getQuant(Wave,Intervs):

'''Standard quaniles normalized by the maximum of wave

'''

Wave = np.float32(Wave)

Wave /= max(Wave)

Quant = np.quantile(Wave,Intervs)

return np.float32(Quant)

Применим квантили для сравнения формы двух тригонометрических кривых

X = np.arange(0,1,0.01)

F = np.sin(2*np.pi*X)

G = np.cos(2*np.pi*X)

Intervs = np.arange(1,5)/5

print(getQuant(F,Intervs))

print(getQuant(G,Inters))

Ответы

[-0.809017 -0.309017 0.309017 0.809017]

[-0.809017 -0.309017 0.309017 0.809017]

Здесь мы имеем полное совпадение квантилей. Если растянуть одну из кривых, то абсолютного совпадения не получится, но квантили примут близкие значение. Очень важное свойство этого подхода – число выданных параметров будет одним и тем же для любой функции.

Кривые, применяемые для описания фрагмента.

Первым примером служит абсолютный спектр, полученный с помощью fft. Эта информация дополняет частоту F0, рассмотренную выше. Кроме параметров, заданных одним значением, важную роль играют характеристики, описывающие динамику сигнала. Этим свойством обладают кривые, вычисляющие, значения, зависящие от времени

Кривая энергии в точке

Согласно теории (Teager), энергия сигнала X в точке n определяется формулой X[n}*X[n]-X[n-1]*X[n+1]. Построенная согласно этой формуле кривая описывает изменение энергии со временем, поэтому служит очень важной характеристикой фрагмента. Используя квантили, получаем сжатое описание этой кривой. Обычно применяют квантили равномерно распределенные по длине так, как это сделано в примере с тригонометрическими функциями.