GDVP License

Oversampling

Oversamplers — GDVP_NODE_UPSAMPLER / GDVP_NODE_DOWNSAMPLER ✅ (auto-injected)

← Node Reference · Manual index

A matched pair of polyphase half-band FIR converters that move signal between the base rate and 2× oversampled rate without aliasing. You never place these manually — the DAG compiler inserts them automatically around any node that runs oversampled, so the rate boundary is band-limited rather than naive. Source: gdvp_dsp_oversampling.c, payloads gdvp_node_upsampler_t / gdvp_node_downsampler_t.

What they do

  • Upsampler (1×→2×): interpolates a band-limited sample between each input sample, doubling the rate ahead of an oversampled node. Carries a 5-sample tail across blocks.
  • Downsampler (2×→1×): low-pass filters and decimates the 2× signal back to base rate after the oversampled node. Carries a 10-sample tail.

Both use the same 11-tap symmetric half-band FIR with its corner at fs/4 (Nyquist/2 of the base rate), stored as three Q15 coefficients (the other taps are zero or the unity centre tap). Filter gain bookkeeping is handled by the shift amounts (>>14 up, >>15 down) so levels are preserved across the conversion.

Parameters

None that you set. These nodes have no operator parameters and no parameter-updater entry — they are pure structural plumbing inserted by the compiler. Their only state is the FIR tail and an ownership link back to the node they wrap (parent_node_id), used so re-compilation stays idempotent.

Why a node would be oversampled

Oversampling is requested via the node header flag GDVP_NODE_FLAG_OVERSAMPLED (which makes that node process 128-sample blocks instead of 64). It's used where a nonlinearity would otherwise alias — bright/aggressive filter settings, saturating VCA drive, FM. When a node is flagged oversampled but its neighbours are not, the compiler brackets it with an upsampler/downsampler pair so the rate change itself doesn't introduce aliasing.

This is also where the filter's OSAC correction matters: an oversampled filter uses a different, exact coefficient LUT for the 128-sample rate rather than approximating.


← Node Reference · Manual index