Определение сигнала (типа голос) ардуиной, в какую сторону смотреть? как можно сделать?

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

Интересует получить квалифицированный ответ на такой вопрос:

скажем голос перенесли в вниз по частоте и  образали фильтрами до примерно 1Гц-300Гц..

голос тут для примера. Так вот интересует как можно обрабатывать типа ардуиной, чтобы сказать в итоге: этот сигнал схож с тем что записано в память, и на выходе даем 1, или не похож ни на что, и даем 0.

Тоесть распознавание аналоговых сигналов, длинной скажем пару сек или до 5сек.

Никто с похожим не сталкивался?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А что такое "схож" и "не похож"? В каких попугаях измерять? Каковы критерии схожести?

ptr
Offline
Зарегистрирован: 28.05.2016

Боюсь ардуина Due такую задачу в состоянии потянуть, а остальные нет. Смотрите в сторону преобразований Фурье.

Logik
Offline
Зарегистрирован: 05.08.2014

В полосе 300Гц ничего толкового не выйдет, т.е не узнаете ни "кто говорит" ни "что говорит". Кстати,  а что из этого нужно? 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Logik пишет:

В полосе 300Гц ничего толкового не выйдет, т.е не узнаете ни "кто говорит" ни "что говорит". Кстати,  а что из этого нужно? 

Отчего же?

Можно вполне уверенно отличить "кошка" от "собака".

Logik
Offline
Зарегистрирован: 05.08.2014

andriano пишет:

Logik пишет:

В полосе 300Гц ничего толкового не выйдет, т.е не узнаете ни "кто говорит" ни "что говорит". Кстати,  а что из этого нужно? 

Отчего же?

Можно вполне уверенно отличить "кошка" от "собака".

Спасибо, поржали..

https://www.youtube.com/watch?v=CxAWINljDAY

Logik
Offline
Зарегистрирован: 05.08.2014

И тесткис.. кейс т.е. https://www.youtube.com/watch?v=CEbzm0K_uQc

ptr
Offline
Зарегистрирован: 28.05.2016

Short Circuit пишет:

скажем голос перенесли в вниз по частоте и  образали фильтрами до примерно 1Гц-300Гц..

300Гц очень мало. Телефон, например полосу в 3КГц тянет (300-3400Гц). То есть, выдрав из этого диапазона всего 10%, шансы на получение чего-то приличного весьма малы.

Насколько я понял, вы хотите производить корреляционный анализ полученного сигнала с эталоном. Частота оцифровки сигнала даже 300Гц нужна хотя бы 600Гц (по теореме Котельникова). При восьмибитной оцифровке потребуется 600байт из 2К оперативки Uno. При это останется от сигнала то меньше 10%, по сравнению с общепринятой телефонной оцифровкой на 8КГц. Сохранение же на 8КГц потребует 8Кбайт, которые вы найдете только в Due.

Производить корреляционный анализ аналогового сигнала без решения дифференциальных уравнений вряд ли удастся. Что опять таки, вряд ли доступно ардуинам, кром Due. А если уже брать Due, то правильней производить сначала спектральный анализ (преобразование Фурье), а потом уже выполнять корреляционный анализ не сигналов, а их спектральной характеристики. И это будет уже на порядок проще и быстрее, чем корреляционный анализ самих сигналов. Так как от корреляций амплитуды вы уже избавитесь на этапе спектрального анализа.

Если Due нет, рекомендую попробовать пойти следующим путем:

1. Спектральный анализ эталона выполнить на ПК и результат записать в программную память МК, а не оперативную.

