long time ago i was searching for FFT and arduino, i did find very good example but i didn't save him. Guy was printing output fft data with kind of spectrum using "*" symbols in serial monitor.

For a given input signal, any FFT program will give you an amplitude corresponding to a frequency bin.

It should not be difficult for you to figure out how to print a number of * on the serial monitor corresponding to that amplitude, but if you need help, let us know.

It was something like el_supremo thread but not exactly.

Goal:
I've developed EEG shield for arduino. From this shield i am able to read voltage changes of EEG signal. I do have 6 channels so i am looking for something like: numpy.fft.fft — NumPy v1.21 Manual

basically i just need to be able to push let say array with 256 voltage levels into something like output = fft(input)

but i need from it to be efficient so i do not quite want to rewrite fft equation.

Thank you for fix_fft I am going to find out what it does and if i can use it for this purpose

I as able to code working example using arduino FHT library its here:

#define LOG_OUT 1 // use the log output function
#define FHT_N 128 // number of samples
#include <FHT.h>
#include <compute_freqency.h>
#define SAMPLE_RATE 128
#define AMPLITUDE 70
double re[FHT_N] = {0,};
unsigned i = 0;
void setup() {
Serial.begin(115200);
pinMode(9, OUTPUT);
pinMode(8, INPUT);
// Create FHT_N samples of a single freqency tone
const double freqency = 63;
double phase = 0.0;
for (unsigned i = 0; i < FHT_N; i++) {
// a sample of wave
re[i] = AMPLITUDE * sin(phase * 2.0 * PI);
// update the phase of wave 1
phase += freqency / SAMPLE_RATE;
if (phase >= 1)phase -= 1;
}
}
void loop() {
tone(9, 15);
if (i < FHT_N)
{
fht_input[i] = re[i];
i++;
} else
{
fht_window();
fht_reorder();
fht_run();
fht_mag_log();
double frq = frequency(fht_log_out, SAMPLE_RATE, FHT_N);
Serial.println(frq);
i = 0;
// for (int curBin = 0; curBin < FHT_N / 2; ++curBin)
// {
// fht_log_out[0] = 0;
// fht_log_out[1] = 0;
// Serial.print(fht_log_out[curBin]);
// if (curBin < (FHT_N / 2) - 1)
// Serial.print(",");
// else
// {
// Serial.println(";");
// }
//
// }
}
}

Note that I am not using for() because of that tone() above.
but i do have problem working with actual analog/digital inputs. When i replace part, which loads created data for

if (i < FHT_N)
{
fht_input[i] = digitalRead(8);
i++;
} else

I am not able to read/detect value typed in tone(), i have used also another arduino as generator, but with no success.

PS compute_freqency.h just finds max value in fht output and calculates frequency.