arduino-audio-tools
All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends Modules Pages
AudioRealFFT.h
1#pragma once
2
3#include "AudioFFT.h"
4#include "FFT/FFTReal.h"
5
12namespace audio_tools {
13
21 public:
22 bool begin(int len) override {
23 this->len = len;
24 v_x.resize(len);
25 v_f.resize(len);
26 if (p_fft_object==nullptr) p_fft_object = new ffft::FFTReal<float>(len);
27 assert(p_fft_object!=nullptr);
28 return p_fft_object!=nullptr;
29 }
30 void end()override{
31 if (p_fft_object!=nullptr) {
32 delete p_fft_object;
33 p_fft_object = nullptr;
34 }
35 v_x.resize(0);
36 v_f.resize(0);
37 }
38 void setValue(int idx, float value) override{
39 v_x[idx] = value;
40 }
41
42 void fft() override{
43 memset(v_f.data(),0,len*sizeof(float));
44 p_fft_object->do_fft(v_f.data(), v_x.data());
45 };
46
48 void rfft() override{
49 // ifft
50 p_fft_object->do_ifft(v_f.data(), v_x.data());
51 }
52
53 bool isReverseFFT() override { return true;}
54
55 float magnitude(int idx) override {
56 return sqrt(magnitudeFast(idx));
57 }
58
60 float magnitudeFast(int idx) override {
61 return ((v_x[idx] * v_x[idx]) + (v_f[idx] * v_f[idx]));
62 }
63
64 bool isValid() override{ return p_fft_object!=nullptr; }
65
67 float getValue(int idx) override { return v_x[idx];}
68
69 bool setBin(int pos, float real, float img) override {
70 if (pos < 0 || pos >= len) return false;
71 v_x[pos] = real;
72 v_f[pos] = img;
73 return true;
74 }
75 bool getBin(int pos, FFTBin &bin) override {
76 if (pos>=len) return false;
77 bin.real = v_x[pos];
78 bin.img = v_f[pos];
79 return true;
80 }
81
82 ffft::FFTReal <float> *p_fft_object=nullptr;
83 Vector<float> v_x{0}; // real
84 Vector<float> v_f{0}; // complex
85 int len;
86
87};
88
95class AudioRealFFT : public AudioFFTBase {
96 public:
98
100 float* realArray() {
101 return driverEx()->v_x.data();
102 }
103
105 float *imgArray() {
106 return driverEx()->v_f.data();
107 }
108
109 FFTDriverRealFFT* driverEx() {
110 return (FFTDriverRealFFT*)driver();
111 }
112};
113
114}
Executes FFT using audio data privded by write() and/or an inverse FFT where the samples are made ava...
Definition AudioFFT.h:191
FFTDriver * driver()
Definition AudioFFT.h:392
AudioFFT using RealFFT.
Definition AudioRealFFT.h:95
float * realArray()
Provides the real array returned by the FFT.
Definition AudioRealFFT.h:100
float * imgArray()
Provides the complex array returned by the FFT
Definition AudioRealFFT.h:105
Abstract Class which defines the basic FFT functionality.
Definition AudioFFT.h:156
Driver for RealFFT.
Definition AudioRealFFT.h:20
float magnitudeFast(int idx) override
magnitude w/o sqrt
Definition AudioRealFFT.h:60
void setValue(int idx, float value) override
Sets the real value.
Definition AudioRealFFT.h:38
bool isReverseFFT() override
Returns true if reverse FFT is supported.
Definition AudioRealFFT.h:53
bool setBin(int pos, float real, float img) override
sets the value of a bin
Definition AudioRealFFT.h:69
bool getBin(int pos, FFTBin &bin) override
gets the value of a bin
Definition AudioRealFFT.h:75
float magnitude(int idx) override
Calculate the magnitude (fft result) at index (sqr(i² + r²))
Definition AudioRealFFT.h:55
void fft() override
Perform FFT.
Definition AudioRealFFT.h:42
void rfft() override
Inverse fft - convert fft result back to time domain (samples)
Definition AudioRealFFT.h:48
float getValue(int idx) override
get Real value
Definition AudioRealFFT.h:67
Vector implementation which provides the most important methods as defined by std::vector....
Definition Vector.h:21
Definition FFTReal.h:600
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition AudioConfig.h:885
And individual FFT Bin.
Definition AudioFFT.h:65