2. Спектральный анализ получаемого сигнала попробовать выполнять на лету быстрым преобразованием Фурье. Судя по данной (http://forum.arduino.cc/index.php/topic,38153.0.html) ветке в форуме, народу это удавалось.

3. Выполнять корреляционный анализ между результатом быстрого преобразования Фурье и эталоном в программной памяти.

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Если сигнал обрезан сверху по 300 Гц, думаю, для анализа остается только амплитудная огибающая. В принципе, этого не так уж мало. Уже упомянутые "кошка" и "собака" (слова, произнесенные человеком, а не звуки, испускаемые животеыми), как я уже говорил, можно уверенно различить. А вот анализ низкочастотного огрызка спектра, мне кажется, не слишком перспективен.

 

А вообще, я бы посоветовал сначала прояснить для себя возможности существующих способов распознавания звукового сигнала безотносительно Ардуино, и только когда здесь появится некоторая ясность, думать над конкретной реализацией.

ptr
Offline
Зарегистрирован: 28.05.2016

andriano пишет:

Если сигнал обрезан сверху по 300 Гц, думаю, для анализа остается только амплитудная огибающая. В принципе, этого не так уж мало. Уже упомянутые "кошка" и "собака" (слова, произнесенные человеком, а не звуки, испускаемые животеыми), как я уже говорил, можно уверенно различить.

Выполнять корреляционный анализ без спектрального, конечно можно, вот только перспективы не радужные.

1. Мы различаем звуки в первую очередь по частоте. Амплитуда (громкость) звука для распознания речи или не имеет значение вообще, или ее значение вторично, после спектра.

2. Наиболее легко распознаются гласные и, куда хуже, согласные звуки. Поэтому в легкость распознавания "кошка" и "собака" верится с трудом. Если мы из-за узости частотного диапазона в 300Гц вообще не заметим согласные, то "о-а" отличить от "о-а-а" может и не удастся.

Вообще, подробнее о формантах и распозновании человеческого голоса можно почитать, например, тут: http://speech-text.narod.ru/chap3_4.html

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

1. Речь не о громкости, а о ритме. В неблагоприятных условиях (например, сильный шум) мы узнаем фразу именно по ритму. На этом основан принцип подбора военных команд, названий букв (аз, буки, веди, глаголь, добро...) и пр.

2. Ну да, гласные различаются по формантам, а последние лежат в диапазоне примерно от 500 до 3000 Гц. Так что в данном случае различать следует не "о-а" от "о-а-а", а слово из двух слогов с ударением на первый слог от с трехсложного слова с ударением на втором.

ptr
Offline
Зарегистрирован: 28.05.2016

andriano пишет:

1. Речь не о громкости, а о ритме.

А разве ритм мы определяем не по спектру?

andriano пишет:

2. слово из двух слогов с ударением на первый слог от с трехсложного слова с ударением на втором.

Если этого достаточно, тогда другое дело. Но ТС писал "как можно обрабатывать типа ардуиной, чтобы сказать в итоге: этот сигнал схож с тем что записано в память, и на выходе даем 1, или не похож ни на что, и даем 0."

А вы решаете задачу, когда выдать 0, что мало поможет решить задачу, когда выдавать 1. Боюсь, что тут случай не для бритвы Оккама.

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ptr пишет:

А разве ритм мы определяем не по спектру?

Лично я - по амплитуде.

А Вы - по спектру? Поделитесь алгоритмом.

Цитата:

Если этого достаточно, тогда другое дело. Но ТС писал "как можно обрабатывать типа ардуиной, чтобы сказать в итоге: этот сигнал схож с тем что записано в память, и на выходе даем 1, или не похож ни на что, и даем 0."

А вы решаете задачу, когда выдать 0, что мало поможет решить задачу, когда выдавать 1. Боюсь, что тут случай не для бритвы Оккама.

Отчего же. Вопрос лишь в степени схожести. Вряд ли мы сможем отличить "собаку" от "коровы" - следовательно, при нашем подходе, эти два слова схожи. Будем выдавать 1. А 100% распознавание никто не гарантирует даже в диапазоне 20-20000 и при на 3 порядка более высокой производительности вычислительной системы.

ptr
Offline
Зарегистрирован: 28.05.2016

andriano пишет:

Вряд ли мы сможем отличить "собаку" от "коровы"

Судя по тому, что писали на англоязычном форуме в теме, ссылку на которую я дал выше, как раз сможем. Там парню удалось выполнять быстрое преобразование фурье в реальном времени, не записывая звук в память. А уже спектр в память для дальнейшего корреляционного анализа должен влезть.

 

ptr
Offline
Зарегистрирован: 28.05.2016

andriano пишет:

А Вы - по спектру? Поделитесь алгоритмом.

Естественно, просто частота ритма, может быть 1Гц или даже меньше.

Если же более строго, ритм можно записать при помощи обычной музыкальной записи одной нотой, но отслеживая паузы и длительности. То есть, это спектральная характеристика, так как изменение амплитуды (громкости) во время исполнения музыки или произнесения речи на ритм вообще не влияют.

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ptr пишет:

Судя по тому, что писали на англоязычном форуме в теме, ссылку на которую я дал выше, как раз сможем. Там парню удалось выполнять быстрое преобразование фурье в реальном времени, не записывая звук в память. А уже спектр в память для дальнейшего корреляционного анализа должен влезть.

Вообще-то "выполнить БПФ" и "распознать" - далеко не одно и то же. Поэтому "сможем" - ничем не подтверждается. Формантные области отрезаны - разницы в спектре до 300 Гц нет. За счет чего "сможем"?

ptr
Offline
Зарегистрирован: 28.05.2016

andriano пишет:

ptr пишет:

Там парню удалось выполнять быстрое преобразование фурье в реальном времени, не записывая звук в память.

Вообще-то "выполнить БПФ" и "распознать" - далеко не одно и то же. Поэтому "сможем" - ничем не подтверждается. Формантные области отрезаны - разницы в спектре до 300 Гц нет. За счет чего "сможем"?

Я же указал "в реальном времени". То есть никакой нужды обрезать нет и можно смело анализировать спектр сигнала в общепринятом диапазоне от 300 до 3100 Гц.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ptr пишет:

Я же указал "в реальном времени". То есть никакой нужды обрезать нет и можно смело анализировать спектр сигнала в общепринятом диапазоне от 300 до 3100 Гц.

Очень любопытное предложение: звук, в котором отсутствуют частоты выше 300 Нц, анализировать в диапазоне от 300 до 3100 Гц.

Это совет по принципу: Туалетной бумаги нет - купите наждачную.

ptr
Offline
Зарегистрирован: 28.05.2016

andriano пишет:

ptr пишет:

никакой нужды обрезать нет

отсутствуют частоты выше 300 Нц

А это совет по принципу: Сказали не резать, а я все равно отрежу?

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

ptr пишет:
... Там парню удалось выполнять быстрое преобразование фурье в реальном времени, не записывая звук в память ..

Не понял, а какие с этим "сложности"? Оно вроде всегда ТАК делалось, нет? Поясните, а то я что-то не понял ..

Звук преобразуется в БПФ "на лету", тут же на лету можно сопоставлять "формантный состав" и отделять гласные от согласных ничего и вовсе не записывая "в память" .. не? Я думал именно так и поступают. .. похоже сильно отстал от "новых технологий" ..

ptr
Offline
Зарегистрирован: 28.05.2016

Arhat109-2 пишет:

ptr пишет:
... Там парню удалось выполнять быстрое преобразование фурье в реальном времени, не записывая звук в память ..

Не понял, а какие с этим "сложности"? Оно вроде всегда ТАК делалось, нет? Поясните, а то я что-то не понял ..

Звук преобразуется в БПФ "на лету", тут же на лету можно сопоставлять "формантный состав" и отделять гласные от согласных ничего и вовсе не записывая "в память" .. не? Я думал именно так и поступают. .. похоже сильно отстал от "новых технологий" ..

Так поступают при неограниченном быстродействии процессора. А у нас оно весьма ограничено, если не считать Due.

Задача была сравнить 5 секунд аналогового сигнала на входе с эталоном в памяти. не обязательно речи. То есть, если не сохранять ничего в память, выполняя корреляционный анализ спектра полученного сигнала с эталоном на лету, вы точно упретесь в производительность восьмибитного МК.

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ptr пишет:

А это совет по принципу: Сказали не резать, а я все равно отрежу?

Кто сказал "не резать"?

Внимательно читаем исходное сообщение темы. Там употреблено слово "отрезали". В прошедшем времени. Этих частот в сигнале УЖЕ нет. Что Вы собираетесь анализировть?

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Для задач распознавания голоса (слов) вполне достаточен частотный фильтр по диапазону 100-6000 гц., как мне помнится (давно это було), и для значительного количества случаев можно и существенно меньше .. 0.3-3кгц. Соответственно, частота оцифровки вполне может быть в районе 10кгц или период около 100мксек.

На 16-20Мгц (даже не Х-мега) это более 1500 тактов, с учетом обращений к памяти можно урезать до 1тыс. Вы серъезно считаете что БПФ "на лету" и формантное сравнение 1-5 формант на пусть даже 30 звуков займет больше? (в случае неудачи сравнивать весь набор формант для одного звука нет никакого смысла, надеюсь понятно) :)

