Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Voice recognition with AVR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Страницы: 1, 2, 3
DRUID3
Цитата(Rst7 @ Oct 25 2008, 12:54) *
Нам фаза сигнала не нужна. Мы сравниваем спектры мощности. Такой у нас алгоритм.

ну так алгоритм принципиально глупый скажу я Вам, он насыщен излишними вычислениями в принципе, а некоторые уже взялись за ассемблер...
Цитата(Rst7 @ Oct 25 2008, 12:54) *
Тут никто не говорит о вычислении взаимной корреляции.

Вот это то меня и пугает. Ибо это и есть математическая основа любого распознавания.
Цитата(Rst7 @ Oct 25 2008, 12:54) *
А кто ее отбрасывает и кто ее считает? 32 результата после Хартли суть 15 пар значений, которые определяют мощность каждой спектральной составляющей и постоянку, которую отбрасываем.

Ага. Вот только основная мощность фонемы сосредоточена в частотах от 500 Hz... Мощность,в этом контексте, показывает что "за пределами" сигнала практически нет, а не то, что это кртитерий распознавания...
Цитата(Rst7 @ Oct 25 2008, 12:54) *
А причем тут вейвлеты?

А при том, что это отображение во многих случаях(вот как сдесь) эффективнее FCT(или FHT). Причем ни для быстрой корреляции ни для, непонятно для чего примененного, спектра мощности оно не потребует туда-сюда переходов к комплексным числам, как и Хартли.
Цитата(Rst7 @ Oct 25 2008, 12:54) *
Отбрасывать надо пол-спектра именно при DFT (Фурье), на входе которого только действительные числа. Тогда спектр зеркально симметричен. Мы же, для оптимизации, пользуем DHT (Хартли), которое именно под это и заточено - под обработку действительных исходных данных.

Вы меня совершенно не поняли. Я про отброс частот 0..400Hz которые обрабатываются "напрасно"...
Цитата(Rst7 @ Oct 25 2008, 12:54) *
К Вам это тоже относится smile.gif

Разумеется. Только не в этом случае. smile.gif
Rst7
Цитата
ну так алгоритм принципиально глупый


Да ну? А я, например, считаю, что алгоритм весьма не глуп. Вычисляя спектр мощности мы выбрасываем из сигнала то, что не несет информации (например, фазу сигнала). Затем ищем ближайший из известных спектров.

А вот что Вы предлагаете - мне пока не понять. Вы предлагаете вычислять корреляционную функцию заранее известных сигнало прямо c входными семплами??? И что же Вы получите на выходе? Банально, что делать с фазой сигнала, которая не несет информации, но может сильно меняться?
defunct
Цитата(DRUID3 @ Oct 25 2008, 14:14) *
Вы меня совершенно не поняли. Я про отброс частот 0..400Hz которые обрабатываются "напрасно"...

Вы вероятно упустили что Fd у нас 3.2kHz, а не 8, т.е. мы отбрасываем 0..100Hz, а не 0..400Hz.

Цитата(DRUID3 @ Oct 25 2008, 12:37) *
1) считать спектр мощности при этом теряя всю информацию о фазовой составляющей!!!???

Объясните нам темным зачем нужна фазовая составляющая? Если она для каждой выборки (32 точки) будет случайным числом.
Огурцов
Цитата(DRUID3 @ Oct 25 2008, 11:14) *
ну так алгоритм принципиально глупый скажу я Вам

Мне вот что подумалось, DRUID3, Вы наверно знаете что-то энтакое...но нам не говорите. Но намекаете постоянно. Чего уж там церемониться, режьте правду-матку, прямо в лоб, а не какими-то намеками, которые мы не все равно ж не сможем понять.
Rst7
Ну что, сделал я поиск ближайшего спектра, заодно пооптимизировал остальное (в частности, сумму квадратов считаю прямо в финальных бабочках DHT, в результате получение 15ти квадратов мощностей из исходных 32х выборок сигнала занимает 2634 такта, причем заодно я нахожу максимальное значение мощности для последующей нормализации).

