Level-0 digital twin · horizontal path

FSO turbulence bench / 1 km

The air between two telescopes is not empty. It is a slow-moving field of warm and cool pockets, each one a weak lens, all of it blowing sideways. This is what that does to your beam.
The air
The link
The budget
How rough is the air
Receiver plane
Power into the detector
Budget & fades
Outage against fade margin. The knee is your design point — left of it you are buying nothing, right of it every dB gets expensive.
Pointing & tracking loop
Fade distribution
Weather & wavelength
Diurnal cycle
How to read this, and when it is the wrong tool

The one number that runs everything

Rytov variance, σ²R = 1.23·Cn²·k^(7/6)·L^(11/6), is a single scalar answer to "how rough is this path." Below about 1 you are in weak turbulence and lognormal fade statistics hold. Above it the intensity fluctuations begin to saturate and everything here turns optimistic. Note the exponent on range: doubling the path makes turbulence 3.6× worse, not 2×. That is why 1 km is a real test and 100 m is not.

Two effects, and they are not the same problem

Spreading and wander cost you mean power. They are a link-budget problem — watch the solid beam envelope grow past the dashed diffraction-only envelope in the scene above. Scintillation costs you availability. The mean is fine; the deep fades are what drop packets. That is the scope trace.

Why r₀ versus your beam size decides the character

When the Fried coherence length r₀ is larger than the beam, the beam mostly gets tilted as a whole — it wanders, and a tracking loop can chase it. When r₀ drops below the beam diameter, the wavefront breaks up into independent patches and the beam shatters into speckle, which no gimbal can fix. Slide Cn² up and watch the eddies in the scene shrink past the beam width. That crossover is the moment tracking stops being the answer and aperture averaging or diversity becomes the answer.

Why the receiver aperture is the best knob you have

A large lens collects more mean power and integrates over more speckle cells, so it suppresses scintillation at the same time. Compare σ²I point against σ²I aperture as you widen D. Once D is comfortably bigger than the Fresnel scale √(λL) — about 39 mm at 1 km and 1550 nm — you start winning hard. Adding glass is very often cheaper than adding transmit power or coding gain.

Wind sets the clock, not the depth

Crosswind does not change how deep the fades are, only how fast they arrive, through v/√(λL). This is the number that sizes an interleaver: at 1.25 Gbps a 2 ms fade is 2.5 Mbit of buffer, which is a memory budget conversation, not a hand-wave.

The tracking loop, and why frame rate beats gain

Beam wander sits on a Tyler tilt spectrum: roughly f^(-2/3) up to a knee at 0.24·v/D_tx, then f^(-11/3) above it. Most of the variance piles up just below that knee, so where the knee sits relative to your sampler decides everything. The panel shows the disturbance and what survives the loop, with the region above Nyquist shaded — the loop cannot see anything in there, cannot reject it, and folds it back into the control band as apparent low-frequency error.

Two failure modes are worth provoking deliberately. Set the frame rate very low and watch the above Nyquist figure climb past 50% while rejection collapses to under a dB: no gain tuning recovers that, only a faster camera. Then set a high bandwidth against a knee the loop cannot reach and watch rejection go negative — the sensitivity peak near crossover injects more than the integrator removes. That is the waterbed, and it is why "turn up the gain" is usually the wrong instinct. optimise loop finds the bandwidth that genuinely minimises residual for your delay, which is often far lower than you would guess.

Note also that with a wide, pointing-tolerant beam the loop buys nothing, because wander is a small fraction of the beam radius to begin with. Tracking only starts paying once the beam is tight enough that missing costs you real power. That tension — divergence for tolerance versus divergence for gain — is the actual design decision.

Dust is not fog

Fog droplets are comparable to the wavelength, so scattering is selective and 1550 nm beats 850 nm. Dust particles are tens of microns, far larger than either, so scattering is non-selective, the Kim exponent goes to zero, and the two wavelengths are identical. Switch the weather panel between fog and dust at the same visibility and watch the wavelength advantage vanish. In the Gulf that is the case that matters, and it is the opposite of what most FSO literature assumes.

The diurnal curve

Cn² over ground swings three orders of magnitude across a day. The two dips are the neutral events near sunrise and sunset, when the surface heat flux passes through zero and the temperature gradient briefly vanishes. Best seeing of the day by a wide margin, and the reason field campaigns start early. Hit day sweep and watch a link that is comfortable at dawn shatter by early afternoon without a single parameter changing except the sun.

Closing the loop with real data

export 30 s log writes a synthetic received-power CSV generated from exactly the physics on screen, with the configuration embedded in the header comments. Run calibrate.py against it and you should get your own Cn² back. Then run the same script against a real campaign log and see how far apart they land. On a clean record the inversion is good to a couple of percent; when it refuses to converge, that refusal is itself the finding — it usually means something in the record is not atmospheric.

When to reach for this

For the questions you would otherwise answer with a shrug. What does going from 50 mm to 100 mm receive optics actually buy? Is 10 dB of margin generous or marginal here? Would 5 km be crazy? All one slider away.

When it stops being enough

Do not use it to predict a specific afternoon. Once σ²R passes 1, or you want coupling into single-mode fibre (which depends on wavefront shape, not just intensity), or you want to design a tracking loop against a measured disturbance spectrum — you need split-step propagation through phase screens. This model has no wavefront at all, only the statistics of one. The next honest step is calibration: fit σ²I and the fade rate to real received-power logs and back out the Cn² and effective wind the atmosphere was actually handing you.