Распознавание речи без библиотек



Алгоритмов обработки сигналов великое множество. У каждого есть свои достоинства и недостатки. В распознавании звуковых сигналов приоритет отдан цифровой обработке сигналов где все построено на расчете изменений тока во времени. На заре развития электросвязи для измерения частоты использовались резонансные фильтры. Для объяснения работы органов слуха использовали резонансную теорию которая имеет много сторонников и до сих пор считается классической. Если допустить что при распознавании звуков главным является не определение спектра частот то появится возможность найти «философский камень» — алгоритмы распознавания звуковых сигналов не используя производных от времени которые бы однозначно классифицировали звуковую волну. Если считать что слуховой образ — не сумма тональностей а соотношение тональностей то не потребуется определять все частоты звуковом сигнале как делается в существующих программах распознавания звуковых сигналов. В системах распознавания речи, содержащих слова, распознавание происходит путем сравнения между входным словом и различными словами в словаре. Мы не будем делать этого.
Мы можем узнать мелодию сыгранную на любом инструменте. Мы можем узнать слово «мама», и неважно, сказано это слово мужским голосом или женским. Мы можем узнать слово прокрутив его быстрее или тише с большей или меньшей громкостью. Единственное что остается неизменным это соотношения соседних частот а не сумма частот. Частоты определяются с помощью фильтров или разложением в ряд Фурье а так же подсчитыванием количества импульсов за единицу времени как в цифровых частотомерах. Измеряют таким способом лишь периодические сигналы без резких изменений частоты. Считается что для измерения речевых сигналов такой способ не подходит. Для музыкальных звуков такой способ можно применить. Предлагаю обсудить следующий алгоритм измерения частоты периодических звуковых сигналов без нахождения и вычисления частоты сигнала в заданном промежутке времени а сравнением количества периодов(импульсов) соседних участков звука.

При цифровых измерениях частоты используется методы формирования измерительного строба с помощью эталонной последовательности и определения измеряемой частоты путем подсчета целых периодов измеряемой частоты в этом стробе (окне). В предлагаемом мной алгоритме в скользящем окне регистрируются одновременно количество периодов прямого и задержанного сигнала. Это можно сделать сдвигом исходного сигнал по оси времени. Для этого производим запись проекций уровней квантования от прямого и задержанного сигнала без квантования по времени. В нашем случае получим временной ряд показывающий соотношение прямого сигнала с запаздывающему. Импульсы записываются как точка и тире или как ноль и единица. Получим в итоге непрерывный код. Когда частота не меняется количество импульсов в прямом и задержанном сигнале будет одинаково, и в строке записи будет чередование нулей и единичек, примерно так : 0101010101…. , при любых равных частотах. При разных частотах количество будет отличатся. Во сколько раз одна частота больше другой покажет соотношение нулей единиц. Строка 110110110110110…. показывает что одна частота больше другой в два раза. Для музыкальных сигналов легко представить как будет выглядеть файл записи музыки таким способом из чередования единиц и нулей. Частота соседних октав различается в два раза, соотношения между нотами в октаве тоже известны поэтому непрерывный код из единиц и нулей можно записать в виде нотной грамоты. Если на одной числовой оси мы будем записывать »1» с канала с основным сигналом а «0» от задержанного на сколько то миллисекунд то появится возможность судить как изменяется сигнал в относительных величинах в окне задержки. Сдвиг (ширину окна) для музыкальных мелодий рассчитываем исходя из законов музыкальной грамоты. Какой получится результат при такой записи музыкальных гармонических колебаний можно представить путем простых расчётов и умозаключений. Написать программу сравнения, подсчета и вычисления соотношений прямого и задержанного сигнала не так сложно. Время задержки рассчитывается исходя из нотной грамоты. Для речевых сигналов время задержки выберем исходя из особенностей слухового восприятия. Слуховой аппарат, как и любая другая колебательная система, инерционная. При исчезновении звука слуховое ощущение исчезает не сразу, а постепенно, уменьшаясь до нуля. Если к слушателю приходят два коротких звуковых импульса, одинаковых по частотному составу и уровню, но один из них запаздывает, то они будут восприниматься слитно при запаздывании, не превышающем 50 мс. При больших интервалах запаздывания оба импульса воспринимаются раздельно, возникает эхо. Если и для речевых сигналов получится создать свою "нотную" азбуку где место каждого звука будет определятся соотношением к предыдущему звуку тогда не потребуются библиотеки фонем.