Ну а нормализация с извлечением корня и поиск ближайшего из 25ти спектров занимает 6924 6482 такта. Основное время, как понимаете, занимает именно поиск ближайшего. В принципе, есть одна идея насчет оптимизации этого поиска, но это потом, когда получится остальное.

С другой стороны, суммарно имеем менее 10000 тактов, что при тактовой, скажем, 8МГц - чуть больше миллисекунды. А выборка 32х точек - 10мс.

Исходник и листинг в аттаче.
Нажмите для просмотра прикрепленного файла

PS Ждем спектров wink.gif
PPS И еще немножко оптимизировал, аттач положил новый.
Огурцов
Мучал весь вечер БПФ, результат - чуть выше нуля. Нормирование мощностей его еще ухудшило. Обучение приводит к усреднению и получается, чем больше образцов, тем хуже результат. Короткие блоки (менее 32..64 выборки при 8кГц) практически вообще не работают. В общем, предполагаю, что Фурье в чистом виде и иже с ними для решения задачи совершенно не подходит.
Все имхо.


http://www.tspu.tula.ru/res/lang/yazykozn/jaz_zn_6.htm

http://offline.computerra.ru/1997/226/938/
Огурцов
http://prostopr.ucoz.ru/publ/1-1-0-5
ATLab
Цитата(Огурцов @ Oct 27 2008, 10:58) *
Мучал весь вечер БПФ, результат - чуть выше нуля...В общем, предполагаю, что Фурье в чистом виде и иже с ними для решения задачи совершенно не подходит.

Мне нравится Ваш подход: сначала делать, а потом думать. smile.gif

Еще раз напоминаю, есть книжки по обработке речи. Я листал "Цифровая обработка речевых сигналов"
Рабинера и Шафера еще лет 15-20 назад. Впечатлился.
Для ленивых нашел ссылку в инете: http://dsp-book.narod.ru/R_Sh/R_Sh.htm
Rst7
Цитата
сначала делать, а потом думать.


Ну не знаю. defunct предложил алгоритм для реализации. Ссылался на работающий софт. Значит, знает что-то? Я просто реализовал то, что он описал словами.
Огурцов
Цитата(ATLab @ Oct 27 2008, 04:30) *
Мне нравится Ваш подход: сначала делать, а потом думать.

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

Книжка отличная, правда при беглом просмотре я не нашел решения. В принципе, я пытался реализовать канал кодер-декодер, примерно так, как описано там и в линках выше. Из самого интересного, пожалуй, когда получилось закодировать женский голос мужским тембром. Качества, как я уже говорил, еще нет, речь на грани различения, при том, что в английском, поэтому пока выложить нечего. Следующим этапом попробую Фурье "наоборот".
defunct
Цитата(Огурцов @ Oct 27 2008, 03:58) *
Короткие блоки (менее 32..64 выборки при 8кГц) практически вообще не работают.

для 8kHz 10ms выборка - 80 точек.

Цитата
Мне нравится Ваш подход: сначала делать, а потом думать.

Метод проверен на PC модели - работает.
А подстроить T выборки и Fd (когда уже есть реализация) дело нехитрое.
ATLab
Цитата(defunct @ Oct 27 2008, 21:30) *
Метод проверен на PC модели - работает.
А подстроить T выбрки и Fd - когда уже есть реализация дело нехитрое.

Не знаю... Что-то мне все же не очень верится.
Буду искренне рад, если получится!
Огурцов
Цитата(defunct @ Oct 27 2008, 11:30) *
для 8kHz 10ms выборка - 80 точек.
Метод проверен на PC модели - работает.

Правильно. Одно дело знать, другое - проверить. Т.е. как вариант, размер блока напрашивается в 128 или 256 отсчетов. И цифра красивая.
ATLab
Ну и где ваш recognition?
Вышо "как всегда"?
defunct
Цитата(ATLab @ Nov 2 2008, 02:59) *
Ну и где ваш recognition?

