13iirfilter::iirfilter(
double fc, 
int tp) {
 
   14  wxASSERT(tp == IIRFILTER_TYPE_DEG || tp == IIRFILTER_TYPE_LINEAR ||
 
   15           tp == IIRFILTER_TYPE_RAD);
 
   21double iirfilter::filter(
double data) {
 
   22  if (!std::isnan(data) && !std::isnan(b1)) {
 
   23    if (std::isnan(accum)) accum = 0.0;
 
   25      case IIRFILTER_TYPE_LINEAR:
 
   26        accum = accum * b1 + a0 * data;
 
   29      case IIRFILTER_TYPE_DEG:
 
   31        accum = accum * b1 + a0 * (oldDeg + 360.0 * wraps);
 
   34      case IIRFILTER_TYPE_RAD:
 
   36        accum = accum * b1 + a0 * (oldRad + 2.0 * M_PI * wraps);
 
   47void iirfilter::reset(
double a) {
 
   54void iirfilter::setFC(
double fc) {
 
   55  if (std::isnan(fc) || fc <= 0.0)
 
   59    b1 = exp(-2.0 * 3.1415926535897932384626433832795 * fc);
 
   64void iirfilter::setType(
int tp) {
 
   65  wxASSERT(tp == IIRFILTER_TYPE_DEG || tp == IIRFILTER_TYPE_LINEAR ||
 
   66           tp == IIRFILTER_TYPE_RAD);
 
   70double iirfilter::getFc(
void) {
 
   71  if (std::isnan(b1)) 
return 0.0;
 
   72  double fc = log(b1) / (-2.0 * 3.1415926535897932384626433832795);
 
   76int iirfilter::getType(
void) { 
return type; }
 
   78double iirfilter::get(
void) {
 
   79  if (std::isnan(accum)) 
return accum;
 
   82    case IIRFILTER_TYPE_DEG:
 
   83      while (res < 0) res += 360.0;
 
   84      while (res > 360) res -= 360.0;
 
   87    case IIRFILTER_TYPE_RAD:
 
   88      while (res < 0) res += 2.0 * M_PI;
 
   89      while (res > 2.0 * M_PI) res -= 2.0 * M_PI;
 
   95void iirfilter::unwrapDeg(
double deg) {
 
   96  if (deg - oldDeg > 180) {
 
   98  } 
else if (deg - oldDeg < -180) {
 
  104void iirfilter::unwrapRad(
double rad) {
 
  105  if (rad - oldRad > M_PI) {
 
  107  } 
else if (rad - oldRad < M_PI) {