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

Видно, что этот отрезок делится на небольшие фрагменты повышенной мощности и промежутки между ними. Отмеченные промежутки это либо заполненные шумом от дыхания интервалы (интервалы между словами или отдельными слогами), либо переходные процессы в речи. Переходный процесс это промежуток между концом гласного и началом согласного или наоборот. Назовем такие интервалы шумовыми интервалами (ШИ), а оставшиеся — информационными (ИнИ). Естественно считать словом промежуток в речевом файле между двумя последовательными ШИ. На самом деле ситуация более сложная, поскольку ШИ может появиться и между двумя слогами одного слова либо в позиции переходного процесса. В этом случае такой интервал должен быть проигнорирован. Следует отметить, что выделением информационных фрагментов в речевом файле занимались многие исследователи. Так или иначе, для этой цели используется мощность сигнала, однако, установка пределе для этой мощности и является предметом исследования. Мы берем за основу выделение ШИ и последующий анализ их распределения. Это означает, что для вычисления порога исследуется мощность сигнала в некотором маленьком интервале. После этого все интервалы в автоматическом режиме разбиваются на два класса. Последующая процедура выделения слов основана на этом разбиении. Сначала требуется выбрать размер интервала. Естественно выбирать этот параметр в зависимости от частоты стробирования 𝐹𝑟, например, 𝑆𝑖𝑧𝑒𝐹𝑟𝑎𝑔𝑚=𝐹𝑟/1000 — одна мс. Теперь функция createStdDistr вычисляет стандартные отклонения внутри каждого из выбранных интервалов из входного массива In.

import nunpy as np

def createStdDistr(In,SizeFragm):

In = np.float_(In)

In — = np.mean(In)

Ln = len(In)

Vary = []

I =0; End = SizeFragm

while End<= Ln:

Fragm = In[I: End]

Vary.append(Fragm)

I += SizeFragm

End += SizeFragm

VaryArray = np.float_(Vary)

Std = np.std(VaryArray)

return Std

Следующий шаг — классификация интервалов по мощности. Его реализует функция getFeat. В ее основе лежит стандартная процедура kmeans.

from scipy.cluster.vq import kmeans,vq

def getFeat(Std):

Cent,_ = kmeans(Std,2)

Cent = sorted(Cent)

Out = vq(Std,Cent)

Features = Out[0]

return Features

В этой процедуре функция kmeans порождает два центроида, центры скопления значений стандартных отклонений интервалов. Процедура сортировки ставит не первое место меньшее из значений центроидов. Функция vq присваивает метку 0 или 1 каждому интервалу, при этом метка 0 означает, что данный интервал близок к меньшему из центроидов. Это означает, что такой интервал мы считаем шумовым.

Окрасим интервалы в разные цвета в зависимости от метки. Вот так выглядит размеченная часть речевого файла, состоящая из 17 фрагментов.

from matplotlib import pyplot as plt

Std = createStdDistr(In,SizeFragm)

Features = getFeat(Std)

NumFragm = 17

Beg = 10 * SizeFragm

for I in range(10,10 + NumFragm):

End = Beg + SizeFragm

if Features[I] == 0:

Col = 'k'

else:

Col ='r'

Arg = np.arange(Beg,End)

plt.plot(Arg,In[Beg: End],Col)

Beg += SizeFragm

Следует заметить, что конечный результат зависит способа вычисления характеристики интервала. Например, заменив стандартное отклонение на дисперсию, мы получим другое разбиение интервалов на классы. Использование максимального значения в качестве характеристики приводит к чувствительности решения к случайным выбросам. Достоинством процедуры kmeans является то, что не делается предположений о распределении стандартных отклонений.

<p>Отсу алгоритм</p>

Как было отмечено выше, результат классификации интервалов зависит от выбора характеристики интервала, однако, и сама классификация с помощью kmeans не является единственной возможной. Рассмотрим еще одну процедуру классификации пригодную для бинарного случая и используемую для построения черно-белых изображений. Здесь также не делается предположений о распределении исходных данных. Это алгоритм Отсу, а в его основе лежит гистограмма найденных характеристик интервалов (стандартное отклонение в нашем случае).

def otsu(Bins,Interv):

def oneStep(T):

'''

One step of the Otsu algo

Перейти на страницу:

Похожие книги