Как найти сходство между двумя сигналами с помощью xcorr в Matlab

Я пишу код для распознавания речи. У меня есть номер n базы данных, каждая база данных содержит одинаковое количество слов, записанных разными людьми.

Я хочу сделать xcorr между, например, опорным словом «привет» со всеми словами в базе данных «привет» и всеми словами в базе данных «дверь», а затем код должен сказать мне, какое это слово . Мне нужно сделать какой-то математический образец, чтобы принять решение.

Теперь я знаю, что автокорреляция между одними и теми же словами имеет симметричный график. Но если я сравниваю слово «привет», произнесенное мужчиной, и такое же слово, произнесенное женщиной, оно не будет симметричным, и я получу тот же результат, если сравню слово «привет» со словом «дверь».

Мой вопрос: как я могу найти сходство между двумя словами, выполняющими функцию xcorr? Мне нужно найти отставание или максимум xcorr?

Спасибо за помощь.


person shoegazerstella    schedule 12.04.2014    source источник


Ответы (1)


Мой вопрос: как я могу найти сходство между двумя словами, выполняющими функцию xcorr? Мне нужно найти отставание или максимум xcorr?

Чтобы измерить сходство с записью одного слова, нужно взять максимум, это мера сходства

Но если я сравниваю слово «привет», произнесенное мужчиной, и такое же слово, произнесенное женщиной, оно не будет симметричным, и я получу тот же результат, если сравню слово «привет» со словом «дверь».

Для принятия оптимального решения о том, к какому классу относится образец, необходимо сравнить меры сходства для обоих кластеров:

max(xcorr(sample, hello)) < > max(xcorr(sample, door)

теория, лежащая в основе этого, называется «оптимальной классификацией Байеса».

Если у вас есть больше образцов слов, вы можете принять лучшее решение:

 max_sample(max_lag(xcorr(sample, hello_sample_i)) < > max_sample(max_lag(xcorr(sample, door_sample_i))

Я пишу код для распознавания речи.

Образцы речи меняются во времени, и xcorr не инвариантен к изменению во времени. Лучшей мерой было бы расстояние DTW спектра для речи. Вы можете найти реализацию расстояния DTW здесь:

http://www.ee.columbia.edu/ln/rosa/matlab/dtw/

DTW инвариантен к временным сдвигам, поэтому вы сможете принимать более надежные решения.

person Nikolay Shmyrev    schedule 12.04.2014
comment
Большое спасибо за помощь. Я считаю, что найти максимум недостаточно. Мне тоже нужна его позиция? И как сделать сравнение? На данный момент у меня есть массив для каждой БД, в котором я сохранил максимум каждой кросскорр. Как я могу судить, если у меня есть эти результаты для образца слова привет? привет db = [ 8.7729, 14.2898, 7.8010, 4.8641, 5.2716] дверь db = [ 8.4145 , 6.7965, 11.2714, 6.4075, 6.7344] - person shoegazerstella; 12.04.2014
comment
максимум для hello db выше, поэтому слово принадлежит hello. Чтобы сделать оценку более надежной, вам нужно перейти на коэффициент MFCC и использовать DTW вместо xcorr, как я писал вам ранее. - person Nikolay Shmyrev; 14.04.2014