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

 
 
6 страниц V  < 1 2 3 4 5 > »   
Reply to this topicStart new topic
> FFT на асм для ARM7TDMI (AT91SAM7xx)
hd44780
сообщение Nov 20 2012, 07:49
Сообщение #31


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

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



Цитата(adnega @ Nov 19 2012, 19:43) *
Может, он в децибелах кажет?!


хрен его знает... Вообще вряд ли.
Я где-то год назад родственный анализатор на C#, .NET 2.0 (VS.NET 2005) написал.
Алгоритм откуда-то выдрал готовый. Как вы понимаете, всё в лоб, плавающая точка в любых количествах и всё прочее sm.gif . Логарифмов вроде нету. Результат визуально близок к винампу.
Могу выложить, если кого интересует.

Кстати, как децибелы по таблице просчитать, я уже придумал, осталось реализовать и проверить sm.gif .

DRUID3, я RealFFT для 80x86 только нашёл - неактуально rolleyes.gif .

Асма я этого не знаю. Учить потихоньку начал, но когда это будет ....
Нашёл реализацию FFT на нём - вложение. Для какого проца - не знаю, это с сидюка к какой-то буржуйской книжке. К какой - не знаю. На форумах англоязычных нашёл.
Сам определить я пока не способен. Если кто ориентируется - гляньте плиз.
Меня смущают имена функций типа fft_16_arm9m ....

Сейчас курю это - http://code.google.com/p/falab/
Ещё лежит kissFFt, руки пока не дошли ....

Спасибо.
Прикрепленные файлы
Прикрепленный файл  ch08_dsp.zip ( 58.64 килобайт ) Кол-во скачиваний: 12
 


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Nov 20 2012, 09:19
Сообщение #32


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

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



Цитата(hd44780 @ Nov 19 2012, 21:39) *
Медленнее. То же самое как на 8-битном проце складывать-вычитать 16-битные числа.
Ну и т.д. т.п.

Задам вопрос по-другому.
Какой разрядности у Вас int и long ?

И компилятор какой?


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
hd44780
сообщение Nov 20 2012, 11:16
Сообщение #33


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

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



Компилятор - IAR
int - 32 (вроде бы). Для 64 написал long long.

Вообще у IAR help какой-то тупой, даже размер типов данных я там не нашёл sad.gif .
Хотя в том же CvAVR и прочих это с пол-пинка находится .....


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Nov 20 2012, 11:48
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(hd44780 @ Nov 20 2012, 13:16) *
Вообще у IAR help какой-то тупой, даже размер типов данных я там не нашёл sad.gif .
Хотя в том же CvAVR и прочих это с пол-пинка находится .....

Смотрите EWARM_DevelopmentGuide.ENU.pdf
Part 2. Reference information
Data representation
Basic data types
Go to the top of the page
 
+Quote Post
hd44780
сообщение Nov 20 2012, 11:54
Сообщение #35


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

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



Цитата(_Артём_ @ Nov 20 2012, 13:48) *
Смотрите EWARM_DevelopmentGuide.ENU.pdf


спасибо. Так и есть,long long - 64 бита.
Вечером ещё разок проверю на железе ..
Рассобачился я на этих __int32 и __int64 в VS.NET sm.gif . Зато как удобно ...


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Nov 20 2012, 14:30
Сообщение #36


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

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



Цитата(hd44780 @ Nov 20 2012, 15:54) *
Рассобачился я на этих __int32 и __int64 в VS.NET sm.gif . Зато как удобно ...

Что, и stdint.h нет?


Хех, а я уж решил, что свершилось чудо, и поведение int и long (ещё вчера упоминался long int, не long long) на 32-битниках как-то различается :-)


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
hd44780
сообщение Nov 20 2012, 16:50
Сообщение #37


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

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



long long поставил.
Объём кода подскочил где-то с 33кил до 38 кил sm.gif
Полосок больше стало, но все равно редкие какие-то ...


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
DRUID3
сообщение Nov 21 2012, 04:56
Сообщение #38


山伏
*****

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



Цитата(hd44780 @ Nov 20 2012, 09:49) *
DRUID3, я RealFFT для 80x86 только нашёл - неактуально rolleyes.gif .


Прикрепленные файлы
Прикрепленный файл  aT_RealFFTrFFT_GCC_TEST.zip ( 29.4 килобайт ) Кол-во скачиваний: 18
Прикрепленный файл  aT_ditNbrRadix2FFT_int_c_GCC_TEST.zip ( 25.02 килобайт ) Кол-во скачиваний: 18
 


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post
hd44780
сообщение Nov 21 2012, 07:26
Сообщение #39


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

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



DRUID3, спасибо, буду смотреть. Попытаюсь к иару прикрутить.

Кста. Вот тут - http://electronix.ru/forum/index.php?showt...ost&p=57271 вчера поздно вечером что-то нарыл, добавил тупо в иаровский проект - ругается, синтаксис на такой.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
DRUID3
сообщение Nov 21 2012, 08:54
Сообщение #40


山伏
*****

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



