Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2020, 15:57   #1
babai-rais
Пользователь
 
Регистрация: 27.10.2020
Сообщений: 36
По умолчанию Распознавание речи без библиотек

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

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

Следующим этапом хочу сделать задержку звука на Raspberry Pi
Затем используя запись импульсов в непрерывный ряд от основного канала и со сдвинутого по времени можно вычислять как меняется частота сигнала на отрезке времени задержки. Для музыкальной мелодии исполненной на разных инструментах графическое отображение частоты будет одинаковым. Полученный график можно преобразовать в запись нотной грамоте.
Я не нашел в интернете способа записи нот с помощью определения интервала между соседними участками в фонограмме. Если даже такой способ существует то работая над этим проектом смогу изучать программирование на Python. А продвинутые программисты могут попытаться написать программу распознавания речи таким способом. Не забудьте потом упомянуть меня как автора идеи.
Приглашаю к обсуждению. Уровень знаний и умений у меня ниже среднего, будьте снисходительны да и возраст ближе к мразматическому.
babai-rais вне форума Ответить с цитированием
Старый 28.10.2020, 07:26   #2
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,792
По умолчанию

на основе ваших примеров и измышлений попробуйте сделать такое: в микрофон вы говорите букву А и букву О, и чтоб программа определяла и на экран выводила сообщение: "буква А" или "буква О".
уверен, что работающий пример многих заинтересует и даст толчок к дальнейшему развитию в области распознавания сигналов.
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 28.10.2020, 09:50   #3
babai-rais
Пользователь
 
Регистрация: 27.10.2020
Сообщений: 36
По умолчанию

Частота основного тона при произношении звука [а́] разными людьми разная и она не меняется.
Цитата:
Сообщение от babai-rais Посмотреть сообщение
Когда частота не меняется количество импульсов в прямом и задержанном сигнале будет одинаково, и в строке записи будет чередование нулей и единичек, примерно так : 0101010101…. , при любых равных частотах.
Из отдельно произнесенной фонемы ни какой информации получить не возможно. Моя гипотеза состоит в том что в слове
Цитата:
Сообщение от babai-rais Посмотреть сообщение
«мама», и неважно, сказано это слово мужским голосом или женским
неизменны лишь соотношения соседних частот которые я собираюсь определять.
babai-rais вне форума Ответить с цитированием
Старый 28.10.2020, 10:20   #4
babai-rais
Пользователь
 
Регистрация: 27.10.2020
Сообщений: 36
По умолчанию

Цитата:
Сообщение от babai-rais Посмотреть сообщение
с помощью простой программы на Python вывести на экран сигналы поданные на два порта от двух генераторов сигналов.
Программу взял здесь
babai-rais вне форума Ответить с цитированием
Старый 28.10.2020, 10:34   #5
babai-rais
Пользователь
 
Регистрация: 27.10.2020
Сообщений: 36
По умолчанию

Цитата:
Сообщение от NetSpace Посмотреть сообщение
уверен, что работающий пример многих заинтересует
Если я был бы уверен что у меня хватит знаний создать работающий пример то я бы не стал выкладывать идею до получения результата. Для музыкальных мелодий с помощью советов кого идея заинтересовала можно попробовать создать программу написания нот. Для речевых сообщений на уровне форума такую задачу вряд ли решить.
babai-rais вне форума Ответить с цитированием
Старый 28.10.2020, 12:25   #6
kvitaliy
Участник клуба
 
Регистрация: 17.05.2011
Сообщений: 1,660
По умолчанию

Цитата:
Сообщение от babai-rais Посмотреть сообщение
можно попробовать создать программу написания нот.
Такие есть программы. И не одна. В том числе написанные в одно лицо:
https://youtu.be/Ko4QWnYS2f0
kvitaliy вне форума Ответить с цитированием
Старый 28.10.2020, 15:07   #7
babai-rais
Пользователь
 
Регистрация: 27.10.2020
Сообщений: 36
По умолчанию

Цитата:
Сообщение от kvitaliy Посмотреть сообщение
Такие есть программы. И не одна
Это классический пример определения частоты сигнала основного тона, Распознавание речи начиналось с этого. таких программ уже тысячи. Создать графическое отображение результатов измерения тоже очень просто, полно таких программ.
Новизна моей идеи в том что я не предлагаю измерять частоту одиночного сигнала а сравнивать частоту с последующим сигналом. Звук "а" как продемонстрировано в ролике может расположится на любой высоте нотной линейки но он все равно остается буквой "а" следовательно для понимания что это именно буква "а", частота не имеет ни какого значения и измерять ее нет особого смысла.
babai-rais вне форума Ответить с цитированием
Старый 28.10.2020, 15:13   #8
babai-rais
Пользователь
 
Регистрация: 27.10.2020
Сообщений: 36
По умолчанию

Цитата:
Сообщение от kvitaliy Посмотреть сообщение
Такие есть программы. И не одна.
Повторяю:
Цитата:
Сообщение от babai-rais Посмотреть сообщение
Я не нашел в интернете способа записи нот с помощью определения интервала между соседними участками в фонограмме.
babai-rais вне форума Ответить с цитированием
Старый 28.10.2020, 15:57   #9
babai-rais
Пользователь
 
Регистрация: 27.10.2020
Сообщений: 36
По умолчанию

Цитата:
Сообщение от NetSpace Посмотреть сообщение
на основе ваших примеров и измышлений попробуйте сделать такое: в микрофон вы говорите букву А и букву О, и чтоб программа определяла и на экран выводила сообщение: "буква А" или "буква О".
Задача стоит в определении буквенных комбинаций а не отдельных букв.
По данным «Словаря русского языка», из 32 букв можно составить 992 двухбуквенных комбинаций. Примерно такого порядка должен получится алфавит кода перевода речевого сообщения в печатные символы по предлагаемому мной алгоритму.
babai-rais вне форума Ответить с цитированием
Старый 28.10.2020, 18:41   #10
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,792
По умолчанию

Цитата:
Сообщение от babai-rais Посмотреть сообщение
Задача стоит в определении буквенных комбинаций а не отдельных букв.
По данным «Словаря русского языка», из 32 букв можно составить 992 двухбуквенных комбинаций. Примерно такого порядка должен получится алфавит кода перевода речевого сообщения в печатные символы по предлагаемому мной алгоритму.
да это просто моя мечта - программно переводить микрофонную речь в печатный текст.
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматическое распознавание речи IADom Безопасность, Шифрование 1 04.11.2020 13:36
C# Распознавание речи satirikzn Фриланс 0 23.05.2015 14:51
Распознавание речи SpeechAPI rmv240899 Помощь студентам 2 23.11.2012 21:39
Распознавание речи Артегор Visual C++ 3 11.06.2012 22:47
Распознавание речи php Krasi PHP 5 29.08.2011 08:37