|
@@ -12,13 +12,13 @@ https://en.wikipedia.org/wiki/Window_function#Hann_and_Hamming_windows |
|
|
*/ |
|
|
*/ |
|
|
template <typename T> |
|
|
template <typename T> |
|
|
inline T hann(T p) { |
|
|
inline T hann(T p) { |
|
|
return 0.5f * (1.f - simd::cos(2*M_PI * p)); |
|
|
|
|
|
|
|
|
return T(0.5) * (1 - simd::cos(2 * T(M_PI) * p)); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/** Multiplies the Hann window by a signal `x` of length `len` in-place. */ |
|
|
/** Multiplies the Hann window by a signal `x` of length `len` in-place. */ |
|
|
inline void hannWindow(float *x, int len) { |
|
|
inline void hannWindow(float *x, int len) { |
|
|
for (int i = 0; i < len; i++) { |
|
|
for (int i = 0; i < len; i++) { |
|
|
x[i] *= hann((float) i / (len - 1)); |
|
|
|
|
|
|
|
|
x[i] *= hann(float(i) / (len - 1)); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@@ -29,14 +29,14 @@ A typical alpha value is 0.16. |
|
|
template <typename T> |
|
|
template <typename T> |
|
|
inline T blackman(T alpha, T p) { |
|
|
inline T blackman(T alpha, T p) { |
|
|
return |
|
|
return |
|
|
+ (1 - alpha) / 2.f |
|
|
|
|
|
- 1 / 2.f * simd::cos(2*M_PI * p) |
|
|
|
|
|
+ alpha / 2.f * simd::cos(4*M_PI * p); |
|
|
|
|
|
|
|
|
+ (1 - alpha) / 2 |
|
|
|
|
|
- T(1) / 2 * simd::cos(2 * T(M_PI) * p) |
|
|
|
|
|
+ alpha / 2 * simd::cos(4 * T(M_PI) * p); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
inline void blackmanWindow(float alpha, float *x, int len) { |
|
|
inline void blackmanWindow(float alpha, float *x, int len) { |
|
|
for (int i = 0; i < len; i++) { |
|
|
for (int i = 0; i < len; i++) { |
|
|
x[i] *= blackman(alpha, (float) i / (len - 1)); |
|
|
|
|
|
|
|
|
x[i] *= blackman(alpha, float(i) / (len - 1)); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@@ -47,15 +47,15 @@ https://en.wikipedia.org/wiki/Window_function#Blackman%E2%80%93Nuttall_window |
|
|
template <typename T> |
|
|
template <typename T> |
|
|
inline T blackmanNuttall(T p) { |
|
|
inline T blackmanNuttall(T p) { |
|
|
return |
|
|
return |
|
|
+ 0.3635819f |
|
|
|
|
|
- 0.4891775f * simd::cos(2*M_PI * p) |
|
|
|
|
|
+ 0.1365995f * simd::cos(4*M_PI * p) |
|
|
|
|
|
- 0.0106411f * simd::cos(6*M_PI * p); |
|
|
|
|
|
|
|
|
+ T(0.3635819) |
|
|
|
|
|
- T(0.4891775) * simd::cos(2 * T(M_PI) * p) |
|
|
|
|
|
+ T(0.1365995) * simd::cos(4 * T(M_PI) * p) |
|
|
|
|
|
- T(0.0106411) * simd::cos(6 * T(M_PI) * p); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
inline void blackmanNuttallWindow(float *x, int len) { |
|
|
inline void blackmanNuttallWindow(float *x, int len) { |
|
|
for (int i = 0; i < len; i++) { |
|
|
for (int i = 0; i < len; i++) { |
|
|
x[i] *= blackmanNuttall((float) i / (len - 1)); |
|
|
|
|
|
|
|
|
x[i] *= blackmanNuttall(float(i) / (len - 1)); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@@ -65,15 +65,15 @@ https://en.wikipedia.org/wiki/Window_function#Blackman%E2%80%93Harris_window |
|
|
template <typename T> |
|
|
template <typename T> |
|
|
inline T blackmanHarris(T p) { |
|
|
inline T blackmanHarris(T p) { |
|
|
return |
|
|
return |
|
|
+ 0.35875f |
|
|
|
|
|
- 0.48829f * simd::cos(2*M_PI * p) |
|
|
|
|
|
+ 0.14128f * simd::cos(4*M_PI * p) |
|
|
|
|
|
- 0.01168f * simd::cos(6*M_PI * p); |
|
|
|
|
|
|
|
|
+ T(0.35875) |
|
|
|
|
|
- T(0.48829) * simd::cos(2 * T(M_PI) * p) |
|
|
|
|
|
+ T(0.14128) * simd::cos(4 * T(M_PI) * p) |
|
|
|
|
|
- T(0.01168) * simd::cos(6 * T(M_PI) * p); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
inline void blackmanHarrisWindow(float *x, int len) { |
|
|
inline void blackmanHarrisWindow(float *x, int len) { |
|
|
for (int i = 0; i < len; i++) { |
|
|
for (int i = 0; i < len; i++) { |
|
|
x[i] *= blackmanHarris((float) i / (len - 1)); |
|
|
|
|
|
|
|
|
x[i] *= blackmanHarris(float(i) / (len - 1)); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|