arduino-audio-tools
Loading...
Searching...
No Matches
src
AudioTools
AudioLibs
AudioKissFFT.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "kiss_fix.h"
4
#include "
AudioFFT.h
"
5
12
namespace
audio_tools
{
13
20
class
FFTDriverKissFFT
:
public
FFTDriver
{
21
public
:
22
bool
begin
(
int
len
)
override
{
23
this->len =
len
;
24
k_data
.
resize
(
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
{
31
if
(
p_fft_object
!=
nullptr
)
kiss_fft_free
(
p_fft_object
);
32
if
(
p_fft_object_inv
!=
nullptr
)
kiss_fft_free
(
p_fft_object_inv
);
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
{
42
cpp_kiss_fft
(
p_fft_object
,
k_data
.
data
(),
k_data
.
data
());
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
}
49
cpp_kiss_fft
(
p_fft_object_inv
,
k_data
.
data
(),
k_data
.
data
());
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
82
kiss_fft_cfg
p_fft_object
=
nullptr
;
83
kiss_fft_cfg
p_fft_object_inv
=
nullptr
;
84
Vector<kiss_fft_cpx>
k_data
{0};
// real
85
int
len
= 0;
86
87
};
94
class
AudioKissFFT
:
public
AudioFFTBase
{
95
public
:
96
AudioKissFFT
():
AudioFFTBase
(
new
FFTDriverKissFFT
()) {}
97
99
kiss_fft_cpx
*
dataArray
() {
100
return
driverEx
()->
k_data
.
data
();
101
}
102
103
FFTDriverKissFFT
*
driverEx
() {
104
return
(
FFTDriverKissFFT
*)
driver
();
105
}
106
};
107
108
109
}
AudioFFT.h
assert
#define assert(T)
Definition
avr.h:10
audio_tools::AudioFFTBase
Executes FFT using audio data privded by write() and/or an inverse FFT where the samples are made ava...
Definition
AudioFFT.h:191
audio_tools::AudioFFTBase::driver
FFTDriver * driver()
Definition
AudioFFT.h:551
audio_tools::AudioKissFFT
AudioFFT using FFTReal. The only specific functionality is the access to the dataArray.
Definition
AudioKissFFT.h:94
audio_tools::AudioKissFFT::driverEx
FFTDriverKissFFT * driverEx()
Definition
AudioKissFFT.h:103
audio_tools::AudioKissFFT::AudioKissFFT
AudioKissFFT()
Definition
AudioKissFFT.h:96
audio_tools::AudioKissFFT::dataArray
kiss_fft_cpx * dataArray()
Provides the complex array returned by the FFT
Definition
AudioKissFFT.h:99
audio_tools::FFTDriver
Abstract Class which defines the basic FFT functionality.
Definition
AudioFFT.h:156
audio_tools::FFTDriver::setBin
virtual bool setBin(int idx, float real, float img)
sets the value of a bin
Definition
AudioFFT.h:176
audio_tools::FFTDriverKissFFT
Driver for RealFFT.
Definition
AudioKissFFT.h:20
audio_tools::FFTDriverKissFFT::magnitudeFast
float magnitudeFast(int idx) override
magnitude w/o sqrt
Definition
AudioKissFFT.h:57
audio_tools::FFTDriverKissFFT::p_fft_object_inv
kiss_fft_cfg p_fft_object_inv
Definition
AudioKissFFT.h:83
audio_tools::FFTDriverKissFFT::p_fft_object
kiss_fft_cfg p_fft_object
Definition
AudioKissFFT.h:82
audio_tools::FFTDriverKissFFT::setValue
void setValue(int idx, float value) override
Sets the real value.
Definition
AudioKissFFT.h:37
audio_tools::FFTDriverKissFFT::isReverseFFT
bool isReverseFFT() override
Returns true if reverse FFT is supported.
Definition
AudioKissFFT.h:63
audio_tools::FFTDriverKissFFT::setBin
bool setBin(int pos, float real, float img) override
sets the value of a bin
Definition
AudioKissFFT.h:69
audio_tools::FFTDriverKissFFT::begin
bool begin(int len) override
Definition
AudioKissFFT.h:22
audio_tools::FFTDriverKissFFT::getBin
bool getBin(int pos, FFTBin &bin) override
gets the value of a bin
Definition
AudioKissFFT.h:75
audio_tools::FFTDriverKissFFT::end
void end() override
Definition
AudioKissFFT.h:30
audio_tools::FFTDriverKissFFT::k_data
Vector< kiss_fft_cpx > k_data
Definition
AudioKissFFT.h:84
audio_tools::FFTDriverKissFFT::magnitude
float magnitude(int idx) override
Calculate the magnitude (fft result) at index (sqr(i² + r²))
Definition
AudioKissFFT.h:52
audio_tools::FFTDriverKissFFT::fft
void fft() override
Perform FFT.
Definition
AudioKissFFT.h:41
audio_tools::FFTDriverKissFFT::setBin
bool setBin(int pos, FFTBin &bin)
Definition
AudioKissFFT.h:67
audio_tools::FFTDriverKissFFT::rfft
void rfft() override
Calculate reverse FFT.
Definition
AudioKissFFT.h:45
audio_tools::FFTDriverKissFFT::getValue
float getValue(int idx) override
Get result value from Reverse FFT.
Definition
AudioKissFFT.h:65
audio_tools::FFTDriverKissFFT::isValid
bool isValid() override
Definition
AudioKissFFT.h:61
audio_tools::FFTDriverKissFFT::len
int len
Definition
AudioKissFFT.h:85
audio_tools::Vector
Vector implementation which provides the most important methods as defined by std::vector....
Definition
Vector.h:21
audio_tools::Vector::resize
bool resize(int newSize, T value)
Definition
Vector.h:266
audio_tools::Vector::data
T * data()
Definition
Vector.h:316
audio_tools
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition
AudioCodecsBase.h:10
audio_tools::writeData
size_t writeData(Print *p_out, T *data, int samples, int maxSamples=512)
Definition
AudioTypes.h:512
audio_tools::FFTBin
And individual FFT Bin.
Definition
AudioFFT.h:65
audio_tools::FFTBin::real
float real
Definition
AudioFFT.h:66
audio_tools::FFTBin::img
float img
Definition
AudioFFT.h:67
Generated by
1.9.8