|
|
  |
Voice recognition with AVR |
|
|
|
Oct 21 2008, 16:41
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(Rst7 @ Oct 21 2008, 19:24)  Еще раз повторюсь, алгоритм надо рассматривать в комплексе. Ок предлагаю рассмотреть (даже не рассмотреть, а оценить потянет ли AVR) такой упрощенный алгоритм: 1. Зарание расчитать спектры гласных и согласных звуков (их будет упрощенно около 25) и хранить их во флеш. 2. Непрерывно оцифровывать входной сигнал с Fd = 3.2kHz (для 32xFFT на 10ms выборку, 100 выборок в секунду). 3. Для каждой выборки считать FFT в real-time и сравнивать с 25-ю эталонными спектрами. 4. При смене звука запоминать индекс предыдущего. 5. При отсутсвии совпадений с базовыми звуками - преобразовать все запомненные идексы в буквы и как рез-тат получить слово. Кратко: Непрерывная оцифровка 1 канала АЦП 3.2kHz 100 FFT на 32 точки за секунду. 2500 сравнений 32х байтных строк в секунду.
|
|
|
|
|
Oct 21 2008, 16:54
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Ок предлагаю рассмотреть 1. Ну видимо "заранее" - это вообще "зарание", так что живет отдельной жизнью и основной работе не мешает. 2. Не вопрос. А Fd=3.2 - так задумано? 3a (FFT) - вроде нормально, нет проблем. И вроде-бы недолго. Точно я могу сказать завтра. Кстати, обязательно ли FFT? Возможно ли DCT (ну дабы без комплексной части)? 3b (сравнения) - видимо, по методу наименьших квадратов? Или как? Уточните, плиз... 4 и 5 - ну это вроде тупая логика на 20-30 строк и ненамного больше тактов...
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Oct 21 2008, 18:03
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
Цитата(=GM= @ Oct 21 2008, 16:02)  Куда? Между вторым и третьим байтом. Ну ежели мы первый и второй решили вдруг отбросить. Или я не понял. Цитата(defunct @ Oct 21 2008, 16:12)  так ежкин кот, сказал же, отличие по скорости между 8x операндами и 16x операндами в 2 раза. До порядка далеко. Какжежтак ? 12/2 = 6. А не 2. И что, простите, дальше 10/6 или 6/2 ? Цитата(defunct @ Oct 21 2008, 16:41)  Непрерывная оцифровка 1 канала АЦП 3.2kHz Женщин в расчет не берем ? ) Я за 8kHz на входе(после DAC). Цитата(defunct @ Oct 21 2008, 16:41)  100 FFT на 32 точки за секунду. М.б. нужно, чтобы фонема полностью помещалась в буфере FFT ? Цитата(Rst7 @ Oct 21 2008, 16:54)  3b (сравнения) - видимо, по методу наименьших квадратов? Это хотя бы понятно как. Наверно, подойдет для начала.
|
|
|
|
|
Oct 21 2008, 20:23
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(Rst7 @ Oct 21 2008, 15:54)  3b (сравнения) - видимо, по методу наименьших квадратов? Или как? Уточните, плиз... Вместо евклидовой нормы можно попробовать применить чебышевскую, стоит оценить, т.к. разница может достигать 40%. Цитата(Огурцов @ Oct 21 2008, 17:03)  Между вторым и третьим байтом. Ну ежели мы первый и второй решили вдруг отбросить. Или я не понял. Первый и второй остаётся, третий и четвёртый - нули, можно отбросить.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Oct 21 2008, 20:34
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(Rst7 @ Oct 21 2008, 19:54)  2. Не вопрос. А Fd=3.2 - так задумано? Да так задумано. Если AVR справится с этой задачей, можно будет пробовать повышать Fd. Цитата 3a (FFT) - вроде нормально, нет проблем. И вроде-бы недолго. Точно я могу сказать завтра. Кстати, обязательно ли FFT? Возможно ли DCT (ну дабы без комплексной части)? Думаю возможно, но это будет FCT. Цитата 3b (сравнения) - видимо, по методу наименьших квадратов? Или как? Уточните, плиз... Есть над чем подумать. Метод наименьших квадратов - ресурсоемкий, конечно можно начать с него. Но думаю можно использовать нечто более простое, например сумму модулей (а не квадратов) отклонений как грубый метод оценки, он тоже сработает, и тут мы напроч избавимся от умножений. Цитата 4 и 5 - ну это вроде тупая логика на 20-30 строк и ненамного больше тактов... Тут согласен. Цитата(Огурцов @ Oct 21 2008, 21:03)  Какжежтак ? 12/2 = 6. А не 2. И что, простите, дальше 10/6 или 6/2 ? 9/2 = 4.5! это только умножение! про большинство остальных операций уже упоминалась разница - ровно в 2 раза. на некоторых операциях таких как "деление на определеннй коэффициент" можно выиграть в скорости. Цитата Женщин в расчет не берем ? ) Я за 8kHz на входе(после DAC). пока нет - не берем. пока мы хотим проверить что AVR в стостоянии распознать одного мужика
|
|
|
|
|
Oct 21 2008, 21:06
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
Цитата(defunct @ Oct 21 2008, 20:34)  9/2 = 4.5! это только умножение! Ок, вот вам объективная граница одного порядка - sqrt(10) ~ 3.16 - одинаково далеко отстоит как от единицы, так и от десятки. Для двух порядков, соответственно ~31.6 снизу и ~316 сверху. Цитата(defunct @ Oct 21 2008, 20:34)  про большинство остальных операций уже упоминалась разница - ровно в 2 раза. Ну да. Мы еще про деление не говорили. И как-то про 32-разрядное умножение больше не вспоминаем. А если какой-нибудь sin(x)/x по ходу потребуется - на половине работы камень менять ? Нет уж, лучше перезаложиться, а потом, после решения, оптимизировать, чем сначала мучительно оптимизировать и таки не вписаться. Нет, но я не исключаю, что повезет и AVR хватит. Цитата(defunct @ Oct 21 2008, 20:34)  пока нет - не берем. пока мы хотим проверить что AVR в стостоянии распознать одного мужика Жаль. А у меня кодеки на 8kHz без дела валяюцо - как раз для умного выключателя. В сортир. Ну разве что только самому монопольно пользоваться ) Цитата(defunct @ Oct 21 2008, 20:34)  Есть над чем подумать. Метод наименьших квадратов - ресурсоемкий, конечно можно начать с него. Если нужно привести результирующие данные к одному байту, тогда квадрат умножение не страшно. У нас 2500 тактов на семпл и два такта погоды не сделают - в остальных местах затыки ожидаются посерьезней. Вообще, м.б. нейросеть ? НС по словарю очень хорошо работает.
|
|
|
|
|
Oct 21 2008, 21:21
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(Огурцов @ Oct 22 2008, 00:06)  Ок, вот вам объективная граница одного порядка - sqrt(10) ~ 3.16 - одинаково далеко отстоит как от единицы, так и от десятки. Для двух порядков, соответственно ~31.6 снизу и ~316 сверху. ЗачОт!  Давайте тогда для двух порядков сделаем sqrt(100) будет 10. Предлагаю не изобретать новых сущностей - на порядок это в 10 раз, и 16 битные операнды не замедлят вычисления на порядок. Цитата Ну да. Мы еще про деление не говорили. И как-то про 32-разрядное умножение больше не вспоминаем. это не нужно. Цитата Нет уж, лучше перезаложиться, а потом, после решения, оптимизировать, чем сначала мучительно оптимизировать и таки не вписаться. Нет, но я не исключаю, что повезет и AVR хватит. Неспортивно. Даже для ARM'а эту задачу уже неинтересно рассматривать, т.к. уже есть рабочие решения. К тому же мы хотим просто оценить - сможет/не сможет конкретно AVR. Цитата Жаль. А у меня кодеки на 8kHz без дела валяюцо - как раз для умного выключателя. В сортир. Ну разве что только самому монопольно пользоваться ) А что мешает эти же кодеки пользовать с Fd 3.2? ;> Цитата Вообще, м.б. нейросеть ? НС по словарю очень хорошо работает. Вы серьезно? Реально НС в AVR уложить?
|
|
|
|
|
Oct 21 2008, 21:49
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
Цитата(Petka @ Oct 21 2008, 21:20)  2. А вот почему Вам нужны именно 32битные операции? Не мне - см. выше. Я говорил про 16x Цитата(Petka @ Oct 21 2008, 21:20)  Однако сейчас жизнь такая, что проще поставить "DSP на выключатель". И дешевле (экономия на толковых программистах). См. выше - про и был первый пост. Про цену труда даже говорить не приходится. А про цены на камни я сказал - цена одного порядка (с) Но кстати, я подумал некоторое время назад - даже при одинаковой цене какой-нибудь восьминогий AVR выигрывает, например, в том же выключателе (только не с голоса) - он будет горадо более надежен ввиду низкой тактовой, чем ARM на 200MHz с 200 ногами. Цитата(defunct @ Oct 21 2008, 21:21)  на порядок это в 10 раз В природе чаще встречаются дробные величины. Цитата(defunct @ Oct 21 2008, 21:21)  Неспортивно. Даже для ARM'а эту задачу уже неинтересно рассматривать, т.к. уже есть рабочие решения. Так зачем искать решение, если оно существует ? (с) Цитата(defunct @ Oct 21 2008, 21:21)  Вы серьезно? Реально НС в AVR уложить? Не вопрос, если сможете FFT уложить, так и НС уложится. Более того, настроенную под конкретный словарь НС можно будет развернуть (на PC) в код, который и выполнять на AVR - будет на порядок (с) быстрее, чем работать с данными описывающими НС. Кроме того, на большом словаре наименьшие квадраты и разные другие последовательные алгоритмы будут существенно тормозить, в отличие от параллельной НС. В смысле параллельного поиска решения конечно, а не выполнения инструкций проца.
|
|
|
|
|
Oct 22 2008, 05:14
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Думаю возможно, но это будет FCT. Ну в смысле Fast DCT? Слово Fast даже не обсуждается  Цитата Глупо считать 32битное DCT Конечно, никто 32 бита не будет использовать. Видимо, будет 10 бит с гвардом в остальные 6. Это я сегодня покручу. Цитата Однако сейчас жизнь такая, что проще поставить "DSP на выключатель". И дешевле (экономия на толковых программистах). Вот если это будет как раз выключатель, то надо ужиматься на полную. В серии все отобьется
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Oct 22 2008, 08:17
|

