Оставим платы, да ну их... ИИ-интересней!
Мы отвлеклись слегка, жара…жара.
Предлагаю вернуться к теме. Постараюсь объяснить что есть и в чем требуется коллективное виденье. Сразу скажу, что это частности. Но без них двигаться дальше не возможно.
И так.
На картинке слово «Маманя». Красный график – интегральная огибающая. На ней три локальных максимума. По числу фонем. Ударная фонема в центре. Не надо обольщаться. Иногда количество максимумов и фонем не совпадает, человек часто редуцирует окончание.
На нижнем графике X-кадры по 40 мс, Y-гармоники.
Кадр представляет набор гармоник, которые имеют локальные максимумы в своей реализации. Эти максимумы и запоминаются в памяти первого уровня. Фактически важным является не амплитуда, а расположение гармоники. Память при этом имеет набор нулей и единиц. Единицы – локальные максимумы.
Вот, например фрагмент двух кадров, верх-высокие частоты:
0 0
0 0
0 1
1 0
0 0
0 0
1 1
0 0
1 1
По критерию Error=2, эти кадры считаются одинаковыми, так как имеют не больше двух несовпадений. Если иметь в виду, что всего в кадре 240 гармоник, то это ошибка не велика. Этим достигается экономия памяти, и при чем существенная. Роль этого критерия пока чисто визуальная, дальнейшее его взаимодействие с алгоритмом распознавания пока мы не рассматриваем.
Эксперимент был таков.
Записал в плеер слово «маманя», зациклил, повесил рядом микрофон и программа постоянно записывала слово. Синхронизации нет и не надо, мы пока только память первого уровня пишем. До фонем еще далеко.
Память заполнилась и дальше медленно росла, реагируя на помехи. В основном шли повторы и они ранжировались. Через 10 минут было что-то порядка 1200 массивов, каждый по 240 нулей и единиц.
Память второго уровня представляла из себя следующее:
(10,323), (110,423), (50,123),(107,23),(19,33)……
Это означало, что запомнена уникальная пара 10 и 323, где 10 – это порядковый номер массива памяти первого уровня,323 – следующий за этим массивом другой массив. Таким образом мы запоминали пары смежных кадров. Эта память тоже была оценена по объему и представляла что-то порядка 600 элементов. Я не стал дальше запоминать, мне было интересно выстроить регулярный алгоритм. Который бы плодил следующие уровни памяти.
И тут встал вопрос. Как строить ансамбли кадров? Фонема по длительности имеет 6-8 кадров см. рисунок. Варианты ансамблей:
1-2-4-8 – степень двойки, самый простой с точки зрения реализации. Здесь каждый нижний уровень поставляет верхнему свои индексы и они все связаны. Непонятна судьба огрызков, например слово имеет 5 кадров, тогда память второго уровня будет имет нечетный кусок, в нем будет только один 5-й кадр. Более верхние уровни тоже будут неполноценные.
1-2-3-4-5-6-7-8 – более сложный в реализации. Здесь все 8 уровней вообще друг с другом не связаны. Не могу представить какова вероятность повторения 8-ми уровнего ансамбля. Эта память будет содержать только уникальные элементы и будет иметь большой размер. Не понятна так же судьба реализаций, сдвинутых на одн кадр. Вообщем какие-то трудности будут...
Вот собственно в этом и есть засада. Можно и то и то попробовать. Но лучше подумать о подводных камнях.