@@ -21,35 +21,33 @@ class FFTDriverRealFFT : public FFTDriver {
21
21
public:
22
22
bool begin (int len) override {
23
23
this ->len = len;
24
+ v_x.resize (len);
25
+ v_f.resize (len);
24
26
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];
27
27
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 ;
31
29
}
32
30
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 ) ;
39
37
}
40
38
void setValue (int idx, float value) override {
41
- p_x [idx] = value;
39
+ v_x [idx] = value;
42
40
}
43
41
44
42
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 () );
47
45
};
48
46
49
47
// / Inverse fft - convert fft result back to time domain (samples)
50
48
void rfft () override {
51
49
// ifft
52
- p_fft_object->do_ifft (p_f, p_x );
50
+ p_fft_object->do_ifft (v_f. data (), v_x. data () );
53
51
}
54
52
55
53
bool isReverseFFT () override { return true ;}
@@ -60,30 +58,30 @@ class FFTDriverRealFFT : public FFTDriver {
60
58
61
59
// / magnitude w/o sqrt
62
60
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]);
64
62
}
65
63
66
64
bool isValid () override { return p_fft_object!=nullptr ; }
67
65
68
66
// / get Real value
69
- float getValue (int idx) override { return p_x [idx];}
67
+ float getValue (int idx) override { return v_x [idx];}
70
68
71
69
bool setBin (int pos, float real, float img) override {
72
70
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;
75
73
return true ;
76
74
}
77
75
bool getBin (int pos, FFTBin &bin) override {
78
76
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];
81
79
return true ;
82
80
}
83
81
84
82
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
87
85
int len;
88
86
89
87
};
0 commit comments