I've attached an FFT test program with source code for B4R.
I am using B4R 2.51. My MCU is an 80MHz Wemos board.
The FFT is fast. It uses a precomputed coefficient lookup table. It performs a double precision complex FFT.
The FFT code is in its own module and includes copy / Blackman window, scale, and magnitude squared subroutines.
I generate an integer test waveform to simulate A/D data acquisition.
With a 2000Hz sample rate and 64 sample FFT, I measure a 4.6 millisecond FFT compute time (copy/window, fft, scale, mag squared) on my MCU. This seems to easily support realtime processing of A/D audio.
*** Added Later ***
Unreal !!!
I found an error in the code for FFT.bas
This error has been in this code for almost 3 decades.
I am using B4R 2.51. My MCU is an 80MHz Wemos board.
The FFT is fast. It uses a precomputed coefficient lookup table. It performs a double precision complex FFT.
The FFT code is in its own module and includes copy / Blackman window, scale, and magnitude squared subroutines.
I generate an integer test waveform to simulate A/D data acquisition.
With a 2000Hz sample rate and 64 sample FFT, I measure a 4.6 millisecond FFT compute time (copy/window, fft, scale, mag squared) on my MCU. This seems to easily support realtime processing of A/D audio.
*** Added Later ***
Unreal !!!
I found an error in the code for FFT.bas
B4X:
Sub ScaleFFT(x() As Double, y() As Double, scl As Double, n As Int) ' Calc magnitude square root
For i=0 To n  1
x(i) = x(i) * scl
y(i) = y(i) * scl ' < should be y(i) = y(i) * scl, NOT y(i) = x(i) * scl
Next
End Sub
Attachments

51.6 KB Views: 189
Last edited: