arduino-audio-tools
Loading...
Searching...
No Matches
AudioCmsisFFT.h
Go to the documentation of this file.
1#pragma once
2#include "AudioFFT.h"
3#ifdef STM32
4# include "CMSIS_DSP.h"
5#endif
6#if defined(ARDUINO_ARCH_RENESAS) || defined(ARDUINO_ARCH_RP2040)
7# include "arm_vec_fft.h"
8#endif
15namespace audio_tools {
16
24 public:
25 bool begin(int len) override {
26 TRACEI();
27 this->len = len;
28 input = new float[len];
29 output = new float[len*2];
30 output_magn = new float[len];
33 LOGE("arm_rfft_fast_init_f32: %d", status);
34 }
35 assert(input!=nullptr);
36 assert(output!=nullptr);
37 assert(output_magn != nullptr);
38 return input!=nullptr && output != nullptr && output_magn != nullptr;
39 }
40 void end()override{
41 TRACEI();
42 if (input!=nullptr) delete input;
43 if (output!=nullptr) delete output;
44 if (output_magn!=nullptr) delete output_magn;
45 input = nullptr;
46 output = nullptr;
47 output_magn = nullptr;
48 }
49
50 void setValue(int idx, float value) override{
51 input[idx] = value;
52 }
53
54 void fft() override {
55 TRACED();
58 /* Calculates maxValue and returns corresponding BIN value */
60 TRACED();
61 };
62
63 void rfft() override {
65 }
66
67 float magnitude(int idx) override {
68 return output_magn[idx];
69 }
70
72 float magnitudeFast(int idx) override {
73 return output_magn[idx];
74 }
75
76 float getValue(int idx) override { return input[idx];}
77
78 bool setBin(int pos, float real, float img) override {
79 if (pos>=len) return false;
80 output[pos*2] = real;
81 output[pos*2+1] = img;
82 return true;
83 }
84 bool getBin(int pos, FFTBin &bin) override {
85 if (pos>=len) return false;
86 bin.real = output[pos*2];
87 bin.img = output[pos*2+1];
88 return true;
89 }
90
91 bool isReverseFFT() override {return true;}
92
93 bool isValid() override{ return status==ARM_MATH_SUCCESS; }
94
97 int len;
98 float *input=nullptr;
99 float *output_magn=nullptr;
100 float *output=nullptr;
103
104};
105
113 public:
115
117 float* array() {
118 return driverEx()->output;
119 }
120
121 float* magnitudes() {
122 return driverEx()->output_magn;
123 }
124
131
135};
136
137
138}
#define TRACEI()
Definition AudioLoggerIDF.h:32
#define TRACED()
Definition AudioLoggerIDF.h:31
#define LOGE(...)
Definition AudioLoggerIDF.h:30
#define assert(T)
Definition avr.h:10
AudioFFT for ARM processors that provided Cmsis DSP.
Definition AudioCmsisFFT.h:112
FFTDriverCmsisFFT * driverEx()
Definition AudioCmsisFFT.h:132
AudioCmsisFFT()
Definition AudioCmsisFFT.h:114
float * array()
Provides the result array returned by CMSIS FFT.
Definition AudioCmsisFFT.h:117
float * magnitudes()
Definition AudioCmsisFFT.h:121
AudioFFTResult result()
Definition AudioCmsisFFT.h:125
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
Driver for Cmsis-FFT see https://arm-software.github.io/CMSIS_5/DSP.
Definition AudioCmsisFFT.h:23
float magnitudeFast(int idx) override
same as magnitude
Definition AudioCmsisFFT.h:72
void setValue(int idx, float value) override
Sets the real value.
Definition AudioCmsisFFT.h:50
uint32_t result_index
Definition AudioCmsisFFT.h:102
bool isReverseFFT() override
Returns true if reverse FFT is supported.
Definition AudioCmsisFFT.h:91
bool setBin(int pos, float real, float img) override
sets the value of a bin
Definition AudioCmsisFFT.h:78
bool begin(int len) override
Definition AudioCmsisFFT.h:25
bool getBin(int pos, FFTBin &bin) override
gets the value of a bin
Definition AudioCmsisFFT.h:84
void end() override
Definition AudioCmsisFFT.h:40
float result_max_value
Definition AudioCmsisFFT.h:101
arm_rfft_fast_instance_f32 fft_instance
Definition AudioCmsisFFT.h:95
float magnitude(int idx) override
Calculate the magnitude (fft result) at index (sqr(i² + r²))
Definition AudioCmsisFFT.h:67
arm_status status
Definition AudioCmsisFFT.h:96
float * input
Definition AudioCmsisFFT.h:98
void fft() override
Perform FFT.
Definition AudioCmsisFFT.h:54
void rfft() override
Calculate reverse FFT.
Definition AudioCmsisFFT.h:63
float * output_magn
Definition AudioCmsisFFT.h:99
float getValue(int idx) override
Get result value from Reverse FFT.
Definition AudioCmsisFFT.h:76
float * output
Definition AudioCmsisFFT.h:100
bool isValid() override
Definition AudioCmsisFFT.h:93
int len
Definition AudioCmsisFFT.h:97
Abstract Class which defines the basic FFT functionality.
Definition AudioFFT.h:156
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
Result of the FFT.
Definition AudioFFT.h:23
float magnitude
Definition AudioFFT.h:25
And individual FFT Bin.
Definition AudioFFT.h:65
float real
Definition AudioFFT.h:66
float img
Definition AudioFFT.h:67