apply method

double apply(
  1. double input
)
override

Implementation

double apply(double input) {
  var y1 = 0.0;
  if (sample_cnt == 3) {
    for (var ptr = 0; ptr < 2; ptr++) {
      x_val[ptr] = x_val[ptr + 1];
    }
    x_val[2] = input;

    for (var ptr = 0; ptr < 3; ptr++) {
      y1 += numerator[ptr] * x_val[2 - ptr];
    }

    for (var ptr = 1; ptr < 3; ptr++) {
      y1 -= denominator[ptr] * y_val[2 - ptr + 1];
    }

    for (var ptr = 0; ptr < 2; ptr++) {
      y_val[ptr] = y_val[ptr + 1];
    }

    // _sample_cnt = 0;
    y_val[2] = y1;

    return y1;
  } else {
    x_val[sample_cnt] = input;

    for (var ptr = 0; ptr < sample_cnt + 1; ptr++) {
      y1 += numerator[ptr] * x_val[sample_cnt - ptr];

      if (ptr > 0) {
        y1 -= denominator[ptr] * y_val[sample_cnt - ptr];
      }
    }

    y_val[sample_cnt] = y1;
    sample_cnt += 1;

    return y1;
  }
}