|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
27.10.2020, 15:57 | #1 |
Пользователь
Регистрация: 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. А продвинутые программисты могут попытаться написать программу распознавания речи таким способом. Не забудьте потом упомянуть меня как автора идеи. Приглашаю к обсуждению. Уровень знаний и умений у меня ниже среднего, будьте снисходительны да и возраст ближе к мразматическому. |
28.10.2020, 07:26 | #2 |
Участник клуба
Регистрация: 03.06.2009
Сообщений: 1,834
|
на основе ваших примеров и измышлений попробуйте сделать такое: в микрофон вы говорите букву А и букву О, и чтоб программа определяла и на экран выводила сообщение: "буква А" или "буква О".
уверен, что работающий пример многих заинтересует и даст толчок к дальнейшему развитию в области распознавания сигналов.
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
|
28.10.2020, 09:50 | #3 | |
Пользователь
Регистрация: 27.10.2020
Сообщений: 36
|
Частота основного тона при произношении звука [а́] разными людьми разная и она не меняется.
Цитата:
неизменны лишь соотношения соседних частот которые я собираюсь определять. |
|
28.10.2020, 10:34 | #5 |
Пользователь
Регистрация: 27.10.2020
Сообщений: 36
|
Если я был бы уверен что у меня хватит знаний создать работающий пример то я бы не стал выкладывать идею до получения результата. Для музыкальных мелодий с помощью советов кого идея заинтересовала можно попробовать создать программу написания нот. Для речевых сообщений на уровне форума такую задачу вряд ли решить.
|
28.10.2020, 12:25 | #6 |
Участник клуба
Регистрация: 17.05.2011
Сообщений: 1,660
|
Такие есть программы. И не одна. В том числе написанные в одно лицо:
https://youtu.be/Ko4QWnYS2f0 |
28.10.2020, 15:07 | #7 |
Пользователь
Регистрация: 27.10.2020
Сообщений: 36
|
Это классический пример определения частоты сигнала основного тона, Распознавание речи начиналось с этого. таких программ уже тысячи. Создать графическое отображение результатов измерения тоже очень просто, полно таких программ.
Новизна моей идеи в том что я не предлагаю измерять частоту одиночного сигнала а сравнивать частоту с последующим сигналом. Звук "а" как продемонстрировано в ролике может расположится на любой высоте нотной линейки но он все равно остается буквой "а" следовательно для понимания что это именно буква "а", частота не имеет ни какого значения и измерять ее нет особого смысла. |
28.10.2020, 15:13 | #8 |
Пользователь
Регистрация: 27.10.2020
Сообщений: 36
|
|
28.10.2020, 15:57 | #9 | |
Пользователь
Регистрация: 27.10.2020
Сообщений: 36
|
Цитата:
По данным «Словаря русского языка», из 32 букв можно составить 992 двухбуквенных комбинаций. Примерно такого порядка должен получится алфавит кода перевода речевого сообщения в печатные символы по предлагаемому мной алгоритму. |
|
28.10.2020, 18:41 | #10 | |
Участник клуба
Регистрация: 03.06.2009
Сообщений: 1,834
|
Цитата:
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Автоматическое распознавание речи | 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 |