@@ -31,10 +31,13 @@ class WindowFunction {
3131 this ->i_half_samples = samples / 2 ;
3232 }
3333
34- // / Provides the multipication factor at the indicated position. The result is symetrically mirrored around the center
34+ // / Provides the multipication factor at the indicated position. The result is
35+ // / symetrically mirrored around the center
3536 inline float factor (int idx) {
36- float result = idx <= i_half_samples ? factor_internal (idx) : factor_internal (i_samples-idx-1 );
37- return result>1 .0f ? 1 .0f : result;
37+ assert (i_half_samples == i_samples / 2 );
38+ float result = idx <= i_half_samples ? factor_internal (idx)
39+ : factor_internal (i_samples - idx - 1 );
40+ return result > 1 .0f ? 1 .0f : result;
3841 }
3942
4043 // / Provides the number of samples (fft length)
@@ -57,7 +60,6 @@ class WindowFunction {
5760 inline float ratio (int idx) {
5861 return (static_cast <float >(idx)) / samples_minus_1;
5962 }
60-
6163};
6264
6365/* *
@@ -70,28 +72,30 @@ class BufferedWindow : public WindowFunction {
7072 public:
7173 BufferedWindow (WindowFunction* wf) { p_wf = wf; }
7274
73- const char * name () {
75+ const char * name () {
7476 static char buffer[80 ] = " Buffered " ;
75- strncpy (buffer+ 9 , p_wf->name (),69 );
76- return buffer;
77+ strncpy (buffer + 9 , p_wf->name (), 69 );
78+ return buffer;
7779 }
7880
7981 virtual void begin (int samples) override {
8082 // process only if there is a change
8183 WindowFunction::begin (samples);
8284 if (p_wf->samples () != samples) {
8385 p_wf->begin (samples);
84- buffer.resize (i_half_samples + 1 );
85- for (int j = 0 ; j <= i_half_samples; j++) {
86- buffer[j] = p_wf->factor (j);
86+ int to_be_size = i_half_samples + 1 ;
87+ if (buffer.size () != to_be_size) {
88+ buffer.resize (to_be_size);
89+ for (int j = 0 ; j <= i_half_samples; j++) {
90+ buffer[j] = p_wf->factor (j);
91+ }
8792 }
8893 }
8994 }
9095
9196 protected:
9297 WindowFunction* p_wf = nullptr ;
9398 Vector<float > buffer{0 };
94- int len;
9599
96100 float factor_internal (int idx) override {
97101 if (idx < 0 || idx > i_half_samples) return 0.0 ;
@@ -107,11 +111,12 @@ class BufferedWindow : public WindowFunction {
107111class Rectange : public WindowFunction {
108112 public:
109113 Rectange () = default ;
110- float factor_internal (int idx) {
114+ float factor_internal (int idx) {
111115 if (idx < 0 || idx >= i_samples) return 0 ;
112- return 1 .0f ; }
113- const char * name () { return " Rectange" ; }
114- };
116+ return 1 .0f ;
117+ }
118+ const char * name () { return " Rectange" ; }
119+ };
115120
116121/* *
117122 * @brief Hamming FFT Window function
@@ -136,7 +141,7 @@ class Hann : public WindowFunction {
136141 public:
137142 Hann () = default ;
138143 const char * name () { return " Hann" ; }
139-
144+
140145 float factor_internal (int idx) {
141146 return 0 .54f * (1 .0f - cos (twoPi * ratio (idx)));
142147 }
@@ -153,8 +158,8 @@ class Triangle : public WindowFunction {
153158 const char * name () { return " Triangle" ; }
154159 float factor_internal (int idx) {
155160 return 1 .0f - ((2 .0f * fabs ((idx - 1 ) -
156- (static_cast <float >(i_samples - 1 ) / 2 .0f ))) /
157- samples_minus_1);
161+ (static_cast <float >(i_samples - 1 ) / 2 .0f ))) /
162+ samples_minus_1);
158163 }
159164};
160165
@@ -185,7 +190,7 @@ class Blackman : public WindowFunction {
185190 public:
186191 Blackman () = default ;
187192 const char * name () { return " Blackman" ; }
188- float factor_internal (int idx)override {
193+ float factor_internal (int idx) override {
189194 float r = ratio (idx);
190195 return 0 .42323f - (0 .49755f * (cos (twoPi * r))) +
191196 (0 .07922f * (cos (fourPi * r)));
@@ -201,7 +206,7 @@ class BlackmanNuttall : public WindowFunction {
201206 public:
202207 BlackmanNuttall () = default ;
203208 const char * name () { return " BlackmanNuttall" ; }
204- float factor_internal (int idx) override {
209+ float factor_internal (int idx) override {
205210 float r = ratio (idx);
206211 return 0 .3635819f - (0 .4891775f * (cos (twoPi * r))) +
207212 (0 .1365995f * (cos (fourPi * r))) - (0 .0106411f * (cos (sixPi * r)));
@@ -217,7 +222,7 @@ class BlackmanHarris : public WindowFunction {
217222 public:
218223 BlackmanHarris () = default ;
219224 const char * name () { return " BlackmanHarris" ; }
220- float factor_internal (int idx) override {
225+ float factor_internal (int idx) override {
221226 float r = ratio (idx);
222227 return 0 .35875f - (0 .48829f * (cos (twoPi * r))) +
223228 (0 .14128f * (cos (fourPi * r))) - (0 .01168f * (cos (sixPi * r)));
@@ -233,7 +238,7 @@ class FlatTop : public WindowFunction {
233238 public:
234239 FlatTop () = default ;
235240 const char * name () { return " FlatTop" ; }
236- float factor_internal (int idx) override {
241+ float factor_internal (int idx) override {
237242 float r = ratio (idx);
238243 return 0 .2810639f - (0 .5208972f * cos (twoPi * r)) +
239244 (0 .1980399f * cos (fourPi * r));
@@ -249,9 +254,10 @@ class Welch : public WindowFunction {
249254 public:
250255 Welch () = default ;
251256 const char * name () { return " Welch" ; }
252- float factor_internal (int idx) override {
253- float tmp = (((idx - 1 ) - samples_minus_1 / 2 .0f ) / (samples_minus_1 / 2 .0f ));
254- return 1 .0f - (tmp*tmp);
257+ float factor_internal (int idx) override {
258+ float tmp =
259+ (((idx - 1 ) - samples_minus_1 / 2 .0f ) / (samples_minus_1 / 2 .0f ));
260+ return 1 .0f - (tmp * tmp);
255261 }
256262};
257263
0 commit comments