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

 
 
> Библиотека DSP для STM32F1xx от STM, не понятны результаты FFT
Halfback
сообщение Oct 11 2012, 12:15
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 322
Регистрация: 28-05-05
Пользователь №: 5 512



Здравствуйте!
Пытаюсь понять как работает библиотека STM DSP (STM32F10xxx DSP library firmware), а конктретно FFT. ЧТо 64 что 256 - непонятен результат на выходе функции. Подробно в листинге:

Код
#define NPT 64
#define PI2  6.28318530717959
.....
long lBUFIN[NPT];         /* Complex input vector */
long lBUFOUT[NPT];        /* Complex output vector */
......
for(i=0;i<NPT;i++) lBUFIN[i] = 500+500*sin(PI2*i/NPT);
cr4_fft_64_stm32(lBUFOUT, lBUFIN, NPT);


по сути я нарисовал синус с амплитудой в диапазоне 0...1000 что по сути будет соответствовать оцифровке с 10-12 битного АЦП.
Далее само преобразование. Смотрел в отладчике - там в результате в массиве lBUFOUT какая-то белиберда. В pdf на библиотеку формата выходных данных не нашел. Про входные данные понял так: младшие 2 байта - действительная часть сигнала, старшие 2 - мнимые. В примерах посмотрел на функцию MygSin - почему-то они в отчеты синуса запихивают в старшие разряды. Непонятно. wacko.gif

В общем прошу помощи у тех кто в сове время разобрался - как правильно упаковывать в lBUFIN и как декодировать lBUFOUT.
Заранее спасибо!

Ссылки:
Описание библиотеки
Библиотека

Сообщение отредактировал Halfback - Oct 11 2012, 12:17
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Halfback
сообщение Oct 11 2012, 14:21
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 322
Регистрация: 28-05-05
Пользователь №: 5 512



Цитата
А у него точно long длиной в 32 бита?

у армовского кейла точно.

Цитата
Может быть для уверенности лучше написать uint32_t
.....
Поэтому, на мой взгляд, было бы проще объявить входные и выходные данные не как массив из 32-битных целых, а как массив структур из 16-битных real и image полей:

беззнаковые? sm.gif тут нужны знаковые массивы, т.к. в них же функция пишет коэффициенты синусов и косинусов после БПФ. но идея понятна.

кстати вычислил мощность спектра по функции powerMag из примера - похоже на правду. разве что не понятно - почему размер массива lBUFMAG у них NPT+NPT/2. Ну и запись в той же функции
Код
lX= (lBUFOUT[i]<<16)>>16; /* sine_cosine --> cos */
просто поставила в ступор. Интересный способ обнулить старшие 2 байта sm.gif В асм не раскладывал но подозреваю что запись
Код
lX= lBUFOUT[i] & 0xFFFF
будет выполняться быстрее.
Также вычислял время обработки: 64 точки БПФ считает ~600мкс, мощность 6мс. Одуреть. laugh.gif Надо будет подставить другую функцию извлечения квадратного корня.

в общем буду дальше разбираться.

Сообщение отредактировал Halfback - Oct 11 2012, 14:27
Go to the top of the page
 
+Quote Post
Xenia
сообщение Oct 11 2012, 15:16
Сообщение #3


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(Halfback @ Oct 11 2012, 18:21) *
у армовского кейла точно.

Вы, вероятно, полагаете, что у вас на лбу написано о том, что программируете на Кейле? Про это сразу положено указывать, если задаете вопросы по программированию. Тем более в данном случае, когда размерность long зависит не столько от МК, сколько от используемого компилятора.

Цитата(Halfback @ Oct 11 2012, 18:21) *
Интересный способ обнулить старшие 2 байта sm.gif В асм не раскладывал но подозреваю что запись
lX= lBUFOUT[i] & 0xFFFF
будет выполняться быстрее.

А зачем вам обнулять старшую часть??? Если записываете только real-значения в BUFIN, то старшая часть сама обнулится во время присваивания. А если речь идет о результате в BUFOUT, то из него нужны обе части для того, чтобы вычислить мощность.

Кстати, не пробовали, позволяет ли функция cr4_fft_64_stm32() делать FFT на том же самом месте, т.е. указывая в качестве входного и выходного массивов один и тот же массив?
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 19th August 2025 - 22:57
Рейтинг@Mail.ru


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