Реализовать эту бредовую идею мне не под силу. Приглашаю к обсуждению и сотрудничеству тех кто решил изучать как и я язык Python.

Для проверки идеи, моего уровня знаний пока хватило лишь разобраться с работой портов GPIO Raspberry на Python вывести на экран сигналы поданные на два порта от двух генераторов сигналов. Высокий уровень с одного входа записывается единицей с другого нулем. При подаче сигнала лишь на один порт ни какой информации об сигнале получить нельзя, какую бы частоту мы не подавали на выходе будут или одни единицы или нули. При подаче одновременно одинаковой по частоте сигнала на оба порта на выходе получается чередование единиц и нулей, можно делать вывод что частоты равны. Если одна частота выше другой в два раза соотношение нулей и единиц будет 2:1. Множитель 2 показывает что частоты отличаются на октаву. Имеет значение именно соотношение («во сколько раз выше»), а не разница частот («на сколько герц больше»). Например, между 100 и 200 Гц такой же интервал, как между 300 и 600 Гц, — октава (2:1). Чтобы сложить два интервала, мы перемножаем их соотношения. «На октаву выше» значит «в 2 раза выше по частоте», поэтому на две октавы выше — в 4 раза выше, на три октавы — в 8 раз выше, и так далее. Если частоты генераторов находятся в одной октаве то получаем ряд из чередование нулей и единиц с точками "биения". Чем меньше разница по частоте тем реже переходы через периоды. На этом мои эксперименты пока закончились.
Если кто не понял того что я пытаюсь объяснить посмотрите и поиграйте с интерактивным сложения волн и оцифровки сигнала. Следующим этапом хочу сделать задержку звука на Raspberry Pi Затем используя запись импульсов в непрерывный ряд от основного канала и со сдвинутого по времени можно определять как меняется частота сигнала на отрезке времени задержки. Для музыкальной мелодии исполненной на разных инструментах графическое отображение частоты будет одинаковым. Полученный график можно преобразовать в запись нотной грамоте.
Задача стоит в определении буквенных комбинаций а не отдельных букв.По данным «Словаря русского языка», из 32 букв можно составить 992 двухбуквенных комбинаций. Примерно такого порядка должен получится алфавит кода перевода речевого сообщения в печатные символы по предлагаемому мной алгоритму.

Я не нашел в интернете способа записи нот с помощью определения интервала между соседними участками в фонограмме. Если даже такой способ существует то работая над этим проектом смогу изучать программирование на Python. А продвинутые программисты кому идея показалась не фиолетовой могут написать программу распознавания речи таким способом на других языках. Не забудьте потом упомянуть меня как автора идеи.
Приглашаю к обсуждению. Уровень знаний и умений у меня ниже среднего, будьте снисходительны да и возраст солидный.

