cancel
Showing results for 
Search instead for 
Did you mean: 

16384 points of FFT(Fast Fourier Transform)

SA  V.1
Senior
Hello community, In my project requires upto 16384 points of FFT(Fast Fourier Transform) . I found out that I can’t perform this number of FFT points using arm CMSIS DSP library since it is limited to 4096 point Max. Due to this I have to use external library So I dont have any external library idea guide me to achive this  on the micro-controller (STM32H745ZI).CMSIS DSP It works well up to 4098 point.  I need to perform 16384 point so any library files,links , ideas or any video links could helpfull...
15 REPLIES 15

Yes . I got the solution for more than 4098 point FFT and performed upto 32784 points FFT. For this we need to Add some extra library file to our project .

@sa V.1 It would be helpful to say what libraries you had to add.

Then please mark the solution:

https://community.st.com/t5/community-guidelines/help-others-to-solve-their-issues/ta-p/575256

A complex system that works is invariably found to have evolved from a simple system that worked.
A complex system designed from scratch never works and cannot be patched up to make it work.

Can I know which libraries

 

SA  V.1
Senior

Hii, Please go to below link and download the complete project clearly understand the project and whichever the files required to your project copy and add to your project then perform FFT.

link--->https://github.com/Treeed/Long_FFTs_for_CMSIS_DSP/tree/master

Ozone
Principal

You can try to port fftw (recent version fftw3) to your target MCU : https://www.fftw.org/

> Hello community, In my project requires upto 16384 points of FFT(Fast Fourier Transform) .

I'm not so sure of that.

There are less costly algorithms to evaluate specific spectral components.

bramble
Associate III

You can do this with cmsis-dsp but you'll have to add your own implementation using the cmsis-dsp framework. Specifically, you'll need to provide your own twiddle factor and bit-reversal tables. There is a python script in cmsis-dsp that you can use to generate these:

 DSP_Lib/SupportFunctions/arm_cfft_radix4_init_f32_gen.py

Then you can quite easily build up the 16k FFT following ARM's existing functions as a reference template.

Regarding performance, memory requirement will be something to pay attention to and you'll need to ensure that optimisation is on for speed and size, and I- and D- cache enabled.

A key thing will be to choose your input number format before starting the implementation. Words (accumulated variables) grow according to log2(FFT length) and unless you're doing a full floating point implementation your implementation will need to use specific cmsis-dsp functions for your data type. e.g. If you were processing data from an ADC you may want to take a q15 as the input number format, but care would then be taken to avoid saturation/overflow, which you could avoid by converting to q32 at the cost of RAM usage and cycles.

Unfortunately this isn't the kind of turn-key solution that you might have hoped for, but even if you're not very familiar with the FFT there are a huge number of very good resources that explain how it works. The algorithms used boil down to simple adds/subtracts and cmsis-dsp has all of the required primitives (butterfly operations).