Skip to main content
SA V.1
Associate III
February 16, 2024
Question

16384 points of FFT(Fast Fourier Transform)

  • February 16, 2024
  • 8 replies
  • 3971 views
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...

8 replies

Andrew Neil
Super User
February 16, 2024
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.
SA V.1
SA V.1Author
Associate III
February 19, 2024

By looking above links i didnt get any. mainly i am looking for library file is it possible to share ??

Andrew Neil
Super User
February 19, 2024

Go on.

The FFT is a very long-established and widely used algorithm - there must be plenty of general implementations that could be ported to any target ...

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.
SA V.1
SA V.1Author
Associate III
February 22, 2024

*.I want to perform a 16384 or 32768 points FFT  we cant perform this much of points using CMSIS_DSP library  clear this point .

*. So i need to choose a library which will support ( to perform 16384 or 32768 points in STM32H745xx microcontroller and the sotware STM32CubeIDE )  

which library should i choose ?how to adopt that? Any library name or library file or library link ?

  so will resolve this step first later will move further .

Andrew Neil
Super User
February 22, 2024

Have you actually tried searching the interwebs?

Again, the FFT is a very long-standing and widely-used algorithm - there must be plenty that can do this; eg,

https://www.google.com/search?q=16384+or+32768+points+FFT+C+code

Also, for finding source code, GitHub is a good place to search; eg,

https://github.com/search?q=FFT&type=repositories 

 

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.
Andrew Neil
Super User
September 24, 2024
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.
Visitor II
April 14, 2025

HI,I want to ask you if you find solution for getting more than 4098 points FFT ?

 

Andrew Neil
Super User
April 14, 2025

@Ayaa  - see the thread linked immediately before your post

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.
SA V.1
SA V.1Author
Associate III
April 15, 2025

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
April 15, 2025

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
Senior
April 15, 2025

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).