Цитата(hd44780 @ Nov 21 2012, 09:26) *
DRUID3, спасибо, буду смотреть. Попытаюсь к иару прикрутить.

...там это... для "реал" они во флоат, но никто не мешает принять синус равным 32768 на время военного конфликта в том числе и в тригонометрических формулах. Но вообще Вам сподручнее будет не само realFFT брать, а функцию 2-а реал за одно комплексное двойной длинны(есть там и такая). Кстати, а сколько у Вас точек? Для правильного масштабирования бабочек я там еще свое intFFT приложил. fixed 0.15 не применял, и так хорошо. С asm не спешите заморачиваться. Вы как вычисляете логарифм магнитуды(или просто магнитуду)бинов в частотной области? Там эти вычисления отъедят намного больше MIPS чем FFT на C.


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post
hd44780
сообщение Nov 21 2012, 10:21
Сообщение #41


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

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



Точек сейчас - 512.
Про логарифм магнетуды, извините не понял. Наверное терию вопроса плохо знаю sad.gif . Поясните пожалуйста.

Ваш код (целочисленный) сейчас читаю.

Как я понял, у Вас там 2 функции - int fn_aT_ditNbrRadix2FFT_int и fn_aT_ditNbrRadix2ReFFT_int - где какой (имею в виду "за одно комплексное двойной длины")?

Спасибо.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
DRUID3
сообщение Nov 21 2012, 11:07
Сообщение #42


山伏
*****

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



Цитата(hd44780 @ Nov 21 2012, 12:21) *
Про логарифм магнетуды, извините не понял. Наверное терию вопроса плохо знаю sad.gif . Поясните пожалуйста.

Ну вот Вы график потом отрисовываете. Это график чего? У Вас после 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(тривиально) и внутрь вставте либо мою(из того другого архива) целочисленную комплексную БПФ либо чью-то другую.


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post
hd44780
сообщение Nov 21 2012, 11:41
Сообщение #43


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

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



Цитата(DRUID3 @ Nov 21 2012, 13:07) *
такой спектр еще очень любят потом логарифмировать для качественной визуальной оценки. Корень квадратный и логарифмирование запросто сожрут все эти попытки оптимизации FFT. Тем более не понятно где Вы их взяли для int. Сами писали?

Понял, о чём Вы rolleyes.gif .
Спектр не логарифмический, логарифмов вообще нигде нету ... И без корней:
Цитата
#define FMUL(a,b,q) (((long)(a)*(cool.gif)>>(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 и там выше по теме ..
Насколько это корректно, не знаю biggrin.gif . Передирал, как зелёный студент biggrin.gif ....

Цитата(DRUID3 @ Nov 21 2012, 13:07) *
целочисленный - это просто 2-а комплексных БПФ. Прямое и обратное. Отличаются знаком комплексной экспоненты и внесением множителя 1/n для обратного БПФ в одиночный битовый сдвиг при каждом проходе каскада.

А нужно еще завернуть такое БПФ для получения БПФ вещественной последовательности. Это другой архив. Там ряд функций. БПФ прямое и обратное для действительной последовательности с отбрасыванием зеркально-сопряженной симметрии и без. Но Вам нужна функция fn_a_2RealFFT() делающая 2 БПФ действительного ряда чисел за раз внутри которой комплексное БПФ такой же длинны. Переделайте эту функцию для int(тривиально) и внутрь вставте либо мою(из того другого архива) целочисленную комплексную БПФ либо чью-то другую.

Щас буду смотреть ...


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
DRUID3
сообщение Nov 21 2012, 12:23
Сообщение #44


山伏
*****

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



Цитата(hd44780 @ Nov 21 2012, 13:41) *
Понял, о чём Вы rolleyes.gif .
Спектр не логарифмический, логарифмов вообще нигде нету ... И без корней:

biggrin.gif Понял. Все уже упрощено дальше некуда. разве что маску наложить. biggrin.gif

Цитата(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.


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post
hd44780
сообщение Nov 21 2012, 12:48
Сообщение #45


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

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



Цитата(DRUID3 @ Nov 21 2012, 14:23) *
А какая у Вас тактовая? В одном из приведенных Вами же документов - 40 MHz ~ 3ms.

48 MHz. Для USB. Хоть ещё ни разу его не использовал sm.gif .

Цитата(DRUID3 @ Nov 21 2012, 14:23) *
Тут у меня такая мысль. Вот этот тип данных complex. Это же структура с двумя полями, так? Т.е. перед каждым обращением к полю нужно вначале перейти на указатель на структуру. А это MIPSы. Инлайнь там что или нет. Попробуйте с обыкновенными масивами I и Q.

попробую. Спасибо.
Я сейчас Ваш смотрю.
Мой вариант по скорости уже приемлемо крутитися, но результаты какие-то странные показывает - от силы 10 полосок из 128, которые я отрисовываю на дисплее. Могу фотку дисплея кинуть вечером. Может "симптоматика" что-то подскажет.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post

6 страниц V  < 1 2 3 4 5 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 05:59
Рейтинг@Mail.ru


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