А дальше "сигнал" практически "зипован" ибо представляет из себя поток "разобранных звуков-букв".

Я конечно же веду речь за 8-битовую и целочисленную арифметику .. если кто-то пытается делать БПФ на Ардуино в компексных числах .. то он сам себе "злобный Буратино"...

Да, кстати .. задача была сравнить 5сек отфильтрованного до 300гц звука с эталоном .. если эталон один, то вопрос вообще не стоит.

ptr
Offline
Зарегистрирован: 28.05.2016

andriano пишет:

ptr пишет:

А это совет по принципу: Сказали не резать, а я все равно отрежу?

Кто сказал "не резать"?

Внимательно читаем исходное сообщение темы. Там употреблено слово "отрезали". В прошедшем времени. Этих частот в сигнале УЖЕ нет. Что Вы собираетесь анализировть?

Про это я уже писал выше. Если отрезали - забудьте об этой задаче, так даже две гласные буквы не различите.

ptr
Offline
Зарегистрирован: 28.05.2016

Arhat109-2 пишет:

Для задач распознавания голоса

Вы серъезно считаете что БПФ "на лету" и формантное сравнение

Откуда вы вообще взяли, что стоит задача распзнавания голоса? В начале темы четко сказано, что стоит задача сравнения двух аналоговых сигналов. Одного хранящегося в памяти. Другого - оцифровываемого АЦП.

