Здравствуйте!Столкнулся вот намедни с необходимостью использования FFT в своём проекте. Погуглил... Наткнулся на стандартную для ARM библиотеку - DSP_Lib, почитал доки. "Всё просто!" - подумал я, открыл CubeMX сделал для данного камня минимальную конфигурацию и сгенерировал проект для Keil, из примеров к библиотеке для использования Фурье выдрал два файла arm_fft_bin_data.c и arm_fft_bin_example_f32.c. В бесконечный цикл main.c добавил вызов основной функции из примера. В настройках проекта добавил использование DSP_Lib. И, собственно в Preprocessing Symbols в поле Define добавил ARM_MATH_CM3, для успешного компилирования проекта. Скомпилировав, Keil выдал такие значения:
Цитата:
Program Size: Code=8826 RO-data=12094 RW-data=8224 ZI-data=5120
Да, пример рабочий, вопросов к нему нет.
Далее... Приступил к использованию в примере функций RealFFT вместо ComplexFFT, для этого посредством CubeMX настроил АЦП и таймер для получения реального массива данных с АЦП,
но даже простой вызов функции инициализации arm_rfft_fast_init_f32 без дальнейших каких-либо действий по работе с FFT, приводили к тому, что проект компилировался с Fatal Error - Memory Overflow. Тогда использовалась другая функция инициализации - arm_rfft_init_q15, в этом случае компиляция проходила до конца, но с размером flash аж
54кБ!. Естественно в бесплатном Keil, имеющим ограничение в 32кБ, уже ничего не сделаешь.
Тот же проект с самым первым и родным примером был перенесён в SW4STM32, добавлены в проект самые необходимые компоненты DSP_Lib и компиляция заканчивается словами
Цитата:
Description Resource Path Location Type
region `FLASH' overflowed by 173068 bytes fft test C/C++ Problem
- вот эти 173кБ - это то, что в Keil компилировалось вполне нормально с данными
Цитата:
Code=8826 RO-data=12094 RW-data=8224 ZI-data=5120
.
До этого SW4STM32 не использовал вообще, версия у него 1.8. С более новыми на Win XP имеются проблемы. Какие здесь подводные камни есть?
Да и вообще, понимаю что DSP - это не единственное решение, но по теме FFT что то совсем не густо в плане манёвров, ИМХО.
Что можете посоветовать на этот счет. Интересует банальное - преобразование Фурье массива полученного с АЦП.