|
|
  |
FFT на асм для ARM7TDMI (AT91SAM7xx) |
|
|
|
Nov 20 2012, 07:49
|

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

|
Цитата(adnega @ Nov 19 2012, 19:43)  Может, он в децибелах кажет?! хрен его знает... Вообще вряд ли. Я где-то год назад родственный анализатор на C#, .NET 2.0 (VS.NET 2005) написал. Алгоритм откуда-то выдрал готовый. Как вы понимаете, всё в лоб, плавающая точка в любых количествах и всё прочее  . Логарифмов вроде нету. Результат визуально близок к винампу. Могу выложить, если кого интересует. Кстати, как децибелы по таблице просчитать, я уже придумал, осталось реализовать и проверить  . DRUID3, я RealFFT для 80x86 только нашёл - неактуально  . Асма я этого не знаю. Учить потихоньку начал, но когда это будет .... Нашёл реализацию FFT на нём - вложение. Для какого проца - не знаю, это с сидюка к какой-то буржуйской книжке. К какой - не знаю. На форумах англоязычных нашёл. Сам определить я пока не способен. Если кто ориентируется - гляньте плиз. Меня смущают имена функций типа fft_16_arm9m .... Сейчас курю это - http://code.google.com/p/falab/Ещё лежит kissFFt, руки пока не дошли .... Спасибо.
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Nov 20 2012, 09:19
|

Профессионал
    
Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877

|
Цитата(hd44780 @ Nov 19 2012, 21:39)  Медленнее. То же самое как на 8-битном проце складывать-вычитать 16-битные числа. Ну и т.д. т.п. Задам вопрос по-другому. Какой разрядности у Вас int и long ? И компилятор какой?
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
Nov 20 2012, 11:16
|

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

|
Компилятор - IAR int - 32 (вроде бы). Для 64 написал long long. Вообще у IAR help какой-то тупой, даже размер типов данных я там не нашёл  . Хотя в том же CvAVR и прочих это с пол-пинка находится .....
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Nov 20 2012, 11:48
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(hd44780 @ Nov 20 2012, 13:16)  Вообще у IAR help какой-то тупой, даже размер типов данных я там не нашёл  . Хотя в том же CvAVR и прочих это с пол-пинка находится ..... Смотрите EWARM_DevelopmentGuide.ENU.pdf Part 2. Reference information Data representation Basic data types
|
|
|
|
|
Nov 20 2012, 11:54
|

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

|
Цитата(_Артём_ @ Nov 20 2012, 13:48)  Смотрите EWARM_DevelopmentGuide.ENU.pdf спасибо. Так и есть,long long - 64 бита. Вечером ещё разок проверю на железе .. Рассобачился я на этих __int32 и __int64 в VS.NET  . Зато как удобно ...
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Nov 20 2012, 14:30
|

Профессионал
    
Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877

|
Цитата(hd44780 @ Nov 20 2012, 15:54)  Рассобачился я на этих __int32 и __int64 в VS.NET  . Зато как удобно ... Что, и stdint.h нет? Хех, а я уж решил, что свершилось чудо, и поведение int и long (ещё вчера упоминался long int, не long long) на 32-битниках как-то различается :-)
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
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(тривиально) и внутрь вставте либо мою(из того другого архива) целочисленную комплексную БПФ либо чью-то другую. Щас буду смотреть ...
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Nov 21 2012, 12:23
|

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

|
Цитата(hd44780 @ Nov 21 2012, 13:41)  Понял, о чём Вы  . Спектр не логарифмический, логарифмов вообще нигде нету ... И без корней:  Понял. Все уже упрощено дальше некуда. разве что маску наложить. Цитата(hd44780 @ Nov 18 2012, 13:26)  ---> DoFFT start Create complex data: 1 ms Window function 0: 0 ms FFT: 9 ms Determine spektrum: 0 ms --> DoFFT end
Window function 0 - прямоугольное окно, т.е. вообще там ничего нет. FFT - скачет 8-9 ms. Determine spektrum - всегда 0 - значит, меньше 1 ms.
Эти цифры вообще нормальные? Может там собака в другом месте зарыта .. А какая у Вас тактовая? В одном из приведенных Вами же документов - 40 MHz ~ 3ms. Тут у меня такая мысль. Вот этот тип данных complex. Это же структура с двумя полями, так? Т.е. перед каждым обращением к полю нужно вначале перейти на указатель на структуру. А это MIPSы. Инлайнь там что или нет. Попробуйте с обыкновенными масивами I и Q.
--------------------
Нас помнят пока мы мешаем другим... //-------------------------------------------------------- Хороший блатной - мертвый... //-------------------------------------------------------- Нет старик, это те дроиды которых я ищу...
|
|
|
|
|
Nov 21 2012, 12:48
|

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

|
Цитата(DRUID3 @ Nov 21 2012, 14:23)  А какая у Вас тактовая? В одном из приведенных Вами же документов - 40 MHz ~ 3ms. 48 MHz. Для USB. Хоть ещё ни разу его не использовал  . Цитата(DRUID3 @ Nov 21 2012, 14:23)  Тут у меня такая мысль. Вот этот тип данных complex. Это же структура с двумя полями, так? Т.е. перед каждым обращением к полю нужно вначале перейти на указатель на структуру. А это MIPSы. Инлайнь там что или нет. Попробуйте с обыкновенными масивами I и Q. попробую. Спасибо. Я сейчас Ваш смотрю. Мой вариант по скорости уже приемлемо крутитися, но результаты какие-то странные показывает - от силы 10 полосок из 128, которые я отрисовываю на дисплее. Могу фотку дисплея кинуть вечером. Может "симптоматика" что-то подскажет.
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|