Downlink
FM satellite TV, sparklies and all, for Resolume

What it does
An FFGL effect for Resolume Arena and Avenue. Analogue satellite TV sent its composite video as frequency modulation of a carrier, because FM trades bandwidth for noise, and that trade has a cliff. Above the FM threshold the picture is clean, with a little fine coloured grain. Below it the discriminator starts throwing clicks: whenever the noise swings the received phasor around the origin, the demodulated phase jumps by a whole cycle, and the de-emphasis and the video lowpass smear each click into a short horizontal streak. Those are the sparklies.
So Downlink builds the link — PAL, CCIR 405 pre-emphasis, an FM carrier with energy dispersal, a noisy channel, a Gaussian IF, a discriminator running at 283.75 MHz, sixteen times the video rate, a lowpass, de-emphasis, a clamp and a PAL decoder — on the GPU, per sample, in parallel. What reaches the screen is whatever the receiver made of it.
FM noise rises with frequency, so after the de-emphasis its worst lands on the chroma subcarrier and the decoder turns it into colour. The output SNR tracks CNR one dB for one, 20.6 dB above it at the defaults, then collapses: from the knee to 3 dB under it the picture loses 9.7 dB. A bright picture holds the carrier off the IF's centre, and the extra clicks are all of the sign that pulls it back, so the sparklies are black on white and white on black. A keyed clamp that samples a click on the back porch lifts or drops a whole line.
The uplink sweeps its carrier with a 25 Hz triangle, energy dispersal. Clamp Good takes it off every line, Slow lags it into a flicker field against field, and Off leaves the brightness rocking at the field rate. Threshold Ext. narrows the noise the discriminator sees by 3 dB and drops the knee by 3.9. Rain Fade takes dB off the link, and Audio Fade does it by the level of the audio routed in. Component swaps PAL for three separate carriers, an idealised MAC.
- The whole FM link on the GPU, per sample, with the discriminator at 283.75 MHz
- Clicks at Rice's rate below threshold, smeared into sparklies by the de-emphasis and lowpass
- Black sparklies on white and white on black, from Rice's modulation term
- Energy dispersal, and a keyed clamp that is Good, Slow or Off
- CNR, deviation, IF and video bandwidth, and CCIR 405 pre- and de-emphasis
- Threshold extension, Rain Fade, and an Audio Fade driven by the audio routed in
- PAL or three-carrier Component
- Universal macOS bundle and a Windows x64 DLL
Where it stands
v0.1.0, and honestly early. The link is measured, not asserted, by an offline harness that drives the real plugin class and the shaders it runs, at two rasters: both emphasis networks are within 0.019 dB of ITU-R F.405-1's 625-line curve, whose own tolerance is 0.10–0.15 dB; on an unmodulated carrier the discriminator's output holds 9,115 / 3,407 / 2,031 / 257 clicks at 4 / 6 / 8 / 10 dB CNR against the sampled discriminator's exact 8,983 / 3,378 / 1,975 / 257, and at 64× the sampling 286,302 /s against Rice's 286,665; near white, positive to negative clicks run 0.279 against 0.268 at 6 dB and 0.198 against 0.200 at 8 dB; above the knee SNR − CNR is within 0.08 dB of the chain's own 20.59 dB, at 1.007 dB per dB; the knee sits at 8.71 dB against 8.57, and threshold extension moves it 3.84 dB against 3.90; with the clamp off every pixel of a flat grey is within 1.8e-5 of the dispersal triangle; and eight negative controls and a one-character mutation of the shipped link shader are caught. All 14 swept controls change the picture. Render cost on macOS for PAL is 3.1 ms/frame at 720p, 3.2 at 1080p and 3.7 at 4K, and 5.8, 5.9 and 6.5 for Component; the discriminator is most of it. It has not yet been loaded into Resolume on macOS. On Windows it has: a build of this source loads, registers and renders in Resolume Arena 7.27.1 on software rendering (win-lab, no GPU), with every parameter as declared; Deviation, Dispersal and IF Bandwidth could not be shown moving against the link's ever-changing noise, and the box has no sound device for the two audio controls. The coloured grain falls out of the chain and is visible, but no check measures the noise spectrum's shape. The IF is Gaussian rather than any real SAW filter, threshold extension is an ideal tracking filter rather than a PLL, the decoder's colour reference is perfect, and nobody has measured Resolume's 64 FFT bins, so Audio Fade reads only their total level. There is a user guide; a browser demo, which is a port rather than the plugin; no presets and no OpenFX port. The macOS builds are signed and notarised. Check it in your own rig before trusting it in a show.
Watch it running
Nothing loads from YouTube until you press play.Watch it there instead