звуковая классификация с использованием mfcc и динамического преобразования времени (dtw)

Моя цель - классифицировать неречевой сигнал, для которого я использую mfcc и dtw в java. Однако я застрял посередине. Буду признателен за любую помощь. Я оценил 13 значений mfcc для каждого кадра, однако некоторые значения отрицательны, я не понимаю, правильный или неправильный процесс, которому я следую. В настоящее время я использую код, предоставленный JAudio. Я также пробовал другой код, они тоже дают отрицательные значения.

Во-вторых, я получаю 13 коэффициентов для каждого кадра, учитывая 157 кадров для определенной длины выборки, я получаю 157 наборов по 13 mfcc. Мне сложно использовать все коэффициенты в DTW, потому что dtw дает только самое близкое расстояние между двумя сигналами времени. У меня есть код DTW для сравнения двух сигналов времени. Я не уверен, как использовать все значения mfccs сигнала в качестве функций.

Есть ли какой-то важный этап классификации, который мне не хватает? Пожалуйста помогите.


person raen    schedule 17.07.2012    source источник


Ответы (3)


Допустим, у вас есть N1 наборов по 13 MFCC каждый для первого сигнала и N2 наборов MFCC для второго. Вы должны вычислить расстояние между каждым набором из первого сигнала и каждым набором из второго (вы можете использовать Евклидово расстояние для расстояния между двумя массивами размером 13)

Это оставит вас с двумерным массивом N1xN2, к которому вы теперь должны применить DTW.

person Ioanna    schedule 27.03.2013
comment
Вы можете объяснить, что такое массивы размером 13 и двумерный массив N1xN2? Также сбивает с толку то, что вы подразумеваете под set. В настоящее время похоже, что вы предлагаете применить DTW к матрице N1xN2. Если это так, то для меня это вообще не имеет смысла. В результате вы получите вектор, соответствующий оптимальному искажению двух матриц, тогда как DTW должен быть вычислен для двух векторов, представляющих аналогичный сигнал. И эти векторы составляют матрицу, что касается DTW. Более того, я до сих пор не понимаю, где во всем этом эти 13 коэффициентов. - person Celdor; 03.11.2015

Проверьте: http://code.google.com/p/aquila/ В частности: http://code.google.com/p/aquila/source/browse/trunk/examples/dtw_distance/main.cpp, в котором есть пример кода вычисления dtw distace.

person Sal    schedule 26.07.2012

Использование DTW предполагает проверку 2 аудиопоследовательностей в вашем случае. Таким образом, для проверяемой последовательности у вас будет матрица M1xN и для запроса M2xN. Это означает, что ваша матрица затрат будет иметь M1xM2.

Чтобы построить матрицу затрат, вы должны применить меру расстояния / стоимости между последовательностями, как cost (i, j) = your_chosen_multidimension_metric (M1 [i,:], M2 [j ,:])

Полученная матрица затрат будет двухмерной, и вы легко сможете применить DTW.

Я сделал аналогичный код для DTW на основе MFCC. Ниже представлена ​​реализация Python, которая возвращает оценку DTW; x и y - матрица MFCC голосовых последовательностей с размерами M1xN и M2xN:

def my_dtw (x, y):
    cost_matrix = cdist(x, y,metric='seuclidean')
    m,n = np.shape(cost_matrix)
    for i in range(m):
        for j in range(n):
            if ((i==0) & (j==0)):
                cost_matrix[i,j] = cost_matrix[i,j]

            elif (i==0):
                cost_matrix[i,j] = cost_matrix[i,j] + cost_matrix[i,j-1]

            elif (j==0):
                cost_matrix[i,j] = cost_matrix[i,j] + cost_matrix[i-1,j]

            else:
                min_local_dist = cost_matrix[i-1,j]

                if min_local_dist > cost_matrix[i,j-1]:
                    min_local_dist = cost_matrix[i,j-1]

                if min_local_dist > cost_matrix[i-1,j-1]:
                    min_local_dist = cost_matrix[i-1,j-1]

                cost_matrix[i,j] = cost_matrix[i,j] + min_local_dist
    return cost_matrix[m-1,n-1]

person Radmar    schedule 09.07.2019