# Optics, samples and exposure

Run `python generate.py` with numpy and matplotlib to regenerate three CSVs, study.json, validation.json and two original publication figures in PNG/SVG/PDF. Inputs are hypothetical; no image or measured hardware performance is represented.

The camera table has 27 combinations: aperture diameters 10/25/50 mm, ranges 1/10/100 m and focal lengths 25/50/100 mm, with 550 nm light, 5 micrometre pixel pitch and 1920 horizontal pixels. Rayleigh angular separation is 1.22*lambda/D for an ideal unobstructed circular diffraction-limited aperture and incoherent point sources. Multiplication by range is a small-angle object-plane scale. Projected pixel pitch is range*p/f. Horizontal field of view is 2*atan(N*p/(2*f)). These describe different things; a pixel pitch, a two-point criterion and readable image detail are not interchangeable.

The projection is ideal rectilinear pinhole geometry, not a finite-conjugate lens equation or a complete camera model. It omits aberration, defocus, contrast transfer, pixel integration and atmosphere. The first figure's aperture curve is analytical at range 10 m and focal length 50 mm. Continuous figure curves use the same formulas between tabulated camera settings.

The exposure table contains 1001 times from 0 to 1 second in 0.001 second steps. Rates in one fixed measurement element are assigned as 1000 signal and 200 background photoelectrons per second, with 3 electrons RMS read noise per read. Independent Poisson shot variances and read-noise variance add: SNR=S/sqrt(S+B+9). Background mean is assumed known; subtracting that mean does not remove its shot noise. No extra background-estimation uncertainty, saturation, dark current or quantization is included. Consequently the model is not a detector specification.

Motion blur is a separate idealized object-plane displacement v*t with constant transverse speed 0.1 m/s at fixed range, not a full image convolution. Longer exposure can raise this simple SNR while increasing displacement. The double-axis plot distinguishes the two units and colors. A moving feature need not retain the assumed fixed-element signal rate; the curves are separate pedagogical budgets and not a jointly validated moving-target SNR model.

The alias table has 21 point samples at 20 samples/s: cosines at 3 Hz and 17 Hz agree at every sampling instant because 17=20−3. The original figure draws both analytical continuous waves with their identical samples. It contains no photographs. Finite pixel integration, exposure averaging and antialias filtering are not simulated; these can alter amplitudes and ambiguity. No resolution is recovered by merely enlarging samples.

Checks confirm energy-independent geometry identities, FOV width equals 1920 projected pixel pitches, Rayleigh inverse-aperture scaling, SNR variance accounting, zero-time output, monotone SNR under assigned conditions, and exact cosine alias identity within 5.46e-15 floating-point error. validation.json records results. This does not establish medical, surveillance, identification, storage-medium or untested shutter performance.
