|
FFT на асм для ARM7TDMI (AT91SAM7xx) |
|
|
|
Nov 15 2012, 08:05
|

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

|
На Си нашёл, вставил в программу - тормозит оно. Конечно, гораздо лучше, чем на AVR, но всё равно не айс. Надо сделать аудио-анализатор. Сделать-сделал, осциллограммы рисует великолепно, рендер быстрый для дисплея написал, а с FFT проблемы. А если ещё и стерео запустить - вообще ступор почти будет... Нет ли у кого реализации на асме, типа как Чен для AVR-ов? Сам я ейный ассемблер практически не знаю  . Спасибо.
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
 |
Ответов
|
Nov 21 2012, 10:21
|

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

|
Точек сейчас - 512. Про логарифм магнетуды, извините не понял. Наверное терию вопроса плохо знаю  . Поясните пожалуйста. Ваш код (целочисленный) сейчас читаю. Как я понял, у Вас там 2 функции - int fn_aT_ditNbrRadix2FFT_int и fn_aT_ditNbrRadix2ReFFT_int - где какой (имею в виду "за одно комплексное двойной длины")? Спасибо.
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Nov 21 2012, 11:07
|

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

|
Цитата(hd44780 @ Nov 21 2012, 12:21)  Про логарифм магнетуды, извините не понял. Наверное терию вопроса плохо знаю  . Поясните пожалуйста. Ну вот Вы график потом отрисовываете. Это график чего? У Вас после 512 точек действительной последовательности будет 512 точоек комплексного спектра. Но рисуете то Вы физический а не комплексный спектр. Т.е. длину вектора образованного каждым комплексным бином - корень из квадрата реал плюс квадрат имеджинари (sqrt(I*I+Q*Q)). Ну и такой спектр еще очень любят потом логарифмировать для качественной визуальной оценки. Корень квадратный и логарифмирование запросто сожрут все эти попытки оптимизации FFT. Тем более не понятно где Вы их взяли для int. Сами писали? Цитата(hd44780 @ Nov 21 2012, 12:21)  Точек сейчас - 512. Цитата(hd44780 @ Nov 21 2012, 12:21)  Ваш код (целочисленный) сейчас читаю.
Как я понял, у Вас там 2 функции - int fn_aT_ditNbrRadix2FFT_int и fn_aT_ditNbrRadix2ReFFT_int - где какой (имею в виду "за одно комплексное двойной длины")?
Спасибо. целочисленный - это просто 2-а комплексных БПФ. Прямое и обратное. Отличаются знаком комплексной экспоненты и внесением множителя 1/n для обратного БПФ в одиночный битовый сдвиг при каждом проходе каскада. А нужно еще завернуть такое БПФ для получения БПФ вещественной последовательности. Это другой архив. Там ряд функций. БПФ прямое и обратное для действительной последовательности с отбрасыванием зеркально-сопряженной симметрии и без. Но Вам нужна функция fn_a_2RealFFT() делающая 2 БПФ действительного ряда чисел за раз внутри которой комплексное БПФ такой же длинны. Переделайте эту функцию для int(тривиально) и внутрь вставте либо мою(из того другого архива) целочисленную комплексную БПФ либо чью-то другую.
--------------------
Нас помнят пока мы мешаем другим... //-------------------------------------------------------- Хороший блатной - мертвый... //-------------------------------------------------------- Нет старик, это те дроиды которых я ищу...
|
|
|
|
|
Nov 21 2012, 11:41
|

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

|
Цитата(DRUID3 @ Nov 21 2012, 13:07)  такой спектр еще очень любят потом логарифмировать для качественной визуальной оценки. Корень квадратный и логарифмирование запросто сожрут все эти попытки оптимизации FFT. Тем более не понятно где Вы их взяли для int. Сами писали? Понял, о чём Вы  . Спектр не логарифмический, логарифмов вообще нигде нету ... И без корней: Цитата #define FMUL(a,b,q) (((long)(a)*(  )>>(q)) enum { FFT_Q=11 }; //exponent #define FFT_POWER 9 #define FFT_N (1 << FFT_POWER) // 512 - размер выборки ........... for ( i = 0; i < FFT_N; i ++ ) { // Scaling by FFT_N/2=128 fix re = FFTResult[i].Re >> (FFT_POWER / 2); fix im = FFTResult[i].Im >> (FFT_POWER / 2); fix Re2, Im2; // Squareing Re2 = FMUL ( re, re, FFT_Q ); Im2 = FMUL ( im, im, FFT_Q ); Spectrum [i] = Re2 + Im2; } // for Писал не сам, выдрал, по сути, отсюда - http://electronix.ru/forum/index.php?showt...t&p=1111653 и там выше по теме .. Насколько это корректно, не знаю  . Передирал, как зелёный студент  .... Цитата(DRUID3 @ Nov 21 2012, 13:07)  целочисленный - это просто 2-а комплексных БПФ. Прямое и обратное. Отличаются знаком комплексной экспоненты и внесением множителя 1/n для обратного БПФ в одиночный битовый сдвиг при каждом проходе каскада.
А нужно еще завернуть такое БПФ для получения БПФ вещественной последовательности. Это другой архив. Там ряд функций. БПФ прямое и обратное для действительной последовательности с отбрасыванием зеркально-сопряженной симметрии и без. Но Вам нужна функция fn_a_2RealFFT() делающая 2 БПФ действительного ряда чисел за раз внутри которой комплексное БПФ такой же длинны. Переделайте эту функцию для int(тривиально) и внутрь вставте либо мою(из того другого архива) целочисленную комплексную БПФ либо чью-то другую. Щас буду смотреть ...
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
Сообщений в этой теме
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 _Pasha А заинлайнить BitShift() и Butterfly() слабо? Nov 15 2012, 12:28 ReAl Цитата(_Pasha @ Nov 15 2012, 14:28) А заи... Nov 15 2012, 19:55 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 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|