山伏
    
Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294

|
Цитата(ATLab @ Oct 19 2008, 04:34)  Ой, ну автор насмешил! На PC эта хрень толком не работает, а он на АВР-ке собрался... AVRка дает достаточно MIPS 8bit для таких задач... Цитата(ATLab @ Oct 19 2008, 04:34)  Речь - это не DTMF, таким наскоком ее не взять. Люди разные, голоса разные, а говорят одно и то же - фурье ничем не поможет. Да даже один и тот же голос, в разном настроении и с разной громкостью даст разные спектры. Читайте про цифровую обработку речи. Мне, когда ее почитал, чуть не вывихнув мозги с кепстрами, стало понятно - ловить тут нечего. Мой совет - поставьте такие мозги на полку... Они не пригодяЦЦо...  А по-делу - если поделить один отсчет функции корреляции на отсчет образованный произведением корней из суммы квадратов корней эталонной и исследуемых функций на интервале(по сути модулей векторов) - получим значение корреляции не зависящее от амплитуды, а лишь от формы функции, и лежащее в интервале [0..1] - т.н. коэффициент корреляции. Цитата(defunct @ Oct 19 2008, 07:46)  PS: Кстати для DTMF детекта FFT избыточно. При наличии помех - не так уж... Цитата(defunct @ Oct 19 2008, 07:46)  Это зависит от метода сравнения. В моем случае 20% - это много. Грубо не вдаваясь в детали - представим, что спектр входного сигнала отмасштабирован так, что интеграл разности спекторв входного сигнала и эталонного на отрезке от 0 до Fd будет минимальным. Полное совпадение - когда интеграл равен 0. Полное несовпадение - равен X. 20% подобия соотв. - 0.8*X. Нет уж, вдайтесь в детали. Я тоже занимался таким-же(искал корреляцию через RealFFT), но совсем не так!  И что-то мне подсказывает - Вы не на верном пути... Цитата(=GM= @ Oct 20 2008, 15:25)  Прошу простить джентльмены, что прерываю вашу высокоучёную беседу(:-), заинтересовало сравнение авр с арм
Неужто 8-битный авр и 32-битный арм различается всего в два раза? Что-то мне сомнительно, хотя Rst7 вроде можно доверять, э?(:-)
А вот интересно, во сколько раз будет разница между 8-битной авр и 32-битным дсп TMS320F2808 на команде, скажем, dmac, которая за один такт перемножает два первых знаковых 16-битных числа, лежащих в памяти, и добавляет это произведение к 32-битному аккмулятору АСС, и в том же такте также делает со вторыми знаковыми 16-битными числами, добавляя результат к 32-битному регистру Р?
Я понимаю, что по-хорошему надо бы написать пгм и посчитать такты, но может у кого-нибудь уже есть двойной МАС для авр? Блин, что за глупое радиолюбительское хвастовство!?  Поставлена задача. Для AVR она реализуема и точка. К чему этот треп у кого что длинее? Давайте еще SHARC вспомним. Цитата(zltigo @ Oct 20 2008, 17:49)  Даже для простого выключаталя света такое использовать уже сложнее, ибо нет команды на старт, а вырезать самостоятельно слова и не иметь гарантированой паузы после захвата слова уже контроллер явно не с произвольными попугаями требуется. В этом вопросе Вы ошибаетесь... P.S.:Кстати, хочу напомнить новичкам, что вейвлеты считаются не в пример быстрее чем FFT! просто вся классика ЦОС либо написана до широкого их развития либо с радиотехническим "уклоном" - а там применение Фурье неизбежно в любом случае ибо частотный ресурс распределяется именно с помощью этого преобразования...
--------------------
Нас помнят пока мы мешаем другим... //-------------------------------------------------------- Хороший блатной - мертвый... //-------------------------------------------------------- Нет старик, это те дроиды которых я ищу...
|
|
|
|
|
Oct 22 2008, 08:47
|
Профессионал
    
Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886

|
Цитата(Rst7 @ Oct 22 2008, 09:14)  Вот если это будет как раз выключатель, то надо ужиматься на полную. В серии все отобьется  Очень спорно. Пример: в оптических мышах используется DSP. Крупные серии позволяют делать масочные бескорпусные DSP "на заказ" при копеечной стоимости (оптические мышки в которых контроллер не самое главное стоят по 150р уже для конечного потребителя и в которых стоимость электроники не основное). Кроме того сделать "дешевле" это задача "китайцев". А у нас есть шанс конкурировать только в высоких технологиях, интеграции, качестве, инновациях. Цитата(Rst7 @ Oct 22 2008, 12:09)  Слушайте, а мы наверное один момент упустили. После FFT надо получить мощности на каждой частоте, т.е. sqrt(I*I+Q*Q), я прав? Абсолютно прав. правда sqrt можно не считать. (потом всё-равно в квадрат возводить)
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|