ComplexPair BandPassTransform::transform (complex_t c) { if (c == infinity()) return ComplexPair (-1, 1); c = (1. + c) / (1. - c); // bilinear complex_t v = 0; v = addmul (v, 4 * (b2 * (a2 - 1) + 1), c); v += 8 * (b2 * (a2 - 1) - 1); v *= c; v += 4 * (b2 * (a2 - 1) + 1); v = std::sqrt (v); complex_t u = -v; u = addmul (u, ab_2, c); u += ab_2; v = addmul (v, ab_2, c); v += ab_2; complex_t d = 0; d = addmul (d, 2 * (b - 1), c) + 2 * (1 + b); return ComplexPair (u/d, v/d); }
void DigitalRASTA::design (double pole) { add(ComplexPair(complex_t(0, 0), complex_t(0, 0)), ComplexPair(complex_t(1, 0), complex_t(-1, 0))); add(ComplexPair(complex_t(pole, 0), complex_t(0, 0)), ComplexPair(complex_t(-0.25, sqrt(15./16.)), complex_t(-0.25, -sqrt(15./16.)))); setNormal(0, 1); }
ComplexPair BandStopTransform::transform (complex_t c) { if (c == infinity()) c = -1; else c = (1. + c) / (1. - c); // bilinear complex_t u (0); u = addmul (u, 4 * (b2 + a2 - 1), c); u += 8 * (b2 - a2 + 1); u *= c; u += 4 * (a2 + b2 - 1); u = std::sqrt (u); complex_t v = u * -.5; v += a; v = addmul (v, -a, c); u *= .5; u += a; u = addmul (u, -a, c); complex_t d (b + 1); d = addmul (d, b-1, c); return ComplexPair (u/d, v/d); }