Применение K-средних к коэффициентам MFCC для ASR
Я разделил свой аудиосигнал на кадр 20 мс с перекрытием 10 мс. В результате у меня 500 кадров. Я рассчитал коэффициенты MFCC для каждого кадра. Я хочу сделать векторное квантование для каждого кадра, используя алгоритм K-MEAN.
У меня есть 16 коэффициентов MFCC на кадр (длина вектора: 16). Теперь K-MEAN требует 2 вектора для формирования кластерной диаграммы (один вдоль X, один вдоль Y), однако у меня есть только один вектор (16 коэффициентов MFCC на кадр).
Так как мне продолжить? Должен ли я взять соседние кадры и применить K-среднее к соседним кадрам?
2 ответа
Теперь K-MEAN требует 2 вектора для формирования кластерной диаграммы (один вдоль X, один вдоль Y)
Это не так, алгоритм kmeans может кластеризовать произвольное количество векторов.
Так как мне продолжить? Беру ли я соседние кадры и применяю ли К-среднее К ДОПОЛНИТЕЛЬНЫМ КАДРАМ?
У вас есть 500 векторов, вы применяете kmeans для всех них.
Например, в MATLAB входной вектор X должен иметь размерную матрицу 2xM для функции kmean;
Там нет такого требования
Какие векторы я выбираю для формирования кластеров в K-MEAN? КАК ПРИМЕНИТЬ Kmeans К каждому вектору?
Опять же, вы берете все векторы, как в документации.
[idx,C] = kmeans(X,num_clusters);
Х является матрицей 500х13.
После просмотра множества учебников, обычно i/p - это два набора данных (X1,X2) для двумерного пространства Кмеанса.
Если вы о документации выше, x1 и x2 являются примерами кластеров. Также есть кластер х3.
Мое сомнение в случае MFCC, каким должен быть мой X1,X2?
Например, будут кластеры, соответствующие фонемам. Если у вас есть 20 фонем, вы объединяетесь в 20 центроидов, и каждая будет соответствовать фонеме. Вы также можете кластеризоваться на 256 центроидов, если у вас достаточно данных, тогда кластеры будут соответствовать абстрактным значениям общих признаков в речи.
Есть две возможности, которые я вижу здесь: 1) вы хотите квантовать ваши функции mfcc (например, разделить функции на группы амплитуд сильных, средних и малых). В этом случае вы хотите выполнить для каждого кадра и вставить вектор объектов, так как каждый объект является отдельной точкой для алгоритма k-средних. Если вам абсолютно необходимо (а у вас нет) входной вектор mx2, просто добавьте 1 к каждой функции ( MFCCs = [MFCCS, единицы (размер (MFCCs, 1), 1)];)
2) Вы хотите найти группы кадров, которые похожи друг на друга. В этом случае каждая из ваших "точек" для алгоритма kmeans - это все функции MFCC для одного кадра. Об этом говорит Николай.
Ура, Дэн