Речь о БПФ зашла только из тех соображений, что хранить эталонный сигнал в чистом виде и выполнять корреляционный анализ его с поступающим сигналом, есть путь тупиковый. А вот хранить спектр эталонного сигнала в памяти и выполнять корреляционный анализ его со спектром поступающего сигнала - путь вполне реальный.

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Ну вот отсюда и взял. Пусть будет не голос. Там частотный диапазон 1-300гц, так что вопрос о быстродействии как-бы не стоит. Да, вспомнил .. автору стоит поискать что-то про "вейвлетные преобразования", это разновидность Фурье.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Нашел в вики рекурсивный алгоритм построения вейвлета Хаара и вспомнилось.

В общем подход следующий: вейвлет Хаара, это по сути это набор полусумм и полуразностей двух "соседних отсчетов" и легко преобразуется к алгоритму "бегущего оконного вейвлета" заданной степени масштабирования. Соответственно, исходный эталон преобразуем в набор вейвлетов заданного масштаба - "окон" заранее и с ним производим сравнение текущего накопленного содержимого проверочного окна по очереди. Если вся последовательность окон совпала - значит похоже. Первое несовпадение запускает проверку сначала.

По задаче имеем частоты эталона в диапазоне 1-300гц или количество масштабов 8-9 или 2048 чисел (256,128,64,..,1) в одном окне сравнения длительностью в 1сек. Соотвественно для эталона в 5 сек потребуется заранее определить около 10кб эталонных значений. Упихивается во флеш.

Далее, поступающий входной сигнал вычисляет "текущие" значения для масштабов постепенно, по мере появления входных данных и сразу производит сравнение с эталоном. Несовпадение с эталоном просто "продвигает" насчитанный вейвлет. А совпадение накапливает "образец" и продвигает его сравнение.

На каждом входном значении требуется насчитать 18 чисел в "худшем случае", отмасштабировать их к диапазону значений эталона и произвести 18 сравнений. Вполне решаема для Мег задача.

 

MagicianT
Offline
Зарегистрирован: 03.10.2015

Вейвлетов там только не хватало, этот бред сивой кобылы давно на помойку выбросили.

По существу вопроса, сравнение аналоговых сигналов делается через кросс-кореляцию. Где сумма больше, соответственно совпадение лучше. Эфективность метода улучшается если выборки (эталонную и входных данных ) прогнать через ВЧ-фильтр.
Для одномерных сигналов, например изменение амплитусы от времени, достаточно двух циклов for(;;). С двумерными, как изменение амплитуды и частоты, сложнее, но суть такая-же. Двумерные фильтры  в софте - тоже что и обработка видео изображений. Распознавание почерка, отпечатков пальцев, лиц также работает через кореляцию.
ptr
Offline
Зарегистрирован: 28.05.2016