Пока оттянут мировой финансовой заварушкой. sad.gif
DRUID3
Цитата(Rst7 @ Oct 25 2008, 14:08) *
Да ну? А я, например, считаю, что алгоритм весьма не глуп. Вычисляя спектр мощности мы выбрасываем из сигнала то, что не несет информации (например, фазу сигнала).

Нет, ну Вы думаете что пишете??? 07.gif Дак зачем это придумали, раз оно информации не несет??? Это, видимо, Вы выхватили из скупословного пояснения к работе графических или видео кодеков? Угадал?
Цитата(Rst7 @ Oct 25 2008, 14:08) *
Затем ищем ближайший из известных спектров.

krapula.gif
Цитата(Rst7 @ Oct 25 2008, 14:08) *
А вот что Вы предлагаете - мне пока не понять.

Ну вначале я предлагаю подумать...
Цитата(Rst7 @ Oct 25 2008, 14:08) *
Вы предлагаете вычислять корреляционную функцию заранее известных сигнало прямо c входными семплами???

А есть обходной путь? biggrin.gif Соственно, откуда эти заморочки со спектрами. Корреляция(отличается от свертки тем, что одна из функций обращена во времени) - есть сама философская суть распознавания. Даже в разговорной речи: коррелируемость - взаимосвязь, похожесть. Посидите, "вручную" над примером из 4-х точек. Очень "обогащает восприятие". smile.gif . Почитайе книгу по ЦОС для школьнаГов - аФФтар Юкио Сато - Обработка сигналов, первое знакомство. Только реально почитайте, а не просмотрите - у него там потрясающий прием - объяснение корреляции как угла между двумя N-мерными векторами. Никогда не встречал такого доходчивой подачи материала, в "больших и толстых" книгах. Представляете как работает FIR-фильтр? Как он катиЦЦо по непрерывной череде отсчетов, поглощая один отсчет и выдавая в ответ тоже один. Скажу Вам по секрету это и есть коррелятор smile.gif ))) (ну или свертка, смотря как h(t) записать). И максимальные отсчеты у него на выходе тогда когда входной сигнал коррелирует с эталонным. Не поразительно ли, что на этих структурах можно строить в том числе и частотные фильтры! smile.gif Но... Свертку влоб вычислять довольно проблематично(ресурсов много надо). И вот отсюда и все эти пляски с заменой FIFO алгоритма, на блочные, с помощью однозначных отображений да еще притом таких, сложность вычисления которых порядка N*LogN или меньше. Вот собственно, зачем этот переход к Фурье, например. Это способ быстро вычислять корреляцию/свертку. Но теоремы о спектрах еще раз напомнить? Там нет ничего о том, что свертке во временнОй области соответствует перемножение в области энергетического спектра! Мало того, что Фурье (да и косинусное, у которого преимущество только в отсутствии комплексной арифметики) имеют кучу недостатков связанных с тем, что при их вычислении ищется корреляция с бесконечными функциями на конечном интервале, так Вы еще и теряете однозначность преобразования, добавляя при этом тучу лишних арифметических действий переходя к спектрам мощности. Причем выбрав абсолютно тупиковый метод, уже пошли споры об ассемблерной оптимизации. А потом удивление, "шото оно не тах работаеть" smile.gif .
Цитата(Rst7 @ Oct 25 2008, 14:08) *
И что же Вы получите на выходе? Банально, что делать с фазой сигнала, которая не несет информации, но может сильно меняться?

1024 раза прокомментировал - у Вас неверное представление о понятии спектра. Да и не так уж силно, всего-то 2*PI ))).
Цитата(defunct @ Oct 26 2008, 00:31) *
Вы вероятно упустили что Fd у нас 3.2kHz, а не 8, т.е. мы отбрасываем 0..100Hz, а не 0..400Hz.

