channel¶
Project-wide impairments of the pressing: properties of the disc and the channel it is read through, rather than of one capture. Optional — omit the block for an ideal channel.
These two apply to any standard and any capture chain. The impairments that come from LaserVision itself — the FM-beat herringbone, the IEC 60856 group-delay pre-distortion, the replay response and the field-2 misregistration — are in the LaserVision channel, laserdisc.channel.
Every project that models one pressing must use the same channel: block. The capture noise layer, the chroma error and the dropouts describe one capture and can differ between projects; the channel cannot.
Keys¶
The block must set at least one of timing_offset_samples and edge_smear. An empty channel: block, or any other key, is a parse error; fm_beat here is rejected with an error pointing to laserdisc.channel.fm_beat.
| Key | Type | Required | Range | Description |
|---|---|---|---|---|
timing_offset_samples |
float | No | −8.0 to 8.0 | Sub-sample timing offset in 4fsc samples. Positive values make the signal arrive later |
edge_smear |
map | No | — | Readout edge smear; see edge_smear |
edge_smear keys¶
| Key | Type | Required | Range | Description |
|---|---|---|---|---|
fraction |
float | Yes | 0.0 to 0.5 | Fraction of the signal that is smeared |
tau_samples |
float | Yes | above 0, up to 100 | Time constant of the smear, in 4fsc samples |
Behaviour¶
| Configuration | Result |
|---|---|
| Block absent | No channel stage; output is unchanged |
timing_offset_samples: 0.0 only |
No processing; output is bit-identical to the block being absent |
| Integer offset | An exact shift of the frame by that many samples |
| Fractional offset | A band-limited delay of the frame |
edge_smear.fraction: 0.0 |
No smear; output is bit-identical to leaving edge_smear out |
timing_offset_samples¶
The offset moves the whole sampled signal in time relative to the sampling grid — sync, VBI, VITS and picture alike — as two players would when their capture clocks lock with a slightly different phase. A stacking tool has to align captures with different offsets before it can average them.
- The integer part is an exact index shift.
- The fractional part is a 32-tap Kaiser-windowed-sinc fractional-delay filter (β = 8) normalised to unit DC gain, so flat levels pass unchanged. Up to 6 MHz its response is within 0.001 dB and 0.0002 sample of an ideal delay on every standard; content closer to Nyquist is progressively attenuated.
- Each frame is shifted circularly within itself. The frame boundary lies in vertical blanking, so the samples that wrap are sync and equalising pulses only.
edge_smear¶
A fraction of the signal passes through a one-pole low-pass, as a player's readout trails each sharp transition:
H(z) = (1 − c) + c · (1 − a) / (1 − a z⁻¹), with c = fraction and a = exp(−1 / tau_samples)
- After a step, the output reaches 1 − c·aⁿ⁺¹ at sample n. Flat levels pass unchanged (the DC gain is 1), and the filter never overshoots.
- It applies to Y and C over the whole frame, VITS included, so a stacking tool can measure the smear from a VITS bar edge.
- Each frame is treated as circular: the filter state is primed over the frame's own last ⌈20·
tau_samples⌉ samples, so the result depends on that frame alone and is the same whatever order frames are rendered in.
Common rules¶
- The smear and the delay are applied in that order, after the LaserVision channel: the FM beat and the replay filter belong to the disc and the player's replay path, so the readout smear and the sampling offset apply to them.
- Each step rounds to the internal fixed-point step. Y is clamped to the same legal range as noise injection; C is centred on zero and is left for the output stage to quantise, so saturated chroma is not clipped.
- Both run on the Y and C signals after generation and before noise, so both noise layers are added afterwards and keep the configured spectrum. The shared (pressing) layer is then delayed by
timing_offset_samples, as the picture was, so it stays on the picture's samples; the band-limited delay leaves its spectrum unchanged to within 0.001 dB up to 6 MHz. The capture layer is not delayed.
Stage order¶
The channel stage runs once per frame, between generation and noise:
- Generation
- Channel: the LaserVision channel (FM beat, then group delay and replay response), then edge smear, then timing offset
- Chroma error
- Line timing
- Noise (capture layer, then shared layer)
- Dropouts
- Output
Rules¶
timing_offset_samplesoutside −8.0 to 8.0 is a validation error.edge_smear.fractionoutside 0.0 to 0.5, oredge_smear.tau_samplesnot above 0 or above 100, is a validation error.edge_smearwithout both of its keys is a parse error.- A non-numeric value is a parse error.