Как мне взять реальный БПФ с использованием STM32F407G? - PullRequest
0 голосов
/ 30 апреля 2018

Я довольно долго пытался использовать fft для реальных данных в STM32F407G, но безуспешно. Однако, когда я использую функцию cfft для сложных данных, она работает. Но я не хочу обрабатывать мнимую часть. Итак, мой вопрос - как использовать функцию rfft в stm32? Вот код, который я пробовал -

#include "stm32f407xx.h"
#include "arm_math.h"
#include "arm_const_structs.h"
#include "core_cm4.h"


#define TEST_LENGTH_SAMPLES 32

extern float32_t  ffttestrealip[TEST_LENGTH_SAMPLES];
static float32_t  ffttestrealop[TEST_LENGTH_SAMPLES];

uint32_t fftSize = 32;
uint8_t ifftFlag = 0;
uint8_t doBitReverse = 1;


int32_t main(void)
{
    arm_rfft_fast_instance_f32 *    S;
    arm_rfft_fast_init_f32  (S,fftSize);

arm_rfft_fast_f32   (S,ffttestrealip,ffttestrealop,ifftFlag )   ;
  while(1);                            
}

 /** \endlink */

Но когда я компилирую это, он говорит: «ошибка: L6047U: размер этого изображения (83968 байт) превышает максимально допустимый для этой версии компоновщика» Когда я закомментирую "arm_rfft_fast_init_f32 (S, fftSize);" , он компилируется, но я получаю неправильный результат.

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Предел 32 КБ - это предел двоичного файла , в отличие от ограничения ОЗУ - нет гарантии, что двоичный файл для выполнения реального БПФ будет меньше, чем сложное БПФ.

В действительности это может быть более оптимизированный алгоритм, который является более сложным, так что для его выполнения может потребоваться меньше циклов оперативной памяти / ЦП, но все же может потребоваться больше (более дешевых) операций для завершения.

Я без проблем запустил комплексное БПФ на 4096 пт на этих деталях

0 голосов
/ 30 апреля 2018

Вы используете компоновщик с ограниченным размером, 32 k - общий размер для ознакомительных версий IAR и Keil.

Вы можете либо заплатить, чтобы получить полноразмерную версию, либо создать свой код с помощью бесплатной версии arm gcc.

...