arduino-audio-tools
Loading...
Searching...
No Matches
AudioKissFFT.h
Go to the documentation of this file.
1#pragma once
2
3#include "kiss_fix.h"
4#include "AudioFFT.h"
5
12namespace audio_tools {
13
21 public:
22 bool begin(int len) override {
23 this->len = len;
25 if (p_fft_object==nullptr) p_fft_object = cpp_kiss_fft_alloc(len,false,nullptr,nullptr);
26 assert(p_fft_object!=nullptr);
27 return p_fft_object!=nullptr;
28 }
29
30 void end() override {
33
34 p_fft_object = nullptr;
35 k_data.resize(0);
36 }
37 void setValue(int idx, float value) override {
38 k_data[idx].r = value;
39 }
40
41 void fft() override {
43 };
44
45 void rfft() override {
46 if(p_fft_object_inv==nullptr) {
47 p_fft_object_inv = cpp_kiss_fft_alloc(len,true,nullptr,nullptr);
48 }
50 };
51
52 float magnitude(int idx) override {
53 return sqrt(magnitudeFast(idx));
54 }
55
57 float magnitudeFast(int idx) override {
58 return (k_data[idx].r * k_data[idx].r + k_data[idx].i * k_data[idx].i);
59 }
60
61 bool isValid() override{ return p_fft_object!=nullptr; }
62
63 bool isReverseFFT() override {return true;}
64
65 float getValue(int idx) override { return k_data[idx].r; }
66
67 bool setBin(int pos, FFTBin &bin) { return FFTDriver::setBin(pos, bin);}
68
69 bool setBin(int pos, float real, float img) override {
70 if (pos>=len) return false;
71 k_data[pos].r = real;
72 k_data[pos].i = img;
73 return true;
74 }
75 bool getBin(int pos, FFTBin &bin) override {
76 if (pos>=len) return false;
77 bin.real = k_data[pos].r;
78 bin.img = k_data[pos].i;
79 return true;
80 }
81
85 int len = 0;
86
87};
94class AudioKissFFT : public AudioFFTBase {
95 public:
97
100 return driverEx()->k_data.data();
101 }
102
106};
107
108
109}
#define assert(T)
Definition avr.h:10
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:551
AudioFFT using FFTReal. The only specific functionality is the access to the dataArray.
Definition AudioKissFFT.h:94
FFTDriverKissFFT * driverEx()
Definition AudioKissFFT.h:103
AudioKissFFT()
Definition AudioKissFFT.h:96
kiss_fft_cpx * dataArray()
Provides the complex array returned by the FFT
Definition AudioKissFFT.h:99
Abstract Class which defines the basic FFT functionality.
Definition AudioFFT.h:156
virtual bool setBin(int idx, float real, float img)
sets the value of a bin
Definition AudioFFT.h:176
Driver for RealFFT.
Definition AudioKissFFT.h:20
float magnitudeFast(int idx) override
magnitude w/o sqrt
Definition AudioKissFFT.h:57
kiss_fft_cfg p_fft_object_inv
Definition AudioKissFFT.h:83
kiss_fft_cfg p_fft_object
Definition AudioKissFFT.h:82
void setValue(int idx, float value) override
Sets the real value.
Definition AudioKissFFT.h:37
bool isReverseFFT() override
Returns true if reverse FFT is supported.
Definition AudioKissFFT.h:63
bool setBin(int pos, float real, float img) override
sets the value of a bin
Definition AudioKissFFT.h:69
bool begin(int len) override
Definition AudioKissFFT.h:22
bool getBin(int pos, FFTBin &bin) override
gets the value of a bin
Definition AudioKissFFT.h:75
void end() override
Definition AudioKissFFT.h:30
Vector< kiss_fft_cpx > k_data
Definition AudioKissFFT.h:84
float magnitude(int idx) override
Calculate the magnitude (fft result) at index (sqr(i² + r²))
Definition AudioKissFFT.h:52
void fft() override
Perform FFT.
Definition AudioKissFFT.h:41
bool setBin(int pos, FFTBin &bin)
Definition AudioKissFFT.h:67
void rfft() override
Calculate reverse FFT.
Definition AudioKissFFT.h:45
float getValue(int idx) override
Get result value from Reverse FFT.
Definition AudioKissFFT.h:65
bool isValid() override
Definition AudioKissFFT.h:61
int len
Definition AudioKissFFT.h:85
Vector implementation which provides the most important methods as defined by std::vector....
Definition Vector.h:21
bool resize(int newSize, T value)
Definition Vector.h:266
T * data()
Definition Vector.h:316
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition AudioCodecsBase.h:10
size_t writeData(Print *p_out, T *data, int samples, int maxSamples=512)
Definition AudioTypes.h:512
And individual FFT Bin.
Definition AudioFFT.h:65
float real
Definition AudioFFT.h:66
float img
Definition AudioFFT.h:67