Это с какой такой радости??? 07.gif Неужели голосовой тракт подстраивается под частоту дискретизации???

Вот смотрите, я играю на балалайке. Допустим у меня основной спектр лежит от 500 Hz до 5000 Hz - это обусловленно физической природой балалайки - длинной и упругостью струн, размером деревянного резонатора, моей игрой etc. Какая разница чем это оцифровывать диктофоном(8000 sps, даже все "не войдет") или студийным магнитофоном(96 000 sps)? Что изменится физическая модель балалайки? 07.gif
Цитата(defunct @ Oct 26 2008, 00:31) *
Объясните нам темным зачем нужна фазовая составляющая? Если она для каждой выборки (32 точки) будет случайным числом.

А почему это она будет случанйм числом??? 07.gif ????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????
Вот ежели сигнал с радара распознавать она будет неслучайна, а в голосе случайна?
????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????
В чужую голову не заглянуть. я просто не могу понять как Вы это представляете. Но представляете неверно!
Амплитудная составляющая показывает отношение к амплитудам базисных функций а фазовая к их фазам (синус и еще один синус сдвинутый на 90 градусов smile.gif , если это Фурье). Откуда здесь случайность?
Если Вы имеете ввиду то, что система будет срабатывать с произвольным запаздыванием - так надо делать что бы этого небыло. Но неужели вы(3-и основных тут моска biggrin.gif ) не понимаете, что и амплитудные составляющие при произвольном запаздывании будут иные - ну там звук "е" принятый весь в виде колокольчика(по времени) или "с половины" даст другой спектр мощности.

Цитата(Огурцов @ Oct 26 2008, 01:23) *
Мне вот что подумалось, DRUID3, Вы наверно знаете что-то энтакое...но нам не говорите. Но намекаете постоянно. Чего уж там церемониться, режьте правду-матку, прямо в лоб, а не какими-то намеками, которые мы не все равно ж не сможем понять.

Ну, по-моему я русским по белому написал что применил бы FIR или, в крайнем случае, FWT, с отбрасыванием самой низкочастотной компоненты. Но насчет что-то этакого - Вы правы, да, признаюсь, я знаю курс математики за 10-11 класс...

P.S.: 2ATLab не надо давить аФФтАритетом "просмотренных" Вами в юности аФфтАроФФ. "двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"(А.Довженко) smile.gif

P.P.S.: Уже очень поздно, и меня задолбало пЕсать. Если что-то подал неполно - пишите, постараюсь ответить. А пока устремите ка свой взор сюда если все-таки не понравится путь с FIR...
defunct
Цитата(DRUID3 @ Nov 2 2008, 05:33) *
Вот ежели сигнал с радара распознавать она будет неслучайна, а в голосе случайна?

Вот ежели МК будет генерить сигнал и принимать его же отраженный, тогда имеет смысл измерять фазовую составляющию для определения расстояния до объекта.

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

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

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

Произвольном запаздывании чего? Fd будет выдержана точно, без каких-либо запаздываний.
Паузы между выборками (а не между отсчетами) возможны, ну и что с того? Равносильно старту сигнала в произвольный момент времени.
Спектр мощности чуть-чуть поплывет никто не спорит, но не настолько чтобы совпасть со спектром совершенно другого сигнала. имеется в виду что "e" принятый "с половины", будет все равно ближе к "e" "с начала", а не к "a" "с половины".

Цитата(DRUID3 @ Nov 2 2008, 05:33) *
Какая разница чем это оцифровывать диктофоном(8000 sps, даже все "не войдет") или студийным магнитофоном(96 000 sps)? Что изменится физическая модель балалайки? 07.gif

