iOS App

Analog TV
Simulator

A pixel-accurate model of how every major analogue television standard really worked — composite signal and all.

10
Broadcast
Standards
2
GPU Passes
per Frame
Subcarrier
Oversampling
1135
Samples per
PAL Line
25/30
Native Field
Rate (fps)
6
RF Interference
Types

The Encode → Signal → Decode Pipeline

Real composite television doesn't transmit red, green, and blue separately. Instead, the camera collapses the picture into a single voltage waveform — one wire carries everything: brightness, colour, and timing pulses all mixed together. This app replicates that process exactly, in two GPU passes every frame.

1

Encode

Your camera image is converted to a composite signal buffer — a flat array of floating-point voltage samples. The exact sample count per line depends on the standard (790 for 405-line B&W up to 1135 for PAL, sampled at 4× the subcarrier frequency). Sync pulses, colour burst, and picture are all written into the same stream. Subcarrier phase geometry — radians per sample and per line — is pre-computed on the CPU and passed as shader parameters, so every standard uses the same encoder with no hardcoded branches.

2

Composite Signal

The buffer now contains what would be on the cable between a broadcast transmitter and your TV antenna. Colour, brightness, and all the artifacts live together in this single waveform — exactly as they would in real hardware.

3

Decode

A second GPU pass reads the same buffer and reconstructs the picture using the same circuits a real TV would — comb filters, quadrature demodulators, FM discriminators. Artifacts that emerge here are genuine, not painted on.


Ten Standards, Four Signal Families

Every standard gets its own timing geometry, subcarrier frequency, and signal path. The app does not reskin one format to approximate another.

B&W — Monochrome
System A
United Kingdom · 1936–1985
405 lines — world's first public TV

The BBC launched 405-line television in 1936, making it the oldest electronic TV standard. The signal carries only luma — no colour subcarrier is ever generated. System A used AM vestigial-sideband transmission with positive modulation (full white = peak carrier) — the opposite polarity from every later standard.

Lines: 405 · Rate: 25 fps · SR: 8 MHz · Samples/line: 790 · CE_MONO
System M (B&W)
USA · 1941–1954
525 lines — pre-colour NTSC geometry

The 525-line 29.97 fps frame structure was standardised before NTSC colour was added in 1954. Monochrome variant uses the same timing as NTSC-M but generates no subcarrier. Sampled at 14.318 MHz (4× the NTSC colour subcarrier frequency) for timing consistency.

Lines: 525 · Rate: 29.97 fps · SR: 14.318 MHz · Samples/line: 910 · CE_MONO
625-line B&W
Europe · 1950s
625 lines — European pre-colour

Before PAL and SECAM arrived in the mid-1960s, most of Europe broadcast 625-line monochrome. Uses the same line and frame geometry as PAL and SECAM but carries only luma. Sampled at 17.734 MHz — the highest resolution of the 25 fps standards at 1135 samples per active line.

Lines: 625 · Rate: 25 fps · SR: 17.734 MHz · Samples/line: 1135 · CE_MONO
System C
France · Belgium · 1948–1983
819 lines — highest-res analogue standard ever

System C had 819 lines — more than any colour system that came after. Broadcast on VHF with an 8 MHz video bandwidth, it delivered extraordinary vertical resolution for its era. Requires a 22 MHz sampling rate; active line width is 1074 samples. Pure luma — no colour subcarrier.

Lines: 819 · Rate: 25 fps · SR: 22 MHz · Samples/line: 1074 · CE_MONO
NTSC — Quadrature AM (YIQ)
NTSC-M
USA · Canada · 1954
Quadrature AM — 525 lines, 29.97 fps

Colour is encoded as two signals — I (orange–cyan) and Q (green–magenta) — modulated 90° apart onto a 3.58 MHz subcarrier. A 7.5 IRE pedestal lifts black level above blanking. Because receivers must lock an oscillator to a burst that can drift, poorly-adjusted sets produce a visible hue shift — giving rise to "Never The Same Colour".

Subcarrier: 3.579545 MHz · YIQ · Burst: 180° ref · Pedestal: 7.5 IRE
NTSC-J
Japan · 1960
Zero-pedestal NTSC — 525 lines, 29.97 fps

Electrically identical to NTSC-M except the 7.5 IRE pedestal is absent — black is at blanking level (0 IRE). The result is a slightly wider usable contrast range. On a correctly calibrated monitor the difference is invisible; on a misaligned set, NTSC-J material through an NTSC-M decoder looks slightly washed out.

