Zero-latency analytic pair from two allpass chains (a 90-degree phase-difference network).
More...
template<FloatType T>
class dspark::HilbertIIR< T >
Zero-latency analytic pair from two allpass chains (a 90-degree phase-difference network).
Two cascades of seven allpass sections in z^-2, H(z) = (c - z^-2) / (1 - c z^-2), one of them followed by a one-sample delay: the classic polyphase-allpass Hilbert network (cf. O. Niemitalo's 90-degree phase difference IIR). The coefficients were designed for this header by minimax optimisation of the phase difference over 20 Hz at 192 kHz up to 20 kHz at 44.1 kHz (normalised 1.04e-4 .. 0.4535): the outputs stay within 0.065 degrees of quadrature over that whole band, so at any rate from 44.1 to 192 kHz the analytic magnitude of a tone ripples by +-0.06% (measured 0.11% peak to peak).
Unlike the FIR Hilbert above the pair has no latency and keeps its accuracy down to 20 Hz, but neither output is the undelayed input: both carry the same frequency-dependent allpass phase. Use it for envelopes (magnitude) and quadrature pairs, not for sample-aligned processing against a dry path. The recursion runs in double regardless of T (poles up to |z| = 0.9998).
- Template Parameters
-
| T | Sample type of the interface (float or double). |
Definition at line 234 of file Hilbert.h.