|
Voice recognition with AVR |
|
|
|
Oct 18 2008, 14:08
|
Группа: Новичок
Сообщений: 3
Регистрация: 11-10-08
Пользователь №: 40 864

|
Anybody has experience with voice recognition? I am looking for some code library and examples for AVR. All ideas are welcome. Thanks.
--------------------
|
|
|
|
|
 |
Ответов
|
Oct 23 2008, 13:50
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
Цитата(Rst7 @ Oct 23 2008, 13:19)  Ну что, вычисление мощностей с нормированием - это плюс 3200 тактов. Не понимаю, как вы считаете. Если даже преположить, что после, например, ДПФ будет два слова на выборку вместо одного, то мощность - это два умножения и сложение, т.е. где-то 5 тактов без пересылок для 8 бит, ну или 50 для 16 бит. Нормаирование - одно сравнение и одно умножение. Пусть еще столько же. Как удалось увличить эту цифру в 30 раз ? Цитата(Rst7 @ Oct 23 2008, 13:45)  Так что, слабо? На слабо меня не взять. А вот перспективной идеей - можно. Так что там, есть уже какие наработки ? Или выложить слабо (с) ?
|
|
|
|
|
Oct 23 2008, 18:20
|

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

|
Цитата(Огурцов @ Oct 23 2008, 16:50)  Не понимаю, как вы считаете. Если даже преположить, что после, например, ДПФ будет два слова на выборку вместо одного, то мощность - это два умножения и сложение, т.е. где-то 5 тактов без пересылок для 8 бит, ну или 50 для 16 бит. Нормаирование - одно сравнение и одно умножение. Пусть еще столько же. Как удалось увличить эту цифру в 30 раз ? Я не считаю. Это результат замера. А вот как Вам удалось получить "30 раз" я не знаю. Даже Ваша прикидка дает (50+50)*15=1500, и еще там одно деление 32 на 32, это 500 тактов, грубо говоря, и еще 15 квадратных корней, у меня получилось 56*15=840. Итого, 3340, даже больше, чем мой код  Другое дело, там прилично накладных расходов в связи с тем, что данные для каждой частоты расположены на выходе ДПХ не очень удачно для простой обработки. Но это, я думаю, можно будет устранить. Однако, больших чудес ждать не приходится. Ну и с другой стороны, эта часть кода имеет сложность O(n), так что если вдруг будем увеличивать количество точек, общий вес этой части уменьшится. Цитата На слабо меня не взять. А вот перспективной идеей - можно. Зачем Вам идеи? Вы же все знаете и все умеете?  Цитата Так что там, есть уже какие наработки ? Или выложить слабо (с) ? Уже готовитесь спереть? Пока выложить могу только эти две функции. Они Вам нужны?
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Oct 23 2008, 19:14
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
8x Код : C = A * A + B * B; +00000069: 0288 MULS R24,R24 Multiply signed +0000006A: 0190 MOVW R18,R0 Copy register pair +0000006B: 2411 CLR R1 Clear Register +0000006C: 01C9 MOVW R24,R18 Copy register pair 13: } +0000006D: 0F82 ADD R24,R18 Add without carry +0000006E: 1F93 ADC R25,R19 Add with carry Я насчитал 7 16x Код C = A * A + B * B; +00000069: 2744 CLR R20 Clear Register +0000006A: FD37 SBRC R19,7 Skip if bit in register cleared +0000006B: 9540 COM R20 One's complement +0000006C: 2F54 MOV R21,R20 Copy register +0000006D: 01CA MOVW R24,R20 Copy register pair +0000006E: 01B9 MOVW R22,R18 Copy register pair +0000006F: 940E0085 CALL 0x00000085 Call subroutine +00000071: 017B MOVW R14,R22 Copy register pair +00000072: 018C MOVW R16,R24 Copy register pair +00000073: 019E MOVW R18,R28 Copy register pair +00000074: 2744 CLR R20 Clear Register +00000075: FD37 SBRC R19,7 Skip if bit in register cleared +00000076: 9540 COM R20 One's complement +00000077: 2F54 MOV R21,R20 Copy register +00000078: 01CA MOVW R24,R20 Copy register pair +00000079: 01B9 MOVW R22,R18 Copy register pair +0000007A: 940E0085 CALL 0x00000085 Call subroutine +0000007C: 01DC MOVW R26,R24 Copy register pair +0000007D: 01CB MOVW R24,R22 Copy register pair +0000007E: 0EE8 ADD R14,R24 Add without carry +0000007F: 1EF9 ADC R15,R25 Add with carry +00000080: 1F0A ADC R16,R26 Add with carry +00000081: 1F1B ADC R17,R27 Add with carry 13: } +00000082: 01C7 MOVW R24,R14 Copy register pair
+00000083: 940C00A4 JMP 0x000000A4 Jump
+00000085: 9F62 MUL R22,R18 Multiply unsigned +00000086: 01D0 MOVW R26,R0 Copy register pair +00000087: 9F73 MUL R23,R19 Multiply unsigned +00000088: 01F0 MOVW R30,R0 Copy register pair +00000089: 9F82 MUL R24,R18 Multiply unsigned +0000008A: 0DE0 ADD R30,R0 Add without carry +0000008B: 1DF1 ADC R31,R1 Add with carry +0000008C: 9F64 MUL R22,R20 Multiply unsigned +0000008D: 0DE0 ADD R30,R0 Add without carry +0000008E: 1DF1 ADC R31,R1 Add with carry +0000008F: 9F92 MUL R25,R18 Multiply unsigned +00000090: 0DF0 ADD R31,R0 Add without carry +00000091: 9F83 MUL R24,R19 Multiply unsigned +00000092: 0DF0 ADD R31,R0 Add without carry +00000093: 9F74 MUL R23,R20 Multiply unsigned +00000094: 0DF0 ADD R31,R0 Add without carry +00000095: 9F65 MUL R22,R21 Multiply unsigned +00000096: 0DF0 ADD R31,R0 Add without carry +00000097: 2799 CLR R25 Clear Register +00000098: 9F72 MUL R23,R18 Multiply unsigned +00000099: 0DB0 ADD R27,R0 Add without carry +0000009A: 1DE1 ADC R30,R1 Add with carry +0000009B: 1FF9 ADC R31,R25 Add with carry +0000009C: 9F63 MUL R22,R19 Multiply unsigned +0000009D: 0DB0 ADD R27,R0 Add without carry +0000009E: 1DE1 ADC R30,R1 Add with carry +0000009F: 1FF9 ADC R31,R25 Add with carry +000000A0: 01BD MOVW R22,R26 Copy register pair +000000A1: 01CF MOVW R24,R30 Copy register pair +000000A2: 2411 CLR R1 Clear Register +000000A3: 9508 RET Subroutine return Где-то 108. Цитата(Rst7 @ Oct 23 2008, 18:20)  и еще там одно деление 32 на 32, это 500 тактов Да деление, но оно одно на весь результат. Сколько там, на 8 отсчетов, 16 или 32 - сколько берем, еще не определились. Если брать много, то несколько фонем может объединиться, если брать мало, число "фонем" может возрасти, т.к. вроде бы спектр некоторых фонем динамический, и фонема получится состоящая как бы из нескольких частей. Несмотря на свое определение. Цитата(Rst7 @ Oct 23 2008, 18:20)  и еще 15 квадратных корней, у меня получилось 56*15=840. А зачем корни ? Какая разница, сравнивать значение или его корень ? И даже с корнем - тоже один корень на выборку. Цитата(Rst7 @ Oct 23 2008, 18:20)  Уже готовитесь спереть? Нет, пока думаю, скачивать файл или не скачивать ) Цитата(Rst7 @ Oct 23 2008, 18:20)  Пока выложить могу только эти две функции. Они Вам нужны? Я ж не один здесь. Надеюсь. Не подойдет мне, может кому другому подойдет.
Сообщение отредактировал Огурцов - Oct 23 2008, 19:27
|
|
|
|
|
Oct 23 2008, 19:54
|

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