Комментарии

  1. Просмотры есть продолжаем объяснять дальше.

    Пробую разложить все по порядку кто не понял.
    1, Фонограмма очищается от шумов если требуется.
    2. Делается точная копия.
    3. Для речевого сигнала воспроизведение копии задерживаем на 10-50 мсек.
    4. В каждом периоде по всей записи выделяем одну или несколько точек квантования по уровню. Можно выбрать точки перехода через нуль. В этом случае каждый период будет представлен всего двумя точками и всего двумя байтами.
    5. Записи накладываются друг на друга и на оси времени будет лишь чередование точек перехода через нуль. Получим картину как сдвинутый негатив и позитив.
    6. Если записывать точку с основного сигнала как "точка" а с задержанного как "тире" получится бесконечная морзянка. Каждый период будет представлен два раза сдвинутые относительно друг друга.
    7. Дальнейшая обработка сигнала думается будет так же по линейному алгоритму. Об этом пока не думал.
    8. Для музыкального сигнала такой алгоритм вполне рабочий это можно доказать простыми арифметическими действиями без высшей математики. Доказательств не привожу это может сделать каждый простыми умозаключениями.

    ОтветитьУдалить
  2. Предложенный алгоритм следит сколько фронтов импульсов укладывается между фронтами текущего сигнала к отстоящему на 10-50 мс. Самое близкое понятие которое могу привлечь для объяснения это работа цифрового частотомера. Там подсчитывают количество импульсов между эталонными строб импульсами. В предложенном мной алгоритме строб импульсами являются фронты импульсов задержанного сигнала. Понятия фонемы к этому уже неприемлемы как и всё что используется в традиционных способах распознавания речи. Мы с самого начала отказались от частотного анализа , и также в нашем полученном коде нет времени. Полученный код позволят сказать лишь во сколько раз предыдущая высота звука отличается от другой, в какой октаве и близка к какой ноте если находится в одной октаве.
    На выходе получаются данные количество комбинаций которых имеют предел, значит можно составить таблицу или алфавит?! Из чередования единичек и нулей можно создать укрупненный код для дикторо зависимого распознавания. По этому коду можно вычислить диктора. Это идея подойдет для дипломной работы. Может получится простая программа для умного дома распознавания дикторо зависимых команд. Что и как получится дальше, трудно сказать, это пока просто новая идея.

    ОтветитьУдалить
  3. Главное в анализе речевых данных – это выделить признаки, которые можно считать основными для идентификации лингвистического содержания. Все шумы и признаки которые отвечают за окраску можно отбросить. Принято использовать частотные или временные признаки отдельно или совместно. Считаю возможным использовать безразмерную величину как скважность, один из классификационных признаков импульсных систем, определяющий отношение периода следования (повторения) импульсов к длительности импульса.
    Речевой сигнал на выходе компаратора получится прямоугольным, с импульсами с различной длительности и периодов. Смысловое содержание при прослушивании сохраняется. Чем выше частота тем ближе звук к оригиналу. В теории ни бум-бум НО проверял на практике.
    Речь диктора можно прокрутить быстрее или тише значит изменятся и частотные и временные характеристики. Не изменится лишь скважность. Остается найти алгоритмы нахождения участков со скважностью присущих различным комбинациям звуков, Я предложил один из возможных алгоритмов который хотел бы обсудить а не с кем. :wall:

    ОтветитьУдалить
  4. На "исходниках" написали:
    Внимание! В данном разделе или лично для Вашего профиля или для Вашего IP адреса включена премодерация сообщений. Это означает, что пока Ваше сообщение не будет проверено модератором, оно не появится в общем обсуждении. Поэтому не пытайтесь отправлять сообщение более одного раза. Это ни к чему не приведёт кроме как, что Ваши сообщения будут восприняты модератором как спам и удалены вообще. Все вопросы направляйте модератору.

    ОтветитьУдалить
  5. Каждый кто общался с голосовыми помощниками что их понимание речи далеки от совершенства. Самый крутой эксперимент по искажению человеческой речи может провести каждый прослушать и посмотреть прямоугольные импульсы на выходе компаратора. Музыкальные произведения так и речь легко узнаваемы хотя вся информация представлена в виде прямоугольников различной длительности чем выше частота звука тем ближе звук к оригиналу.

    ОтветитьУдалить

  6. > Определение начальной и конечной точки произнесенного слова в звуковом потоке
    Предлагаю следующий алгоритм:
    1. Удаляем шумы
    2. Отмечаем переходы через ноль в фонограмме
    3. Копируем на вторую дорожку фонограмму со сдвигом чуть длиннее периода самой низкой фонемы
    4. Фонограммы с отметками переходов через нуль объединяем в общий файл.
    5 На прямой вход реверсивного счетчика подаем отметки сигнала перехода через нуль с первого канала на вычитающий со второго. В моменты когда нуль делим фонограмму так как появится не информативный участок , период который нам не интересен так как он ниже уровня частот нашей фонограммы.
    Примечание:
    Задержка должна быть больше чем время периода самой низкой частоты в звуке и короче времени при котором возникает эффект эха, не более 50 мс.
    Фазовый сдвиг звука до наступления эффекта звука человек не различает просто меняется окраска звука.

    ОтветитьУдалить

Отправить комментарий

Популярные сообщения из этого блога

Задержка звука с Python

Распознавание диктора