Очевидно, при одинаковом количестве отсчетов на выборку, изменится ширина полосы спектра,
При Fd 3.2kHz и выборке 32 отсчета - ширина одной полосы спектра составляет (Fd/32) = 100HZ, а не 400.
blackfin
Цитата(defunct @ Nov 2 2008, 07:46) *
Вместо километровых несодержащих полезной информации строк, состоящих из знаков "?", лучше все же поясните с какого боку Вы видите необходимость сохранения фазовой составляющей.
Для разрешения "спора" о необходимости сохранения фазы предлагаю всем желающим сделать в MATLAB'е следующий эксперимент:

1. Фрагмент речи длиной в несколько секунд записываем через микрофон с помощью звуковой карты.
2. Делим фрагмент на блоки по 32 (или 64,128,256..) сэмпла и далее обрабатываем поблочно.
3. Для каждого блока вычисляем FFT.
4. Для каждого блока обнуляем фазы всех гармоник.
5. Для каждого блока вычисляем IFFT.
6. Полученный фрагмент речи воспроизводим через звуковую карту.

Если речь при этом будет хорошо различима, то фазы гармоник при анализе голоса можно не учитывать.
Огурцов
Цитата(DRUID3 @ Nov 2 2008, 03:33) *
Ну, по-моему я русским по белому написал что применил бы FIR или, в крайнем случае, FWT, с отбрасыванием самой низкочастотной компоненты. Но насчет что-то этакого - Вы правы, да, признаюсь, я знаю курс математики за 10-11 класс...

Извините, за флудом, видимо, не заметил акцента. Посмотрел линк на WT - нечто похожее на часть моего диплома, который я защищал примерно в то время ))) . Если помните - говорил, что FT можно проводить не при помощи синусов, а при помощи меандра. Т.е. умножаем не на синус, а на меандр, т.е. на +1 и на -1, т.е. элементарно складываем/вычитаем, как и в WT. Теперь далее. То, о чем писал постом выше, про FT наоборот. Очень похоже. Т.е. преобразование имеет наибольшее разрешение на низких частотах, там, где максимальная мощность, т.е. результирующая мощность, видимо, должна получиться равномерной, в отличие от FT, когда мощность плавно, но круто спадает для более высоких гармоник. Только я имел ввиду линейный (n), а не 2^n шаг. Что должно дать высокое разрешение по низким частотам, хотя сложность будет пропорциональна квадрату размера блока. Размер блока, как и говорил, брать не более 256 отсчетов, тогда сумма 8-битных отсчетов уместится в два байта. Нужно пробовать. Мне кажется, мой вариант д.б. качественным, хотя автор WT должно быть прав и "это излишняя трата вычислительных ресурсов".
Rst7
Цитата
Для разрешения "спора" о необходимости сохранения фазы предлагаю всем желающим сделать в MATLAB'е следующий эксперимент


К сожалению, в таком варианте выходной сигнал будет с большими помехами в связи с тем, что на стыках IDFT будут выбросы. И они будут слышны, здорово забивая полезный сигнал. Что может быть истолковано как провал smile.gif

Предлагаю другой способ - пропустить речь через широкополосный фазовращатель, например, низкочастотный фазовращатель в SSB-формирователе с фазовым методом. Собственно, мне результат этого экперимента известен - никаких отличий не будет слышно wink.gif

А вот корреляции с исходными семплами уже не будет
ATLab
Цитата(DRUID3 @ Nov 2 2008, 13:33) *
P.S.: 2ATLab не надо давить...
И в мыслях не было! Мне интересно, чем это закончится.
А вдруг получится?
Огурцов
Собсна, вот так выглядит инверсное© ДПФ по меандру



зы: ВЧ слева, НЧ справа - так получилось
blackfin
Еще форум: Speech-recognition.
Огурцов
Картинка фразы "write down":



