EasyFFT – Betrouwbare FFT-bibliotheek voor Arduino-projecten
Onderdelen en benodigdheden
| Onderdeel | Aantal |
|---|---|
| Arduino Nano R3 | 1 |
Apps en online diensten
- Arduino IDE
Over dit project
Frequentiemeting uit een opgenomen signaal is lastig, zeker op een Arduino met beperkte rekenkracht. Nuldoorgangsmethoden werken niet goed bij samengestelde signalen. Deze bibliotheek maakt FFT (Fast Fourier Transform) eenvoudig toepasbaar zonder diepe wiskundige kennis. Ideaal voor muziekanalyses, signaalverwerking, etc.
De werking van FFT wordt niet uitgelegd, wel de toepassing. Zie de bijbehorende video voor meer uitleg.
Voor snellere FFT (3x) met ~5% nauwkeurigheidsverlies, zie mijn ApproxFFT-artikel.
Stap 1: Fast Fourier Transform
Het FFT-algoritme (Cooley-Tukey) versnelt de DFT berekening aanzienlijk: van N² naar N·logN complexe vermenigvuldigingen. Belangrijk voor grotere steekproefsets.
Referenties voor de wiskunde achter FFT:
Stap 2: Code-uitleg – Snel sinus/cosinus
De ingebouwde sin()/cos() zijn traag. De oplossing: een lookup-tabel sine_data[91] met waarden voor 0–90° (als veelvouden van 255, opgeslagen als byte – 1/4 geheugen). Plaats sine_data[] bovenaan je sketch als globale variabele.
Ook f_peaks[5] (globale array) wordt bij elke FFT-run bijgewerkt: f_peaks[0] = dominante frequentie, daarna dalend.
byte sine_data[91] = { 0, 4, 9, 13, 18, 22, 27, 31, 35, 40, 44, 49, 53, 57, 62, 66, 70, 75, 79, 83, 87, 91, 96, 100, 104, 108, 112, 116, 120, 124, 127, 131, 135, 139, 143, 146, 150, 153, 157, 160, 164, 167, 171, 174, 177, 180, 183, 186, 189, 192, 195, 198, 201, 204, 206, 209, 211, 214, 216, 219, 221, 223, 225, 227, 229, 231, 233, 235, 236, 238, 240, 241, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 253, 254, 254, 254, 255, 255, 255, 255 };
float f_peaks[5];
De functies sine() en cosine() ronden af en halen de waarde uit de tabel. Dit scheelt 8 ms (64 punten) tot 20 ms (128 punten).
Stap 3: FFT-functie
FFT werkt alleen voor steekproefgroottes van 2ⁿ (2, 4, 8, 16, 32, 64, 128…). Andere waarden worden afgekapt naar de nearest lagere 2ⁿ.
Op Arduino Nano: max 128 samples (64 aanbevolen) vanwege geheugen. Arrays out_r en out_im (float) zijn groot.
Stappen in de functie:
- Bit-reversed ordering genereren.
- Input data ordenen volgens die volgorde.
- FFT uitvoeren.
- Amplitude van complexe getallen berekenen.
- Pieken detecteren en sorteren op grootte.
- Resultaten in
f_peaks[]beschikbaar.
Andere data (frequentie-bins, amplitudes) vereist aanpassing van de code (globale variabelen).
Stap 4: Testen
Een driehoakgolven (samplefreq 10 Hz, signaalfreq 1,25 Hz) als testinput. Resultaten komen overeen met Scilab FFT (kleine afwijking door snelle sinusbenadering). Uitgang: frequentie-bins 1,25 Hz en 3,75 Hz.
Snelheid op Arduino Nano:
- 16 punten: 4 ms
- 32 punten: 10 ms
- 64 punten: 26 ms
- 128 punten: 53 ms
Stap 5: Conclusie
Deze FFT-code is geschikt voor realtime toepassingen (~30 ms). Resolutie wordt beperkt door steekproefgrootte (geheugen). Op Arduino Mega of krachtigere boards kan de nauwkeurigheid verbeterd worden.
Vragen, suggesties of correcties? Laat een reactie achter.
Code
De volledige EasyFFT-code (Arduino/C++) staat in het originele artikel. De functie FFT(int in[], int N, float Frequency) vult de globale f_peaks[5] met de top-5 frequenties. Voorbeeldgebruik in loop() is uitgecommentarieerd.
Schema's

Productieproces
- Een DTMF-decoder bouwen met alleen een Arduino – Geen extra IC's nodig
- SERENA: Een Aangepast Arduino Mega 2560 Alarmsysteem Met TFT LCD Touchscreen
- Python 3 naar Arduino UNO: Eenvoudige Commando Besturing en LED Demo
- Slim Temperatuurmonitoring Systeem voor Scholen: Nauwkeurig, Real-time en Beveiligd
- Efficiënte 8-bit IO-poort bibliotheek voor Arduino – Uitbreiding digitale controle
- Arduino 64-toets Prototoetsenbord Matrix – Bouw een Aangepast Toetsenbord met Shift Registers
- Hoogwaardige 2,8″ TFT Shield voor Arduino Nano – 320×240 SPI Display
- Geïsoleerde analoge ingangsschakeling voor Arduino bouwen
- Slim Indoor Navigatie Robot Kit voor Arduino Projecten
- HS-code voor hydraulische pompen: classificatie en toepassing
- De Fourier-transformatie begrijpen: fundamentele principes, toepassingen en signaaldecompositie