Skip to content

Commit e93dab8

Browse files
committed
FFTDriverRealFFT: psram support
1 parent d28bb08 commit e93dab8

File tree

1 file changed

+21
-23
lines changed

1 file changed

+21
-23
lines changed

src/AudioTools/AudioLibs/AudioRealFFT.h

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,35 +21,33 @@ class FFTDriverRealFFT : public FFTDriver {
2121
public:
2222
bool begin(int len) override {
2323
this->len = len;
24+
v_x.resize(len);
25+
v_f.resize(len);
2426
if (p_fft_object==nullptr) p_fft_object = new ffft::FFTReal<float>(len);
25-
if (p_x==nullptr) p_x = new float[len];
26-
if (p_f==nullptr) p_f = new float[len];
2727
assert(p_fft_object!=nullptr);
28-
assert(p_x!=nullptr);
29-
assert(p_f!=nullptr);
30-
return p_fft_object!=nullptr && p_x!=nullptr && p_f!=nullptr;
28+
return p_fft_object!=nullptr;
3129
}
3230
void end()override{
33-
if (p_fft_object!=nullptr) delete p_fft_object;
34-
if (p_x!=nullptr) delete[] p_x;
35-
if (p_f!=nullptr) delete[] p_f;
36-
p_fft_object = nullptr;
37-
p_x = nullptr;
38-
p_f = nullptr;
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);
3937
}
4038
void setValue(int idx, float value) override{
41-
p_x[idx] = value;
39+
v_x[idx] = value;
4240
}
4341

4442
void fft() override{
45-
memset(p_f,0,len*sizeof(float));
46-
p_fft_object->do_fft(p_f, p_x);
43+
memset(v_f.data(),0,len*sizeof(float));
44+
p_fft_object->do_fft(v_f.data(), v_x.data());
4745
};
4846

4947
/// Inverse fft - convert fft result back to time domain (samples)
5048
void rfft() override{
5149
// ifft
52-
p_fft_object->do_ifft(p_f, p_x);
50+
p_fft_object->do_ifft(v_f.data(), v_x.data());
5351
}
5452

5553
bool isReverseFFT() override { return true;}
@@ -60,30 +58,30 @@ class FFTDriverRealFFT : public FFTDriver {
6058

6159
/// magnitude w/o sqrt
6260
float magnitudeFast(int idx) override {
63-
return (p_x[idx] * p_x[idx] + p_f[idx] * p_f[idx]);
61+
return (v_x[idx] * v_x[idx] + v_f[idx] * v_f[idx]);
6462
}
6563

6664
bool isValid() override{ return p_fft_object!=nullptr; }
6765

6866
/// get Real value
69-
float getValue(int idx) override { return p_x[idx];}
67+
float getValue(int idx) override { return v_x[idx];}
7068

7169
bool setBin(int pos, float real, float img) override {
7270
if (pos>=len) return false;
73-
p_x[pos] = real;
74-
p_f[pos] = img;
71+
v_x[pos] = real;
72+
v_f[pos] = img;
7573
return true;
7674
}
7775
bool getBin(int pos, FFTBin &bin) override {
7876
if (pos>=len) return false;
79-
bin.real = p_x[pos];
80-
bin.img = p_f[pos];
77+
bin.real = v_x[pos];
78+
bin.img = v_f[pos];
8179
return true;
8280
}
8381

8482
ffft::FFTReal <float> *p_fft_object=nullptr;
85-
float *p_x = nullptr; // real
86-
float *p_f = nullptr; // complex
83+
Vector<float> v_x{0}; // real
84+
Vector<float> v_f{0}; // complex
8785
int len;
8886

8987
};

0 commit comments

Comments
 (0)