реклама на сайте
подробности

 
 
> FFT на асм для ARM7TDMI (AT91SAM7xx)
hd44780
сообщение Nov 15 2012, 08:05
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



На Си нашёл, вставил в программу - тормозит оно. Конечно, гораздо лучше, чем на AVR, но всё равно не айс.
Надо сделать аудио-анализатор. Сделать-сделал, осциллограммы рисует великолепно, рендер быстрый для дисплея написал, а с FFT проблемы.
А если ещё и стерео запустить - вообще ступор почти будет...

Нет ли у кого реализации на асме, типа как Чен для AVR-ов?
Сам я ейный ассемблер практически не знаю sad.gif .
Спасибо.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_Pasha
сообщение Nov 15 2012, 12:28
Сообщение #2


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



А заинлайнить BitShift() и Butterfly() слабо? sm.gif
Go to the top of the page
 
+Quote Post
ReAl
сообщение Nov 15 2012, 19:55
Сообщение #3


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(_Pasha @ Nov 15 2012, 14:28) *
А заинлайнить BitShift() и Butterfly() слабо? sm.gif
Когда там запилят уже fixed point в gcc? В С11 уже ж вроде попало. Или в 4.8 уже есть?
Сюда
Код
typedef int _Complex cmplx_t;

//cmplx_t a = 2 + 3I;
//cmplx_t b = -1 + 2I;