Subcarrier: 3.579545 MHz · YIQ · Burst: 180° ref · Pedestal: 0 IRE
PAL — Phase Alternating Line (YUV)
PAL
Europe · Australia · 1967
Phase Alternating Line — 625 lines, 25 fps

Uses quadrature modulation like NTSC but flips the phase of the V (red–cyan) component on every line. A TV with a 1-line delay averages adjacent lines, cancelling phase errors. This self-correcting mechanism makes PAL far more tolerant of signal reflections and transmitter drift — no hue knob required.

Subcarrier: 4.433619 MHz · YUV · V-switch: ±180°/line · 1135 samples/line
PAL-M
Brazil · 1972
PAL colour on 525-line NTSC timing

Brazil is the only country that combined the PAL V-switching colour system with the 525-line 29.97 fps NTSC frame structure. The result requires a unique subcarrier frequency — 3.575611 MHz — to keep harmonics aligned with the line rate. Incompatible with both standard NTSC and PAL.

Subcarrier: 3.575611 MHz · YUV · V-switch · 525 lines · 909 samples/line
PAL-N
Argentina · Uruguay · 1981
PAL colour, reduced subcarrier, 625 lines

Uses 625-line 25 fps timing but shifts the subcarrier to 3.582056 MHz for harmonic compatibility with South American IF infrastructure inherited from NTSC-era equipment. Restores the 7.5 IRE pedestal that standard PAL lacks, matching NTSC-M black levels. Active line width is 917 samples.

Subcarrier: 3.582056 MHz · YUV · V-switch · 625 lines · 917 samples/line
SECAM — Sequential Colour with Memory (FM)
SECAM
France · USSR · Middle East · 1967
Frequency Modulation — 625 lines, 25 fps

SECAM uses frequency modulation — like FM radio — instead of amplitude/phase. The two colour signals (Db, Dr) are transmitted on alternating lines, each FM-modulating its own subcarrier. FM is immune to amplitude variations, giving excellent colour stability. Because FM requires continuous phase, a special per-line sequential CPU kernel handles SECAM encode. No colour burst is transmitted.

Subcarriers: 4.250 / 4.406 MHz · YDbDr · FM · No colour burst · 1135 samples/line

Genuine Imperfections — Not Filters

These imperfections aren't applied over a clean image. They arise naturally from simulating the actual signal path — the same cause as on real hardware.

Dot Crawl
The subcarrier can't be perfectly separated from the luminance signal, leaving a faint animated pattern crawling along high-contrast edges. Controllable with the CRAWL slider.
Cross-Colour
Fine stripes or textures whose frequency happens to be near the subcarrier get misread as colour. Classic example: herringbone jackets on 1980s TV presenters.
SECAM Fire
At a colour transition, the FM carrier must jump to a new frequency. The phase overshoot during this transition creates a brief flare of wrong colour at vertical bar edges — an artifact unique to SECAM.
Chroma Smear
Colour has lower bandwidth than brightness in every standard. Sharp colour boundaries are blurry in the horizontal direction. VHS makes this far worse — colour bandwidth collapses to ~500 kHz.
VHS Head Switch
At the bottom of each frame, the tape heads briefly disengage as the cassette mechanism cycles. This produces a horizontal noise stripe — visible with the INTL + VHS toggles active.

Injected Into the Composite Signal

Every effect is injected into the composite signal itself — not applied as a post-process filter — so it interacts with the decoder's comb filters and demodulators exactly as it would on real hardware.

Multipath Ghosts (GHOST · G2 · G3)
The TV signal bounces off buildings, hills, and terrain before reaching the antenna. Each reflected path arrives a few microseconds late — tens of composite samples — adding a faded, horizontally-shifted echo of the picture. Three independent ghosts with separate delays and amplitudes. Because echoes enter the buffer before decoding, the comb filter, chroma demodulator, and SECAM discriminator all react authentically.
Airplane Flutter (FLUTTER)
An aircraft flying between transmitter and receiver reflects a time-varying ghost. Two slightly mismatched oscillators (~0.68 Hz and ~0.51 Hz) beat against each other, producing the irregular, slowly-pulsing brightness variation that characterises actual aircraft flutter. At FLUTTER = 0 Ghost 1 is static; at 1.0 the amplitude swings between zero and twice its set level.
Hum Bars (HUM)
Mains electricity (50 or 60 Hz) enters the signal path through the power supply or an unshielded antenna cable, adding sinusoidal modulation to the composite baseline. Because the mains frequency doesn't exactly match the TV field rate, the bars roll slowly upward at the beat frequency — one full revolution roughly every 16 seconds. Continuous and automatic.
Co-Channel Interference (CO-CH)
When two transmitters broadcast on the same channel from different locations, their carriers beat against each other at a few hertz. The beat creates a spatially-coherent sinusoidal pattern — diagonal lines of alternating bright and dark — that drifts across the picture at ~4 Hz. The classic "venetian blind" effect from fringe reception areas.
Impulse Noise (IMPULSE)
Car ignition systems, electric motors, and light dimmers produce brief broadband RF pulses. Each pulse hits a fraction of a horizontal scan line, causing a bright white streak. IMPULSE controls both the probability of a line being struck each frame and the spike amplitude — from occasional flickers to a noisy urban environment.
IF Filter Ringing (RING)
A TV receiver's IF strip uses a bandpass filter to select the desired channel. Every filter with a finite transition band has a damped sinusoidal impulse response — "ringing" — that trails any sharp signal transition. RING adds this decaying oscillation (computed via an 8-tap model) to the luma signal after bright-to-dark and dark-to-bright transitions.