MagicianT пишет:

Бред сивой кобылы:

По существу вопроса, сравнение аналоговых сигналов делается через кросс-кореляцию. Где сумма больше, соответственно совпадение лучше.

Вот так правильней )

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

Для того, чтобы получить спектр, необходимо использовать либо преобразования Фурье, либо вейвлет-преобразование. Первое популярней. Если кто знает еще варианты, явно не уступающие перечисленным, пополните список, пожалуйста.

Что касается вейвлетов, то их значимость для кодирования. Последнее, что припоминается, это JPEG2000. А вот для анализа сигналов они применяются весьма широко. Другое дело, на восьмибитном МК, боюсь, БПФ будет целесообразней, исключительно из-за тех компромиссов, на которые мы обречены без арифметики с плавающей запятой. Хотя тут выбор уже за ТС.

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

https://habrahabr.ru/post/168517/ вот хорошая статья на Хабре по вейвлет преобразованиям при сжатии изображений. Особенно интересны комментарии про использование целочисленной арифметики .. что я и делал когда-то давно. :)

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Видимо я слишком сумбурно написал. Предложенный метод позволяет распознавать сигнал по эталону "на лету", а не предварительно записанными кусками по 5 секунд.

Просто мне было интересно вспомнить свои старые потуги в области распознавания речи, да и ребенок уже интересуется " а можно ли научить Ардуину слушать голосовые команды" .. вот, вспомнилось .. можно будет "попгобовать". :)

ptr
Offline
Зарегистрирован: 28.05.2016

Arhat109-2 пишет:

Особенно интересны комментарии про использование целочисленной арифметики .. что я и делал когда-то давно. :)

А вообще очень интересно было бы сравнить результы решения данной задачи через БПФ и через вейвлеты, при использовании одинакового алгоритма для корреляционного анализа. Но времени нет, самому и то и другое кодировать (

Так что посылай всех догматиков, что против вейвлетов выступают! Я бы еще третий способ спектрального анализа поискал )

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Так ось "масштабов" вейвлета - это и есть "спектр" сигнала, только разложенный по частотам кратным 2. Для указанного диапазона у ТС получаем спектр из частот 1,2,4,8,16,32,64,128 и 256гц .. всего 9 масштабов. Вот "формантный состав" и можно сравнивать с эталоном после квантований. :)

MagicianT
Offline
Зарегистрирован: 03.10.2015

ptr пишет:

MagicianT пишет:

Бред сивой кобылы:

По существу вопроса, сравнение аналоговых сигналов делается через кросс-кореляцию. Где сумма больше, соответственно совпадение лучше.

Вот так правильней )

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

Для того, чтобы получить спектр, необходимо использовать либо преобразования Фурье, либо вейвлет-преобразование. Первое популярней. Если кто знает еще варианты, явно не уступающие перечисленным, пополните список, пожалуйста. 

Вы не дочитали, я писал что если только магнитуда меняется, а частота например постоянна, одномерный массив, тогда просто кореляция. Если с частотой, то БПФ - И Кореляция результатов БПФ. 

 Кроме Фурье, есть ещё Хартли. Но оно ни чем не лучше, я бы сказал частный случай Фурье преобразования. 
 
Кстати, у меня есть код для Леонардо, распознавание речи И голоса (идентификация говорящего). Хотелось бы сравнить, но не скем.  Клауд Гуантаномо вокруг, nginx.
 4-ре года ищу с кем поспорить, никто не написал, только языком ля-ля-ля, вейвлеты, такое чуство что люди вымерли и одни спай-боты остались.  
ptr
Offline
Зарегистрирован: 28.05.2016

MagicianT пишет:

Вы не дочитали, я писал что если только магнитуда меняется, а частота например постоянна, одномерный массив, тогда просто кореляция. Если с частотой, то БПФ - И Кореляция результатов БПФ. 

Значит я неверно Вас понял. Приношу извинения. Без корреляционного анализа мы сигналы в любом случае не сравним. Я не знаю другого пути. Если бы кто подсказал, было бы поучительно.

Цитата:

 Кроме Фурье, есть ещё Хартли.

