summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVasile Vilvoiu <vasi@vilvoiu.ro>2021-07-20 10:20:32 +0300
committerVasile Vilvoiu <vasi@vilvoiu.ro>2021-07-20 10:20:32 +0300
commit46f0cc9395ffc841626d9242238868383c146233 (patch)
tree1782c10456dddf6c5c8f89ce42d24d3ec4b1a17d
parent5a3eb9f10863abeea248adb2acf5df44a2b0a048 (diff)
Fixed window function term computation.
Adjust coefficients to numpy/scipy implementations.
-rw-r--r--src/window-function.cpp19
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
+}