hd44780 0 20 ноября, 2012 Опубликовано 20 ноября, 2012 · Жалоба Может, он в децибелах кажет?! хрен его знает... Вообще вряд ли. Я где-то год назад родственный анализатор на C#, .NET 2.0 (VS.NET 2005) написал. Алгоритм откуда-то выдрал готовый. Как вы понимаете, всё в лоб, плавающая точка в любых количествах и всё прочее :) . Логарифмов вроде нету. Результат визуально близок к винампу. Могу выложить, если кого интересует. Кстати, как децибелы по таблице просчитать, я уже придумал, осталось реализовать и проверить :) . DRUID3, я RealFFT для 80x86 только нашёл - неактуально :rolleyes: . Асма я этого не знаю. Учить потихоньку начал, но когда это будет .... Нашёл реализацию FFT на нём - вложение. Для какого проца - не знаю, это с сидюка к какой-то буржуйской книжке. К какой - не знаю. На форумах англоязычных нашёл. Сам определить я пока не способен. Если кто ориентируется - гляньте плиз. Меня смущают имена функций типа fft_16_arm9m .... Сейчас курю это - http://code.google.com/p/falab/ Ещё лежит kissFFt, руки пока не дошли .... Спасибо. ch08_dsp.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 20 ноября, 2012 Опубликовано 20 ноября, 2012 · Жалоба Медленнее. То же самое как на 8-битном проце складывать-вычитать 16-битные числа. Ну и т.д. т.п. Задам вопрос по-другому. Какой разрядности у Вас int и long ? И компилятор какой? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 20 ноября, 2012 Опубликовано 20 ноября, 2012 · Жалоба Компилятор - IAR int - 32 (вроде бы). Для 64 написал long long. Вообще у IAR help какой-то тупой, даже размер типов данных я там не нашёл :( . Хотя в том же CvAVR и прочих это с пол-пинка находится ..... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 20 ноября, 2012 Опубликовано 20 ноября, 2012 · Жалоба Вообще у IAR help какой-то тупой, даже размер типов данных я там не нашёл :( . Хотя в том же CvAVR и прочих это с пол-пинка находится ..... Смотрите EWARM_DevelopmentGuide.ENU.pdf Part 2. Reference information Data representation Basic data types Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 20 ноября, 2012 Опубликовано 20 ноября, 2012 · Жалоба Смотрите EWARM_DevelopmentGuide.ENU.pdf спасибо. Так и есть,long long - 64 бита. Вечером ещё разок проверю на железе .. Рассобачился я на этих __int32 и __int64 в VS.NET :) . Зато как удобно ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 20 ноября, 2012 Опубликовано 20 ноября, 2012 · Жалоба Рассобачился я на этих __int32 и __int64 в VS.NET :) . Зато как удобно ... Что, и stdint.h нет? Хех, а я уж решил, что свершилось чудо, и поведение int и long (ещё вчера упоминался long int, не long long) на 32-битниках как-то различается :-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 20 ноября, 2012 Опубликовано 20 ноября, 2012 · Жалоба long long поставил. Объём кода подскочил где-то с 33кил до 38 кил :) Полосок больше стало, но все равно редкие какие-то ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DRUID3 0 21 ноября, 2012 Опубликовано 21 ноября, 2012 · Жалоба DRUID3, я RealFFT для 80x86 только нашёл - неактуально :rolleyes: . aT_RealFFTrFFT_GCC_TEST.zip aT_ditNbrRadix2FFT_int_c_GCC_TEST.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 21 ноября, 2012 Опубликовано 21 ноября, 2012 · Жалоба DRUID3, спасибо, буду смотреть. Попытаюсь к иару прикрутить. Кста. Вот тут - http://electronix.ru/forum/index.php?showt...ost&p=57271 вчера поздно вечером что-то нарыл, добавил тупо в иаровский проект - ругается, синтаксис на такой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DRUID3 0 21 ноября, 2012 Опубликовано 21 ноября, 2012 · Жалоба DRUID3, спасибо, буду смотреть. Попытаюсь к иару прикрутить. ...там это... для "реал" они во флоат, но никто не мешает принять синус равным 32768 на время военного конфликта в том числе и в тригонометрических формулах. Но вообще Вам сподручнее будет не само realFFT брать, а функцию 2-а реал за одно комплексное двойной длинны(есть там и такая). Кстати, а сколько у Вас точек? Для правильного масштабирования бабочек я там еще свое intFFT приложил. fixed 0.15 не применял, и так хорошо. С asm не спешите заморачиваться. Вы как вычисляете логарифм магнитуды(или просто магнитуду)бинов в частотной области? Там эти вычисления отъедят намного больше MIPS чем FFT на C. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 21 ноября, 2012 Опубликовано 21 ноября, 2012 · Жалоба Точек сейчас - 512. Про логарифм магнетуды, извините не понял. Наверное терию вопроса плохо знаю :( . Поясните пожалуйста. Ваш код (целочисленный) сейчас читаю. Как я понял, у Вас там 2 функции - int fn_aT_ditNbrRadix2FFT_int и fn_aT_ditNbrRadix2ReFFT_int - где какой (имею в виду "за одно комплексное двойной длины")? Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DRUID3 0 21 ноября, 2012 Опубликовано 21 ноября, 2012 · Жалоба Про логарифм магнетуды, извините не понял. Наверное терию вопроса плохо знаю :( . Поясните пожалуйста. Ну вот Вы график потом отрисовываете. Это график чего? У Вас после 512 точек действительной последовательности будет 512 точоек комплексного спектра. Но рисуете то Вы физический а не комплексный спектр. Т.е. длину вектора образованного каждым комплексным бином - корень из квадрата реал плюс квадрат имеджинари (sqrt(I*I+Q*Q)). Ну и такой спектр еще очень любят потом логарифмировать для качественной визуальной оценки. Корень квадратный и логарифмирование запросто сожрут все эти попытки оптимизации FFT. Тем более не понятно где Вы их взяли для int. Сами писали? Точек сейчас - 512. Ваш код (целочисленный) сейчас читаю. Как я понял, у Вас там 2 функции - int fn_aT_ditNbrRadix2FFT_int и fn_aT_ditNbrRadix2ReFFT_int - где какой (имею в виду "за одно комплексное двойной длины")? Спасибо. целочисленный - это просто 2-а комплексных БПФ. Прямое и обратное. Отличаются знаком комплексной экспоненты и внесением множителя 1/n для обратного БПФ в одиночный битовый сдвиг при каждом проходе каскада. А нужно еще завернуть такое БПФ для получения БПФ вещественной последовательности. Это другой архив. Там ряд функций. БПФ прямое и обратное для действительной последовательности с отбрасыванием зеркально-сопряженной симметрии и без. Но Вам нужна функция fn_a_2RealFFT() делающая 2 БПФ действительного ряда чисел за раз внутри которой комплексное БПФ такой же длинны. Переделайте эту функцию для int(тривиально) и внутрь вставте либо мою(из того другого архива) целочисленную комплексную БПФ либо чью-то другую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 21 ноября, 2012 Опубликовано 21 ноября, 2012 · Жалоба такой спектр еще очень любят потом логарифмировать для качественной визуальной оценки. Корень квадратный и логарифмирование запросто сожрут все эти попытки оптимизации FFT. Тем более не понятно где Вы их взяли для int. Сами писали? Понял, о чём Вы :rolleyes: . Спектр не логарифмический, логарифмов вообще нигде нету ... И без корней: #define FMUL(a,b,q) (((long)(a)*(B))>>(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.Re >> (FFT_POWER / 2); fix im = FFTResult.Im >> (FFT_POWER / 2); fix Re2, Im2; // Squareing Re2 = FMUL ( re, re, FFT_Q ); Im2 = FMUL ( im, im, FFT_Q ); Spectrum = Re2 + Im2; } // for Писал не сам, выдрал, по сути, отсюда - http://electronix.ru/forum/index.php?showt...t&p=1111653 и там выше по теме .. Насколько это корректно, не знаю . Передирал, как зелёный студент .... целочисленный - это просто 2-а комплексных БПФ. Прямое и обратное. Отличаются знаком комплексной экспоненты и внесением множителя 1/n для обратного БПФ в одиночный битовый сдвиг при каждом проходе каскада. А нужно еще завернуть такое БПФ для получения БПФ вещественной последовательности. Это другой архив. Там ряд функций. БПФ прямое и обратное для действительной последовательности с отбрасыванием зеркально-сопряженной симметрии и без. Но Вам нужна функция fn_a_2RealFFT() делающая 2 БПФ действительного ряда чисел за раз внутри которой комплексное БПФ такой же длинны. Переделайте эту функцию для int(тривиально) и внутрь вставте либо мою(из того другого архива) целочисленную комплексную БПФ либо чью-то другую. Щас буду смотреть ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DRUID3 0 21 ноября, 2012 Опубликовано 21 ноября, 2012 · Жалоба Понял, о чём Вы :rolleyes: . Спектр не логарифмический, логарифмов вообще нигде нету ... И без корней: Понял. Все уже упрощено дальше некуда. разве что маску наложить. ---> 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 21 ноября, 2012 Опубликовано 21 ноября, 2012 · Жалоба А какая у Вас тактовая? В одном из приведенных Вами же документов - 40 MHz ~ 3ms. 48 MHz. Для USB. Хоть ещё ни разу его не использовал :) . Тут у меня такая мысль. Вот этот тип данных complex. Это же структура с двумя полями, так? Т.е. перед каждым обращением к полю нужно вначале перейти на указатель на структуру. А это MIPSы. Инлайнь там что или нет. Попробуйте с обыкновенными масивами I и Q. попробую. Спасибо. Я сейчас Ваш смотрю. Мой вариант по скорости уже приемлемо крутитися, но результаты какие-то странные показывает - от силы 10 полосок из 128, которые я отрисовываю на дисплее. Могу фотку дисплея кинуть вечером. Может "симптоматика" что-то подскажет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться