@@ -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