コード例 #1
0
ファイル: PoleFilter.cpp プロジェクト: SINTEFMedtek/CustusX
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);
}
コード例 #2
0
ファイル: RASTA.cpp プロジェクト: antarespilot/DSPFilters
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);
}
コード例 #3
0
ファイル: PoleFilter.cpp プロジェクト: SINTEFMedtek/CustusX
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);
}