А при чем тут Хартли? Это же, вроде, частный случай теоремы Шенона, интересной только для оценки пропускной способности канала (диапазона) связи. Любимое связистами соотношение сигнал/шум.

А если была описка, и речь про метод Хаара, то сие и есть простейший вейвелет.

Цитата:

4-ре года ищу с кем поспорить

Я преобразования Фурье хуже помню, чем мои дочки (

Так что оппонент я Вам никакой.

MagicianT
Offline
Зарегистрирован: 03.10.2015

ptr пишет:
Значит я неверно Вас понял. Приношу извинения. Без корреляционного анализа мы сигналы в любом случае не сравним. Я не знаю другого пути. Если бы кто подсказал, было бы поучительно.

 В принципе, БПФ тоже Кореляция, там в основе опять умножай-суммируй - т.е. базовая операция кросс-кореляции. Мне кажется, других методов и нет, вся разница в оптимизации. Самая примитивная кореляция, понятно - каждый элемент массива с каждым, так же как и дискретное преобразование Фурье, а оптимизированая смарт версия уже называется Быстрое (алгоритм Cooley and Tukey (1965))
 
/span><span style="color:rgb(85,85,85);font-family:Verdana, Geneva, Arial, sans-serif;font-size:12px;"> пишет:

А при чем тут Хартли? Это же, вроде, частный случай теоремы Шенона, интересной только для оценки пропускной способности канала (диапазона) связи. Любимое связистами соотношение сигнал/шум.

А если была описка, и речь про метод Хаара, то сие и есть простейший вейвелет.

https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A5%D0%B0%D1%80%D1%82%D0%BB%D0%B8

https://en.wikipedia.org/wiki/Discrete_Hartley_transform

Удивительно, что вики говорит:
"Преобразование Хартли является одним из многих известных типов преобразований Фурье."
А я думал что сам дошёл, что Хартли частный случай Фурье. Правда вики читать, я признаюсь, я не хрена не понимаю. Я лучше своими словами. Так вот эта Хартли, та же хрень что и БПФ, но на выходе не комплексный результат, реальная и имижинари пара массивов, ну та пара из суммы квадратов которой магнитуду получаем, а из их отношения арктангенс угла. У Хартли тот результат ещё дорабатывать надо, а так всё идентично - на выходе спектральный состав, в линейном масштабе, один в один с БПФ. 
Проблема в линейном масштабе, вот эти умники и городили чушь под название вейвлеты, что бы если и не сразу лог-10 шкалу получить, а хотя бы лог-2 (логарифмическую). Только я поигрался как то с ними, и сразу понял весь идиотизм вейвлетов, после всем категорически и не советую время тратить.
Arhat109-2
Offline
Зарегистрирован: 24.09.2015

MagicianT, очень интересны детали вашей реализации распознавания голоса на базе Леонардо, в частности:

1. Схемная реализация:

а) Вы пишете голос через микрофон на SD (или куда ещё) и потом его передаете в Леонардо и распознаете "пачками" (ибо памяти у Леонардо 2.5кб, что явно мало для длинного фрагмента звука);

б) или у вас реализовано "распознавание на лету"? В смысле что микрофонный модуль подключается непосредственно к Леонардо и фрагмент звука записывается в память МК и там же распознается с формированием оконного БПФ "на лету";

в) или Вы используете персональный компьтер как средство приема звука (звуковая карта), его предварительного хранения и получения результат БПФ, которое уже воспринимается и анализируется Леонардо?

г) К Леонардо подключен DSP имеющий встроенную функцию преобразования БПФ ..

очень интересен ваш вариант схемной реализации ...

Для себя, преимуществом (и недостатком) применения вейвлетного преобразования я вижу его логарифмичность масштабов с основанием 2 .. это может быть слишком грубым "спектроанализатором" для распознавания именно речи. С другой стороны, в виде преобразования Хаара оно выполняется крайне просто и с меньшей вычислительной мощностью чем даже оконный БПФ.

Logik
Offline
Зарегистрирован: 05.08.2014

