Skip to content

Commit 3a73bd5

Browse files
committed
fft-window test
1 parent 0c7cacf commit 3a73bd5

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#include "AudioTools.h"
2+
#include "AudioLibs/AudioRealFFT.h" // using RealFFT
3+
4+
AudioRealFFT fft; // or AudioKissFFT
5+
Hann hann;
6+
BufferedWindow buffered(&hann);
7+
SineWaveGenerator<int16_t> sineWave(32000);
8+
GeneratedSoundStream<int16_t> in(sineWave);
9+
StreamCopy copier(fft, in);
10+
uint16_t sample_rate = 44100;
11+
int bits_per_sample = 16;
12+
int channels = 1;
13+
float value = 0;
14+
15+
// display fft result
16+
void fftResult(AudioFFTBase &fft) {
17+
float diff;
18+
auto result = fft.result();
19+
if (result.magnitude > 100) {
20+
Serial.print(result.frequency);
21+
Serial.print(" ");
22+
Serial.print(result.magnitude);
23+
Serial.print(" => ");
24+
Serial.print(result.frequencyAsNote(diff));
25+
Serial.print(" diff: ");
26+
Serial.print(diff);
27+
Serial.print(" - time ms ");
28+
Serial.print(fft.resultTime() - fft.resultTimeBegin());
29+
Serial.println();
30+
}
31+
}
32+
33+
void setup() {
34+
Serial.begin(115200);
35+
AudioLogger::instance().begin(Serial, AudioLogger::Warning);
36+
37+
// set the frequency
38+
sineWave.setFrequency(N_B4);
39+
40+
// Setup sine wave
41+
auto cfg = in.defaultConfig();
42+
cfg.channels = channels;
43+
cfg.sample_rate = sample_rate;
44+
in.begin(cfg);
45+
46+
// Setup FFT
47+
auto tcfg = fft.defaultConfig();
48+
tcfg.copyFrom(cfg);
49+
tcfg.length = 4096;
50+
tcfg.callback = &fftResult;
51+
tcfg.window_function = &buffered;
52+
fft.begin(tcfg);
53+
}
54+
55+
void loop() { copier.copy(); }

0 commit comments

Comments
 (0)