diff options
| author | Vasile Vilvoiu <vasi@vilvoiu.ro> | 2021-07-20 10:20:32 +0300 |
|---|---|---|
| committer | Vasile Vilvoiu <vasi@vilvoiu.ro> | 2021-07-20 10:20:32 +0300 |
| commit | 46f0cc9395ffc841626d9242238868383c146233 (patch) | |
| tree | 1782c10456dddf6c5c8f89ce42d24d3ec4b1a17d | |
| parent | 5a3eb9f10863abeea248adb2acf5df44a2b0a048 (diff) | |
Fixed window function term computation.
Adjust coefficients to numpy/scipy implementations.
| -rw-r--r-- | src/window-function.cpp | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/src/window-function.cpp b/src/window-function.cpp index 0b1d184..d52ae6d 100644 --- a/src/window-function.cpp +++ b/src/window-function.cpp @@ -58,31 +58,38 @@ GeneralizedCosineWindowFunction::GeneralizedCosineWindowFunction(std::size_t win const std::vector<double>& a) : WindowFunction(window_size) { + if (this->window_size_ == 1) { + /* noop case */ + this->cached_factors_[0] = 1.0; + return; + } + + double N = (double)this->window_size_ - 1.0; for (std::size_t n = 0; n < this->window_size_; n++) { this->cached_factors_[n] = 0; for (unsigned int k = 0; k < a.size(); k++) { this->cached_factors_[n] += - std::pow<double>(-1.0f, k) * a[k] * std::cos(2.0f * (double)M_PI * k * n / this->window_size_); + std::pow<double>(-1.0f, k) * a[k] * std::cos(2.0 * (double)M_PI * k * (double)n / N); } } } HannWindowFunction::HannWindowFunction(std::size_t window_size) - : GeneralizedCosineWindowFunction(window_size, { 0.5f, 0.5f }) + : GeneralizedCosineWindowFunction(window_size, { 0.5, 0.5 }) { } HammingWindowFunction::HammingWindowFunction(std::size_t window_size) - : GeneralizedCosineWindowFunction(window_size, { 0.53836f, 0.46164f }) + : GeneralizedCosineWindowFunction(window_size, { 0.54, 0.46 }) { } BlackmanWindowFunction::BlackmanWindowFunction(std::size_t window_size) - : GeneralizedCosineWindowFunction(window_size, { 7938.0f / 18608.0f, 9240.0f / 18608.0f, 1430.0f / 18608.0f }) + : GeneralizedCosineWindowFunction(window_size, { 0.42, 0.5, 0.08 }) { } NuttallWindowFunction::NuttallWindowFunction(std::size_t window_size) - : GeneralizedCosineWindowFunction(window_size, { 0.355768f, 0.487396f, 0.144232f, 0.012604f }) + : GeneralizedCosineWindowFunction(window_size, { 0.3635819, 0.4891775, 0.1365995, 0.0106411 }) { -}
\ No newline at end of file +} |
