protected sealed override void Apply1DFilter(Range range, Signal1D <double> yExt, Signal1D <double> xExt) { range.GetBounds(out int i0, out int i1); // Parameters defined in Table F.4 const double alpha = -1.586134342059924; const double beta = -0.052980118572961; const double gamma = 0.882911075530934; const double delta = 0.443506852043971; const double kappa = 1.230174104914001; var n0 = FloorDiv(i0, 2); var n1 = FloorDiv(i1, 2); // Equation F.7 - Step 1 for (var n = n0 - 1; n < n1 + 2; n++) { xExt[2 * n] = kappa * yExt[2 * n]; } // Equation F.7 - Step 2 for (var n = n0 - 2; n < n1 + 2; n++) { xExt[2 * n + 1] = (1 / kappa) * yExt[2 * n + 1]; } // Equation F.7 - Step 3 for (var n = n0 - 1; n < n1 + 2; n++) { xExt[2 * n] = xExt[2 * n] - delta * (xExt[2 * n - 1] + xExt[2 * n + 1]); } // Equation F.7 - Step 4 for (var n = n0 - 1; n < n1 + 1; n++) { xExt[2 * n + 1] = xExt[2 * n + 1] - gamma * (xExt[2 * n] + xExt[2 * n + 2]); } // Equation F.7 - Step 5 for (var n = n0; n < n1 + 1; n++) { xExt[2 * n] = xExt[2 * n] - beta * (xExt[2 * n - 1] + xExt[2 * n + 1]); } // Equation F.7 - Step 6 for (var n = n0; n < n1; n++) { xExt[2 * n + 1] = xExt[2 * n + 1] - alpha * (xExt[2 * n] + xExt[2 * n + 2]); } }
protected sealed override void Apply1DFilter(Range range, Signal1D <int> yExt, Signal1D <int> xExt) { range.GetBounds(out int i0, out int i1); var n0 = FloorDiv(i0, 2); var n1 = FloorDiv(i1, 2); // Equation F.5 for (var n = n0; n < n1 + 1; n++) { xExt[2 * n] = yExt[2 * n] - FloorDiv(yExt[2 * n - 1] + yExt[2 * n + 1] + 2, 4); } // Equation F.6 for (var n = n0; n < n1; n++) { xExt[2 * n + 1] = yExt[2 * n + 1] + FloorDiv(xExt[2 * n] + xExt[2 * n + 2], 2); } }
public ThreadLocal1DSubbandReconstructionState(Range extendedRange) { YExt = new Signal1D <T>(extendedRange); XExt = new Signal1D <T>(extendedRange); }