Сигнал предварительно обработан Yi = Xi^0.5*256
Частота 8кгц, размер блока - 64(8мc). 64 - это даже много, т.к. некоторые фонемы минимум в два раза короче, а неплохо бы еще иметь запас раза в два. Т.е. получается интересная штука - ВЧ звуки меняются быстро и для них блок должен быть короткий, НЧ звуки меняются медленно и для них блок должен быть длинный. Т.е. получается как бы два уровня (канала) или даже несколько, с разными блоками, один длиннее предыдущего. И WT как раз похож - там тоже каждый следующий уровень можно строить на предыдущем. Вопрос, как потом объединять в результат - видимо, тут простой корреляцией не обойтись.
Огурцов
Да, с частотой, видимо, какой-то косяк. Такое ощущение, что частота семплирования у карточки установилась раз в восемь ниже.
Вот здесь образцы http://users.swing.be/hdepra/home/P22/E-sounds.html
Rst7
Цитата(defunct @ Nov 2 2008, 04:31) *
Пока оттянут мировой финансовой заварушкой. sad.gif


Ну так что, может продолжим? Вроде отпускает уже...
defunct
Цитата(Rst7 @ Nov 21 2008, 15:19) *
Ну так что, может продолжим? Вроде отпускает уже...

По сути нам осталось оттестировать реализацию.
Для этого нужно собрать макет.. а возможности его собрать у меня до декабря не предвидится..
Пока все еще "на рогах".
Rst7
Цитата
По сути нам осталось оттестировать реализацию.Для этого нужно собрать макет..


По сути было бы неплохо, если бы Вы поделились набором спектров для сравнения.
sigmaN
Ну и что, тема окончательно заглохла?
А жаль...
На одном дыхании прочёл все 9 страниц. И как-бы непонятно полетит/не полетит...
VAHOO
да, мне тоже очень интересно этот раздел, я сейчас делаю такой девайс на ATmega88,
мне надо распознать 3 слово, микрофон через компаратор подключил на ножке INT0,
измеряю импулси и записиваю в EEPROM, но немогу найти алгоритм для нормализации
массива, если кто знает подскажите пожалуйста. После нормализации можно сравнить
эталоны.
sigmaN
Ну вы уже давно его делаете и есть на то отдельная ветка в форуме.
А тут люди вроде как более грамотно подошли к вопросу. Если бы мне хватало квалификации я бы и сам продолжил бы, но ни с AVR ни с ЦОС в нужной мере не знаком к сожалению.
Rst7
Цитата
Пока все еще "на рогах".


Ну что, не пора ли продолжить? wink.gif
ATLab
Цитата(Rst7 @ Jan 19 2009, 18:20) *
Ну что, не пора ли продолжить? wink.gif
Imho, не будет продолжения по нескольким причинам:
1. не сделать это (распознавание неизвестного диктора) на МК, вон MS не смогла довести это до ума в офисе, а тут какой-то МК.
2. пар ушел в свисток, а зверь "бодун" и прочее - отмазки.
muravei
Цитата(Rst7 @ Jan 19 2009, 11:20) *
Ну что, не пора ли продолжить? wink.gif

Тоже думаю, что ничего из этой затеи не получится. Дело не в АВР. А в том , что уважаемые господа "ищут не там где потеряли, а где светлее." Фурье тут никаким боком не подойдет, были намеки про вейвлеты, но они остались не замечеными.
Вообще это очень сложная задача: я как-то скачал несколько файлов с фразами , наговоренными разными "дикторами" . Так я сам смог разпознать некоторых говорунов с 5 раза,а я всю жизнь этим занимаюсь! smile.gif , а вы -АВР,АВР.
Visor
Цитата(ATLab @ Jan 20 2009, 06:31) *
Imho, не будет продолжения по нескольким причинам:
1. не сделать это (распознавание неизвестного диктора) на МК, вон MS не смогла довести это до ума в офисе, а тут какой-то МК.

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

http://www.smartelectron.ru/pr21.htm

это сделанно на PIC18F2320 , может и АВР делать smile.gif))
Rst7
Цитата(defunct @ Nov 22 2008, 04:33) *
По сути нам осталось оттестировать реализацию.


Up'ну ка я незаслуженно забытую тему. А то что-то нету креатива smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.