void foo(cmplx_t *px, cmplx_t *py, cmplx_t w, int len)
{
    while(len--) {
        cmplx_t temp = *px + *py * w;
        *py = *px - *py * w;
        *px = temp;
        ++px;
        ++py;
    }
}
arm-none-eabi-gcc -Os -S -mcpu=cortex-m3 -mthumb cmplx-int.c
CODE
foo:
push {r4, r5, r6, r7, r8, lr}
ldr r4, [sp, #24]
b .L2
.L3:
ldmdb r1, {r5, r8}
mul r7, r2, r5
mls r7, r3, r8, r7
mul r8, r2, r8
mla r5, r3, r5, r8
ldr ip, [r0, #-8]
ldr r6, [r0, #-4]
rsb r8, r7, ip
str r8, [r1, #-8]
add r7, ip, r7
rsb r8, r5, r6
adds r5, r6, r5
str r8, [r1, #-4]
str r7, [r0, #-8]
str r5, [r0, #-4]
.L2:
subs r4, r4, #1
adds r0, r0, #8
adds r1, r1, #8
cmp r4, #-1
bne .L3
pop {r4, r5, r6, r7, r8, pc}
ещё fixed point встроенный, так и вообще хорошо.
(правда это Cortex-M3, тут ещё mla/mls хорошо пошли)



Закат солнца вручную тоже нормально выглядит:
Код
#define FIXED_FACTOR (1<<12)

typedef int _Complex cmplx_t;

void foo(cmplx_t *px, cmplx_t *py, cmplx_t w, int len)
{
    while(len--) {
        cmplx_t temp = *py * w / FIXED_FACTOR;
        *px = *px + temp;
        *py = *px - temp;
        ++px;
        ++py;
    }
}
CODE

foo:
push {r4, r5, r6, r7, r8, lr}
ldr r4, [sp, #24]
b .L2
.L5:
ldmdb r1, {r5, r8}
mul r6, r2, r5
mls r6, r3, r8, r6
mul r8, r2, r8
mla r5, r3, r5, r8
cmp r6, #0
itt lt
addlt r6, r6, #4064
addlt r6, r6, #31
cmp r5, #0
ldr ip, [r0, #-8]
ldr r7, [r0, #-4]
itt lt
addlt r5, r5, #4064
addlt r5, r5, #31
add r6, ip, r6, asr #12
add r5, r7, r5, asr #12
str r6, [r0, #-8]
str r5, [r0, #-4]
str ip, [r1, #-8]
str r7, [r1, #-4]
.L2:
subs r4, r4, #1
adds r0, r0, #8
adds r1, r1, #8
cmp r4, #-1
bne .L5
pop {r4, r5, r6, r7, r8, pc}


(ой, ну по нормальному там не ++px; ++py; а раскрыв крыльев бабочки передавать надо)


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- hd44780   FFT на асм для ARM7TDMI (AT91SAM7xx)   Nov 15 2012, 08:05
- - _Pasha   Цитата(hd44780 @ Nov 15 2012, 11:05) На С...   Nov 15 2012, 08:20
- - hd44780   Нет, не на плавучке Выдрал у Геннадия - http://...   Nov 15 2012, 10:52
|- - Xenia   Цитата(hd44780 @ Nov 15 2012, 14:52) Выдр...   Nov 15 2012, 10:59
|- - _Pasha   Цитата(hd44780 @ Nov 15 2012, 13:52) Нет,...   Nov 15 2012, 12:07
- - hd44780   В конце есть архив исходниками разными - TC1-Oct-3...   Nov 15 2012, 11:12
- - hd44780   Спасибо, почитаю. Размер окна сейчас - 256 байт. Х...   Nov 15 2012, 12:13
- - Genadi Zawidowski   Я затащил к себе в проект (на будущее использовани...   Nov 15 2012, 12:26
- - hd44780   Genadi Zawidowski, я так и подумал, т.к. оно у Вас...   Nov 15 2012, 12:39
- - hd44780   Разъём припаял, inline вставил. Закрутился чуть бы...   Nov 15 2012, 18:11
|- - _Pasha   Цитата(hd44780 @ Nov 15 2012, 21:11) Наве...   Nov 15 2012, 18:41
- - ViKo   A. N. Sloss ... ARM System Developer's Guide -...   Nov 15 2012, 18:23
- - hd44780   Viko, нашёл, скачал... _Pasha, видимо придётся......   Nov 15 2012, 19:13
|- - Genadi Zawidowski   Цитата(hd44780 @ Nov 15 2012, 23:13) прог...   Nov 15 2012, 19:44
- - _Pasha   Вроде ж давно есть fixed... Да, пока не забыл - б...   Nov 15 2012, 20:41
- - hd44780   По-моему, BitShift это мелочи , я сейчас пытаюсь ...   Nov 16 2012, 16:56
|- - _Pasha   Цитата(hd44780 @ Nov 16 2012, 20:56) Butt...   Nov 16 2012, 17:30
- - hd44780   inline сделал, слегка видоизменил структуру вызово...   Nov 18 2012, 09:09
|- - _Pasha   Цитата(hd44780 @ Nov 18 2012, 12:09) _Pas...   Nov 18 2012, 10:57
|- - hd44780   Цитата(_Pasha @ Nov 18 2012, 12:57) Вы пр...   Nov 18 2012, 11:26
|- - DRUID3   Цитата(hd44780 @ Nov 21 2012, 13:41) Поня...   Nov 21 2012, 12:23
|- - hd44780   Цитата(DRUID3 @ Nov 21 2012, 14:23) А как...   Nov 21 2012, 12:48
- - hd44780   _Pasha, спасибо. Со скоростью вроде управился, ра...   Nov 18 2012, 16:14
- - Genadi Zawidowski   Там очень проблемно с переполнением - я у себя пер...   Nov 18 2012, 20:23
- - hd44780   Спасибо. Вечерком проверю вариант с заменой int на...   Nov 19 2012, 08:03
- - hd44780   Проверил. Особых тормозов от long int не заметил. ...   Nov 19 2012, 17:18
|- - adnega   Цитата(hd44780 @ Nov 19 2012, 20:18) Поло...   Nov 19 2012, 17:43
|- - hd44780   Цитата(adnega @ Nov 19 2012, 19:43) Может...   Nov 20 2012, 07:49
|- - DRUID3   Цитата(hd44780 @ Nov 20 2012, 09:49) DRUI...   Nov 21 2012, 04:56
- - esaulenka   А какой должна быть разница от замены int на long ...   Nov 19 2012, 17:25
- - hd44780   Медленнее. То же самое как на 8-битном проце склад...   Nov 19 2012, 17:39
|- - esaulenka   Цитата(hd44780 @ Nov 19 2012, 21:39) Медл...   Nov 20 2012, 09:19
- - DRUID3   Цитата(hd44780 @ Nov 15 2012, 10:05) На С...   Nov 19 2012, 18:15
- - hd44780   Компилятор - IAR int - 32 (вроде бы). Для 64 напис...   Nov 20 2012, 11:16
|- - _Артём_   Цитата(hd44780 @ Nov 20 2012, 13:16) Вооб...   Nov 20 2012, 11:48
|- - hd44780   Цитата(_Артём_ @ Nov 20 2012, 13:48) Смот...   Nov 20 2012, 11:54
|- - esaulenka   Цитата(hd44780 @ Nov 20 2012, 15:54) Расс...   Nov 20 2012, 14:30
- - hd44780   long long поставил. Объём кода подскочил где-то с ...   Nov 20 2012, 16:50
- - hd44780   DRUID3, спасибо, буду смотреть. Попытаюсь к иару п...   Nov 21 2012, 07:26
|- - DRUID3   Цитата(hd44780 @ Nov 21 2012, 09:26) DRUI...   Nov 21 2012, 08:54
- - hd44780   Точек сейчас - 512. Про логарифм магнетуды, извини...   Nov 21 2012, 10:21
|- - DRUID3   Цитата(hd44780 @ Nov 21 2012, 12:21) Про ...   Nov 21 2012, 11:07
|- - hd44780   Цитата(DRUID3 @ Nov 21 2012, 13:07) такой...   Nov 21 2012, 11:41
- - hd44780   DRUID3, а чем отличаются fn_aT_ditNbrRadix2FFT_int...   Nov 21 2012, 15:01
|- - DRUID3   Цитата(hd44780 @ Nov 21 2012, 17:01) DRUI...   Nov 21 2012, 15:52
|- - hd44780   Цитата(DRUID3 @ Nov 21 2012, 17:52) ну у ...   Nov 21 2012, 17:59
- - hd44780   Вот сейчас посмотрел Чана - http://elm-chan.org/wo...   Nov 21 2012, 19:13
- - DRUID3   У Чана логарифмов нету. У него чистое FFT. Корень ...   Nov 22 2012, 03:32
- - hd44780   DRUID3 Я взял пока функцию, работающую с плавающе...   Nov 22 2012, 09:52
|- - DRUID3   Цитата(hd44780 @ Nov 22 2012, 11:52) DRUI...   Nov 22 2012, 10:39
|- - hd44780   Цитата(DRUID3 @ Nov 22 2012, 12:39) Невер...   Nov 22 2012, 11:39
|- - DRUID3   Цитата(hd44780 @ Nov 22 2012, 13:39) Т.е....   Nov 22 2012, 11:53
- - hd44780   Понял. Тут ещё один вопрос.... Для входного окна ...   Nov 22 2012, 12:35
- - DRUID3   Кодui_N = cuic_RN>>1; ...пусть cuic_RN = ...   Nov 22 2012, 13:29
- - hd44780   Вроде понятно. В итоге получил такое: Код float ...   Nov 22 2012, 14:45
- - hd44780   Исправил косяк Код // 3. Расчёт спектра for ...   Nov 22 2012, 19:29
- - DRUID3   Цитата(hd44780 @ Nov 22 2012, 21:29) ...Р...   Nov 23 2012, 05:19
|- - hd44780   Цитата(DRUID3 @ Nov 23 2012, 07:19) лучше...   Nov 23 2012, 06:58
|- - DRUID3   Цитата(hd44780 @ Nov 23 2012, 08:58) Я не...   Nov 23 2012, 08:27
- - hd44780   Отписаться вечером не смог .. Вчера проверил - на...   Nov 24 2012, 07:58
- - DRUID3   ...забейте... посмотрите как в том примере с int с...   Nov 24 2012, 14:22
- - hd44780   DRUID3, чёт я не понял . Написал так: Кодint iDa...   Nov 24 2012, 16:24
- - DRUID3   Цитата(hd44780 @ Nov 24 2012, 18:24) Хотя...   Nov 24 2012, 17:24
|- - hd44780   Цитата(DRUID3 @ Nov 24 2012, 19:24) У Вас...   Nov 25 2012, 11:35
|- - DRUID3   Цитата(hd44780 @ Nov 25 2012, 13:35) Заму...   Nov 25 2012, 11:59
- - hd44780   Да рано мне до дельты ... Нашёл в интернете алгори...   Nov 25 2012, 17:12
- - hd44780   Да рано мне до дельты ... Нашёл в интернете алгори...   Nov 25 2012, 17:12
- - hd44780   Дубль поста получился ..   Nov 25 2012, 17:12
- - hd44780   Это снова я . Окончательно переехал на целочисле...   Nov 30 2012, 10:56
- - hd44780   Посмотрел на своё изделие под музыку. Реакция хоро...   Nov 30 2012, 17:07
|- - DRUID3   Цитата(hd44780 @ Nov 30 2012, 19:07) Посм...   Nov 30 2012, 21:07
|- - hd44780   Цитата(DRUID3 @ Nov 30 2012, 23:07) Ну по...   Dec 2 2012, 18:42
- - hd44780   Почистил мусор всякий - расчёт FFT вместе со спект...   Dec 6 2012, 07:11
- - blackfin   Цитата(hd44780 @ Dec 6 2012, 11:11) Почис...   Dec 6 2012, 07:26
|- - hd44780   Цитата(blackfin @ Dec 6 2012, 09:26) Всё ...   Dec 6 2012, 08:32
- - DRUID3   Цитата(hd44780 @ Dec 6 2012, 09:11) Почис...   Dec 10 2012, 11:19


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 13:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.02107 секунд с 7
ELECTRONIX ©2004-2016