The Viewer's Side of the Signal

These sliders model the physical adjustment controls found inside a real CRT television. They operate exclusively on the decoded composite signal — the encoded waveform is never modified — so sync pulses and colour burst remain pristine.

H-Hold (Horizontal Hold)
The horizontal oscillator must lock to line sync pulses at exactly 15,625 Hz (PAL) or 15,734 Hz (NTSC). When it drifts, each successive line starts a few composite samples earlier or later, accumulating as a sawtooth that shears the picture diagonally. At the fold point the picture wraps around the screen edge, leaving a vertical noise stripe.
V-Hold (Vertical Hold)
The vertical oscillator fires once per field in response to vertical sync. When it drifts, the picture rolls continuously — upward if fast, downward if slow. A slowly-rolling picture completing one revolution every few seconds was the most common sign of a failing capacitor in the vertical timebase circuit. Accumulated every frame; reset to zero by RESET ALL.
H-Phase (Horizontal Position)
A physical trim control on the deflection yoke that shifts the electron beam's horizontal starting position without affecting the oscillator frequency. Used during factory calibration to centre the picture within the raster. Shifting too far exposes the blanking interval — containing sync pulses and colour burst — on one side of the screen. Range: ±100 composite samples.
V-Phase (Vertical Position)
The equivalent centering control for the vertical axis. On many consumer sets this was a preset potentiometer on the chassis rather than a front-panel knob, adjusted during servicing. At extreme offsets the blanking interval — a thick black band — becomes visible at the top or bottom of the picture.
RF Fine Tuning
Slightly off-tuning the VHF or UHF front end shifts the IF carrier frequency away from nominal, creating a beat between the received colour subcarrier and the TV's internal colour reference oscillator. The resulting phase error varies sinusoidally across both horizontal and vertical dimensions, producing the characteristic herringbone or diagonal hatch pattern. Slider maps 0 → π radians of peak chroma phase error.
INTL (Interlaced Scanning)
Real broadcast television transmitted two fields per frame: one containing even-numbered lines, one odd-numbered lines, each at the full field rate (50 or 59.94 Hz). INTL samples every other source line per field — field 0 captures rows 0, 2, 4…; field 1 captures rows 1, 3, 5… — giving each field genuine half-vertical-resolution. The CRT post-process stage shifts its scanline mask by one row between fields, replicating phosphor interleave.

Technical Notes

Sampling Rates

Each standard sampled at 4× its native subcarrier frequency: 14.318 MHz for NTSC-M/J, 17.734 MHz for PAL/SECAM/625B&W, 14.303 MHz for PAL-M, 14.328 MHz for PAL-N, 8 MHz for System A, 22 MHz for System C.

Subcarrier Geometry

Phase — radians per sample and per line — is pre-computed per standard on the CPU. All colour formats share the same GPU encoder and decoder kernels with no hardcoded format branches in the shaders.

Reference Mode

REF mode bypasses all noise and CRT effects so you can verify the raw encode–decode roundtrip. Useful for confirming that a given standard's subcarrier, pedestal, and burst geometry are correct.

Timing-Accurate Mode

SYNC mode gates simulation updates to the standard's native field rate — 29.97 fps for NTSC-family, 25 fps for PAL/SECAM/B&W — using a drift-corrected timer rather than the display's 60 Hz refresh.

Waveform Monitor & Vectorscope

The built-in waveform monitor and vectorscope show actual signal values — the same measurements you'd see on real broadcast test equipment. The vectorscope traces the I/Q or U/V constellation of the decoded signal.

SECAM Encode Accuracy

SECAM uses a per-line sequential CPU kernel because FM requires continuous phase between adjacent samples — something GPU parallelism cannot provide. The kernel writes into the same composite buffer consumed by the decode shader.