diff --git a/filter.hh b/filter.hh index 072eaa5..39a23d2 100644 --- a/filter.hh +++ b/filter.hh @@ -56,6 +56,23 @@ public: } }; +template +class HighPass2 +{ + int num, den; + TYPE fac; +public: + HighPass2(int num, int den) : num(num), den(den), fac(TYPE(2*num)/TYPE(den)) {} + TYPE operator () (int n, int N) + { + int twox = 2 * n - (N - 1); + return !twox ? TYPE(1) - fac : + UnitCircle::sin(twox % 4, 4) / (Const::HalfPi() * TYPE(twox)) + - fac * UnitCircle::sin((twox * num) % (2 * den), 2 * den) / + (Const::HalfPi() * fac * TYPE(twox)); + } +}; + template class BandPass {