Не, ну трындец. Умные, образованые ДПФ-БПФ, вавлеты-хуеты... Вы реально не понимаете, что обрезав полосу до 300Гц - ловить нечего? Практически вся информация из потока просто выброшена. Её уже нет. И распознавать просто нечего. И никакие огибающие не помогут. Когдато занимался задачей частотного уплотнения, в канал телефона еще коечто надо было запихнуть. Пока канал урезается с 3400 до 2400Гц - еще нормально все понимаемо, до 2100Гц - иногда есть затруднения, а 2000 - тарабарщина 50/50. Первой исчезает звук "и" часть гласных становятся неразличимы. А при 300Гц вообще ничего от речи не остается. Неверите - возьмите аквалайзер нормальный вырежте им все выше 300Гц и насладитесь результатом

Распознавание речи вообще куда более сложная задача чем БПФ+корреляция с шаблоном. Так можна более менее сделать только под конкретного человека да и то если "правильно" говорит. Понятно не по урезаному до 300Гц.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Блин .. тут обсуждается как-бы 2 задачи:

1. От автора темы, с его урезанным сигналом от 1 до 300Гц .. и что там у него на самом деле и откуда перенесено - его проблема. Он хочет всего лишь выяснить "похоже оно на образец или нет". Кстати, без озвученных критериев похожести .. нет в ней никакого "распознавания".

2. Собственно вопрос распознавания голоса Ардуинкой. Точнее его теоретическая (и как пишут тут) практическая реализация .. эта часть мне и интересна. В ней нет никакого "урезанного" сигнала .. речь идет про частоту оцифровки в 6-10кГц и соответственно попытки понять можно ли анализировать такой оцифрованный звук речи "на лету", с дунькиного микрофона непосредственно дунькой БЕЗ его предварительной записи/нарезки или куда-то в отдельное хранилище и последующим распознаванием. Сдается что - можно.

Насчет самих алгоритмов распознавания .. у меня есть свои старые идеи, хочу их попробовать "ещё раз". Только и всего. То, что сейчас используют я уже нашел кучу интересных статей и обзоров. Узнал очень много интересного, но всё это "в дуньку" вряд ли влезет.

P.S. Не, в 2560 программно может и влезет, там флеша многа .. но вот врядли 16Мгц 8-и битной арифметики "хватит" чтобы успеть отлавливать голосовые команды микрофоном ..

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Arhat109-2 пишет:

Кстати, без озвученных критериев похожести 

Я вот, кстати, задал этот вопрос ТС ещё в самом первом посте темы (ответа, кстати, не получил). Но, похоже, проблемы ТС здесь заинтересовали меня одного, все остальные холиварят "о своём, о девичьем" :))) Да и самого ТС, похоже, эта тема не волнует - пришёл, пукнул, и смылся - ни одного комментария.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Так а что там можно сказать БЕЗ ответа на заданный вами вопрос о критериях похожести? Предлагаете "погадать на кофейной гуще"? Вопрос коррелирует с тем, который мне тоже интересен .. вот и обсуждаем .. мож автору тоже чего сгодится? Практика показывает, что часто вопрошающий задает совсем не тот вопрос, который его интересует на самом деле .. а так, глядишь прочитает и поставит вопрос точнее. А "заодно" можно и свои вопросы порешать .. "2 в 1" :)

MagicianT
Offline
Зарегистрирован: 03.10.2015

Logik-у:  Мне кажется, в тех каналах ВЧ снизу до 300 то же обрезан спектр, поэтому вы и не могли разобрать. 

А вообще мне тема интересна в широком смысле, голос и речь просто самое затёртое применение алгоритмов распознавания, И самое запутаное, там такой обфурскейшн наворотили эти копи-расты, что уже никто не понимает как простейший кодек работает. 

Был у меня проэкт распознавать движения, с акселерометра, 3Д, посложнее чем видео или речь. Для каратиста например, сравнить удар с мастерским, или для пилота. Вобщем я ничего экстраординарного не примудал к той идее, которую уже обрисовал, только измерений добавил.

На Леонардо:

В: а) Вы пишете голос через микрофон на SD (или куда ещё) и потом его передаете в Леонардо и распознаете "пачками" (ибо памяти у Леонардо 2.5кб, что явно мало для длинного фрагмента звука);

 Пакетами, размер БПФ 256, потом уплотнение 128 бинов до 16 байт. 1 секунда - хватает на двухсловную фразу проверки динамиков на компе "спикер лефт"/"спикер райт". Семплирование 4кГц.

