diff --git a/window.hh b/window.hh index f8cd512..bc2e0f4 100644 --- a/window.hh +++ b/window.hh @@ -10,6 +10,7 @@ Copyright 2018 Ahmet Inan #include "const.hh" #include "kahan.hh" #include "utils.hh" +#include "unit_circle.hh" #include "coeffs.hh" namespace DSP { @@ -25,7 +26,7 @@ struct Hann : public CoeffsFunc { TYPE operator () (int n, int N) { - return TYPE(0.5) * (TYPE(1) - std::cos(Const::TwoPi() * TYPE(n) / TYPE(N - 1))); + return TYPE(0.5) * (TYPE(1) - UnitCircle::cos(n, N - 1)); } }; @@ -34,16 +35,21 @@ struct Hamming : public CoeffsFunc { TYPE operator () (int n, int N) { - return TYPE(0.54) - TYPE(0.46) * std::cos(Const::TwoPi() * TYPE(n) / TYPE(N - 1)); + return TYPE(0.54) - TYPE(0.46) * UnitCircle::cos(n, N - 1); } }; template -class Lanczos : public CoeffsFunc +struct Lanczos : public CoeffsFunc { TYPE operator () (int n, int N) { +#if 0 return sinc(TYPE(2 * n) / TYPE(N - 1) - TYPE(1)); +#else + return 2*n == N-1 ? TYPE(1) : + UnitCircle::sin(2*n-(N-1), 2*(N-1)) / (Const::Pi()*TYPE(2*n-(N-1))/TYPE(N-1)); +#endif } }; @@ -58,7 +64,7 @@ public: Blackman() : Blackman(TYPE(7938) / TYPE(18608), TYPE(9240) / TYPE(18608), TYPE(1430) / TYPE(18608)) {} TYPE operator () (int n, int N) { - return a0 - a1 * std::cos(Const::TwoPi() * TYPE(n) / TYPE(N - 1)) + a2 * std::cos(Const::FourPi() * TYPE(n) / TYPE(N - 1)); + return a0 - a1 * UnitCircle::cos(n, N-1) + a2 * UnitCircle::cos((2*n)%(N-1), N-1); } };