|
Цитата(Огурцов @ Oct 23 2008, 22:14)  8x Код : C = A * A + B * B; +00000069: 0288 MULS R24,R24 Multiply signed ... Я насчитал 7 Чипуха какая-то. Очевидно что для двух * должно быть две команды MUL. Подозреваю такая же чипуха у вас и в 16x. Теперь понятно откуда у вас берется порядок на 16x.
|
|
|
|
|
Oct 23 2008, 20:26
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
Цитата(defunct @ Oct 23 2008, 19:54)  Чипуха какая-то. Очевидно что для двух * должно быть две команды MUL. Действительно, косячище. Это мы с другом оптимизатором наоптимизили. Код +00000069: 8199 LDD R25,Y+1 Load indirect with displacement +0000006A: 8189 LDD R24,Y+1 Load indirect with displacement +0000006B: 0298 MULS R25,R24 Multiply signed +0000006C: 0190 MOVW R18,R0 Copy register pair +0000006D: 2411 CLR R1 Clear Register +0000006E: 819A LDD R25,Y+2 Load indirect with displacement +0000006F: 818A LDD R24,Y+2 Load indirect with displacement +00000070: 0298 MULS R25,R24 Multiply signed +00000071: 01C0 MOVW R24,R0 Copy register pair +00000072: 2411 CLR R1 Clear Register +00000073: 0F28 ADD R18,R24 Add without carry +00000074: 1F39 ADC R19,R25 Add with carry +00000075: 833C STD Y+4,R19 Store indirect with displacement +00000076: 832B STD Y+3,R18 Store indirect with displacement 21, из них 12 на загрузку/выгрузку. Итого 9 вместо 7. Цитата(defunct @ Oct 23 2008, 19:54)  Подозреваю такая же чипуха у вас и в 16x. Для 16x несколько лучше, в процентном оношении - стало 151, из них 16 на загрузку/выгрузку. С другой стороны вот это Код LDD R25,Y+1 Load indirect with displacement LDD R24,Y+1 можно будет заменить на Код LDD R25,Y+1 Load indirect with displacement MOV R24,R25 И вообще, с оптимизацие того же ДПФ оптимизатор скорее всего не справится...
Сообщение отредактировал Огурцов - Oct 23 2008, 20:20
|
|
|
|
|
Oct 23 2008, 22:06
|

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