В: б) или у вас реализовано "распознавание на лету"? В смысле что микрофонный модуль подключается непосредственно к Леонардо и фрагмент звука записывается в память МК и там же распознается с формированием оконного БПФ "на лету";

Не, на лету поленился, поставил триггер, появился звук - пишем / сравниваем. Но эта часть зависит от того сколько словарный запас, я сделал 1-у комманду с хранением в ЕЕПРОМ. Легко переписать код под ФЛЭШ, до 20 комманд, 1к на комманду (или удар мастера). С одной на лету проблем с быстродейстжием ардуино нет, а вот 10 может не потянуть, не проверял

Ознакомиться можно здесь: https://cloud.mail.ru/public/4xEH/Q9xrNuy5j  https://cloud.mail.ru/public/4xEH/Q9xrNuy5j

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Спасибо, очень интересно. Показалось несколько странным вычисление магнитуды в цикле строки 409 скетча 3е .. почему именно 243 и 100 в качестве коэффициентов-множителей?

MagicianT
Offline
Зарегистрирован: 03.10.2015

Апроксимация, что бы квадратный корень не считать - долго на ардуино. Взято отсюда: http://www.dspguru.com/dsp/tricks/magnitude-estimator

Ошибка не более 5%. Коэфициенты 0.95 и 0.39 для 8-бит (0.95х256 и 0.39х256) 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Ну .. в целом там понятно все .. только вот в современных релизах пытаются отвязаться от темпа речи и тембра говорящего, чего у Вас - нет. То есть, если сказать заветную фразу медленно или быстро - Вас Леонардо не опознает. А в целом - очень просто и интересный код, спасибо.

MagicianT
Offline
Зарегистрирован: 03.10.2015

Ну, не совсем так. Как я уже упоминал, мой подход для речи - 2 D   сравнение, соответственно фильтры ВЧ и корелляция то же 2D.

Представ'те пятно краски на бумаге (спектрограмма) и его надо сражнить с другим. Смещение вверх-вниз (по частоте) оценивается как ошибка в

той же пропорции что и смещение влево-вправо ( ошибка времени или темпа голоса). Вот кернел:

1const    int8_t  EE[3][3] = {                     // EDGE ENHANCEMENT HPF MATRIX 3 x 3
2                  {-1, -1, -1  },
3                  {-1,  8, -1  },
4                  {-1, -1, -1  }
5                  };

как видите, он симметричен. Вводя ассиметрию я запросто могу дегрейдить частотную (идентификация голосового тракта) или темпоральную компоненту (усталость, темп ).  

Результаты просто невероятные, при всех аппроксимациях ардуино с вероятностью 98-99% распознаёт "front left". Для "front right" кореляция падает ниже 30%. Что интересно, фразы на половину - первое слово - схожи. Там есть куда "дегрейдить", я не смог повторить одно и тоже слово с вероятностью больше 95, слишком жёсткий фильтр.

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Arhat109-2 пишет:

"вейвлетные преобразования", это разновидность Фурье.

Отнюдь.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ptr пишет:

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

Последнее замечание весьма существенно.

Дело в том, что само ухо производит преобразование сигнала весьма близкое к Фурье-анализу. Именно поэтому (и ТОЛЬКО поэтому) сравнение спектров вместо сравнения сигналов приводит к гораздо лучшему результату с точки зрения человеческого слуха.

Если же у нас сигнал от 1 до 300 Гц, то мне представляется маловероятным, что его сравнение следует производить, исходя из особенностей человеческого слуха. И ТС об этом не пишет.

Следовательно, целесообразность БПФ вызывает существенные сомнения. Про вейвлеты я даже не говорю: во-первых, не доказано, что ухо делает что-то похожее на вейвлет-преобразование, а во-вторых, вейвлеты пока теоретически проработаны существенно хуже, чем ПФ.

В общем, первое, что следует сделать, - это определиться с критерием схожести. И только потом искать под этот критерий адекватный алгоритм обработки.

ptr
Offline
Зарегистрирован: 28.05.2016

andriano пишет:

В общем, первое, что следует сделать, - это определиться с критерием схожести. И только потом искать под этот критерий адекватный алгоритм обработки.

Плюсую. Просто ТС пропал и народ подался в теоретизирование при различных допущениях )