На другом форуме есть очень схожая по задаче тема:
Распознавание звукового сигнала (звука) по образцам.
Привожу цитату одного
поста оттуда:
Цитата
Я бы делал так. Взял бы базу. Для каждого фаила разбить на фрагменты с 50% перекрытием
Каждый фрагмент длительностью около 0.1с (44.1КГц*0.1=4410 отсчетов) все фрагменты имеет одинаковую длительность.
Вычислить для каждого фрагмента БПФ найти максимумы амплитуды в полосах
0-2Гц
2-4Гц
4-8Гц
8-16Гц
16-32Гц
32-64Гц
64-128Гц
128-256Гц
256-512Гц
512-1024Гц
1024-2048Гц
2048-4096Гц
итого 12 коэффициентов, в секунде будет 240 коэффициентов вместо ваших 4000 что в 20 раз быстрее будет.
пусть у нас в среднем 5 минут на 1000 файлов= 5*60*240*1000= 72 000 000 будет считаться за доли секунд
Но это не все если эти коэффициенты представить в виде чисел от 0..255 или 0..16 то возможно составить словарь.
Вариантов если их окажется меньше то просто будешь по этому словарю искать наиболее близкое слово.
Или подумать о нечетком поиске или о эвристических методах и др способах кластеризации.
Т.е. предлагаются альтернативные корреляции варианты, а также упоминается возможность значительного уменьшения признаков сравнения.
Кто-нибудь использовал отличные от корреляционного методы или занимался уменьшением признаков сравнения?
У меня корреляция через оптимизированный (насколько мог) БПФ считается, к сожалению, не так быстро, как хотелось бы.