|
Цитата(Огурцов @ Oct 23 2008, 23:26)  Для 16x несколько лучше, в процентном оношении - стало 151, из них 16 на загрузку/выгрузку. Моя цифра - 38 (32-х битный результат): Код .def AL = R24 .def AH = R25
.def z_reg = R2
.def u32_b0 = R18 .def u32_b1 = R19 .def u32_b2 = R20 .def u32_b3 = R21
; --> ax 16 bit operand ; <-- 32 bit result u32_xx .MACRO sqr_ax mul ah, ah movw u32_b3: u32_b2, r1:r0
mul al, al movw u32_b1: u32_b0, r1:r0
mul ah, al
add u32_b1, r0 adc u32_b2, r1 adc u32_b3, z_reg
add u32_b1, r0 adc u32_b2, r1 adc u32_b3, z_reg .endmacro
.cseg ldi AL, Low(RAMEND) out SPL, AL ldi AL, High(RAMEND) out SPH, AL
clr z_reg
; начинаем счет таков отсюда ;-----> C = A * A + B * B (a=1234, b=567, c should be 1844245) ldi al, Low(1234) ldi ah, High(1234) sqr_ax ; A * A
movw r5:r4, u32_b1:u32_b0 movw r7:r6, u32_b3:u32_b2
ldi al, Low(567) ldi ah, High(567) sqr_ax ; B * B
add u32_b0, r4 adc u32_b1, r5 adc u32_b2, r6 adc u32_b3, r7 ; A * A + B * B Результат в u32_xx (b3 - MSB, b0 - LSB).
|
|
|
|
Сообщений в этой теме
Johan Krava Voice recognition with AVR Oct 18 2008, 14:08 Flasher Ну да, так тебе все и выложили, и еще в исходниках... Oct 18 2008, 18:42 defunct Key word - FFT. Oct 18 2008, 21:13  Flasher Цитата(defunct @ Oct 19 2008, 01:13) Key ... Oct 18 2008, 21:16   defunct Цитата(Flasher @ Oct 19 2008, 00:16) ага,... Oct 18 2008, 22:11    DRUID3 Цитата(defunct @ Oct 19 2008, 01:11) Ну а... Oct 18 2008, 23:35     ATLab Ой, ну автор насмешил! На PC эта хрень толком ... Oct 19 2008, 01:34      Огурцов Цитата(ATLab @ Oct 19 2008, 01:34) Мне, к... Oct 19 2008, 01:39       NetTracer Цитата(Огурцов @ Oct 19 2008, 04:39) М.б.... Oct 19 2008, 10:20        Огурцов Цитата(NetTracer @ Oct 19 2008, 10:20) Фи... Oct 19 2008, 13:27      defunct Цитата(ATLab @ Oct 19 2008, 04:34) Речь -... Oct 19 2008, 04:46 Flasher ну с этого готового проекта я как-то начинал... ре... Oct 19 2008, 10:54 NetTracer Цитата(Flasher @ Oct 19 2008, 13:54) ... ... Oct 19 2008, 11:36 ARV а что скажете по этому поводу: http://qrx.narod.ru... Oct 19 2008, 16:05 Rst7 ЦитатаЭто восьмибитные мипсы.
Ага... Чернила для ... Oct 19 2008, 16:27 Огурцов Цитата(Rst7 @ Oct 19 2008, 16:27) Ага... ... Oct 19 2008, 18:11  Rst7 Цитата(Огурцов @ Oct 19 2008, 21:11) Чего... Oct 19 2008, 18:38   Огурцов Цитата(Rst7 @ Oct 19 2008, 18:38) Мы тут ... Oct 19 2008, 20:04   =GM= Прошу простить джентльмены, что прерываю вашу высо... Oct 20 2008, 12:25 Rst7 ЦитатаВообще, я с 16-битными операндами сравнивал.... Oct 20 2008, 05:49 Огурцов Цитата(Rst7 @ Oct 20 2008, 05:49) Да ну? ... Oct 20 2008, 11:25  blackfin Цитата(Огурцов @ Oct 20 2008, 15:25) Пото... Oct 20 2008, 11:36 Rst7 ЦитатаНеужто 8-битный авр и 32-битный авр различае... Oct 20 2008, 12:35 =GM= Цитата(Rst7 @ Oct 20 2008, 11:35) Ну зайд... Oct 20 2008, 12:37 blackfin Цитата(Rst7 @ Oct 20 2008, 16:35) PS Там ... Oct 20 2008, 13:03 Огурцов Цитата(Rst7 @ Oct 20 2008, 12:35) Мы врод... Oct 20 2008, 14:15 Rst7 http://electronix.ru/forum/index.php?s=&am...st... Oct 20 2008, 12:42 Rst7 Цитатаодну и ту же картинку
Безусловно. Посему, д... Oct 20 2008, 13:10 Rst7 ЦитатаВы.
Не передергивайте. Вы начали про ... Oct 20 2008, 14:23 zltigo Цитата(Rst7 @ Oct 20 2008, 16:23) И имеет... Oct 20 2008, 14:49  Rst7 Цитата(zltigo @ Oct 20 2008, 17:49) Надо ... Oct 20 2008, 18:26   zltigo Цитата(Rst7 @ Oct 20 2008, 20:26) Точно. ... Oct 20 2008, 18:30 Огурцов Цитата(Rst7 @ Oct 20 2008, 14:23) Не пере... Oct 20 2008, 16:07  defunct Цитата(Огурцов @ Oct 20 2008, 19:07) Ну т... Oct 20 2008, 16:35   Огурцов Цитата(defunct @ Oct 20 2008, 16:35) Так ... Oct 20 2008, 17:15    defunct Цитата(Огурцов @ Oct 20 2008, 20:15) Расп... Oct 20 2008, 17:37     Огурцов Цитата(defunct @ Oct 20 2008, 17:37) mul ... Oct 20 2008, 19:28      defunct Цитата(Огурцов @ Oct 20 2008, 22:28) Ну т... Oct 21 2008, 14:11       Огурцов Цитата(defunct @ Oct 21 2008, 14:11) но н... Oct 21 2008, 15:53        =GM= Цитата(Огурцов @ Oct 21 2008, 14:53) Не в... Oct 21 2008, 16:02         Огурцов Цитата(=GM= @ Oct 21 2008, 16:02) Куда?
М... Oct 21 2008, 18:03        defunct Цитата(Огурцов @ Oct 21 2008, 18:53) Не з... Oct 21 2008, 16:12     =GM= Цитата(defunct @ Oct 20 2008, 16:37) С ог... Oct 21 2008, 14:56      defunct Цитата(=GM= @ Oct 21 2008, 17:56) Если с ... Oct 21 2008, 15:01 Rst7 Нет, народ. Это все измерение пиписек. При таком п... Oct 21 2008, 16:07 Rst7 Цитатаговорил что щелкал FFT на m48 в real-time.
... Oct 21 2008, 16:24 defunct Цитата(Rst7 @ Oct 21 2008, 19:24) Еще раз... Oct 21 2008, 16:41 Rst7 ЦитатаОк предлагаю рассмотреть
1. Ну видимо ... Oct 21 2008, 16:54 =GM= Цитата(Rst7 @ Oct 21 2008, 15:54) 3b (сра... Oct 21 2008, 20:23 defunct Цитата(Rst7 @ Oct 21 2008, 19:54) 2. Не в... Oct 21 2008, 20:34  Огурцов Цитата(defunct @ Oct 21 2008, 20:34) 9/2 ... Oct 21 2008, 21:06   Petka Цитата(Огурцов @ Oct 22 2008, 01:06) Ок, ... Oct 21 2008, 21:20    Огурцов Цитата(Petka @ Oct 21 2008, 21:20) 2. А в... Oct 21 2008, 21:49   defunct Цитата(Огурцов @ Oct 22 2008, 00:06) Ок, ... Oct 21 2008, 21:21 Rst7 ЦитатаДумаю возможно, но это будет FCT.
Ну в смыс... Oct 22 2008, 05:14 blackfin Цитата(Rst7 @ Oct 22 2008, 09:14) Ну в см... Oct 22 2008, 05:41  Огурцов Можно я еще встряну ? Вы о каких герцах говорите, ... Oct 22 2008, 19:23 Petka Цитата(Rst7 @ Oct 22 2008, 09:14) Вот есл... Oct 22 2008, 08:47 Rst7 Цитатаblackfin ... за ~300 тактов CPU.
AVR - боль... Oct 22 2008, 06:27 Rst7 Цитата3. Для каждой выборки считать FFT в real-tim... Oct 22 2008, 08:09 defunct Цитата(Rst7 @ Oct 22 2008, 11:09) Слушайт... Oct 22 2008, 15:38 DRUID3 Цитата(ATLab @ Oct 19 2008, 04:34) Ой, ну... Oct 22 2008, 08:17 Rst7 ЦитатаАбсолютно прав.
Я бы, конечно, предпочел от... Oct 22 2008, 08:51 DRUID3 Цитата(Rst7 @ Oct 22 2008, 11:51) Я бы, к... Oct 22 2008, 09:03 Petka Цитата(Rst7 @ Oct 22 2008, 12:51) Я бы, к... Oct 22 2008, 09:09  DRUID3 Цитата(Petka @ Oct 22 2008, 12:09) Ну так... Oct 22 2008, 09:14 Rst7 Цитатаа зачем Вам спектр мощности?
Я может не так... Oct 22 2008, 09:45 Rst7 ЦитатаНе совсем, просто это отразится на методе ср... Oct 22 2008, 15:51 Rst7 ЦитатаМожно я еще встряну ?
Конечно нельзя, что з... Oct 23 2008, 10:22 defunct Цитата(Rst7 @ Oct 23 2008, 13:22) Теперь ... Oct 23 2008, 11:16  Огурцов А как нормировать по частоте и ширине спектра ? Ве... Oct 23 2008, 11:42 Rst7 ЦитатаДа, в заренее заготовленные кстати не забыва... Oct 23 2008, 11:38 defunct Цитата(Rst7 @ Oct 23 2008, 14:38) все мощ... Oct 23 2008, 15:07 Rst7 ЦитатаИ это будет выигрыш на порядок.
Ну покажите... Oct 23 2008, 12:01 Огурцов Цитата(Rst7 @ Oct 23 2008, 12:01) Ну пока... Oct 23 2008, 13:38  blackfin Цитата(Огурцов @ Oct 23 2008, 17:38) ...ж... Oct 23 2008, 13:51   Огурцов Если из этих трех - патологоанатом. Наблюдающий. Oct 23 2008, 13:59      =GM= Цитата(Огурцов @ Oct 23 2008, 19:26) 21, ... Oct 23 2008, 22:06       Огурцов Цитата(=GM= @ Oct 23 2008, 22:06) Вообще ... Oct 23 2008, 22:32         =GM= Цитата(defunct @ Oct 23 2008, 21:18) Уже ... Oct 23 2008, 23:07          defunct Цитата(=GM= @ Oct 24 2008, 02:07) Не скаж... Oct 23 2008, 23:34           =GM= Цитата(defunct @ Oct 23 2008, 22:34) Поче... Oct 24 2008, 10:53            defunct Цитата(=GM= @ Oct 24 2008, 13:53) Два, по... Oct 24 2008, 11:08 Rst7 ЦитатаНу эта...
Ну то. Так что, слабо? Давайте, В... Oct 23 2008, 13:45 Rst7 Господа, ну вы что, думаете, что я не знаю, как бы... Oct 24 2008, 03:35 Rst7 Для тех, кому не терпится, выкладываю проект и лис... Oct 24 2008, 10:46 Rst7 Цитата brpl __store
com RxH
neg RxL
__store:... Oct 24 2008, 11:29 defunct Цитата(Rst7 @ Oct 24 2008, 14:29) Чтото м... Oct 24 2008, 11:58 Rst7 ЦитатаВот мой вариант перемножения (a1,a0)*(a1,a0)... Oct 24 2008, 12:04 DRUID3 Господа оптимизаторы. Объясните мне, сирому, зачем... Oct 25 2008, 09:37 Rst7 Цитатасчитать спектр мощности при этом теряя всю и... Oct 25 2008, 09:54
2 страниц
1 2 >
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|