ImpairmentsOptical
Fibre and transmitter impairments with an excess-noise form
19/19 passed in 799ms
| Test | What it does | Result |
|---|---|---|
test_carrier_beat | Two declared carriers move v_err through q.LocalLO.beat(laser), one carrier alone is refused naming the other end, and an offset past Nyquist is refused. | ✅ pass |
test_charged_both_paths | Every Gaussian-modulation impairment raises the budget and costs key on both paths, less sampled than closed (1.33e-2 against 1.89e-2 bit/symbol at 25 km, four channels), and 1, 2, 4, 8 channels give a rising total and a falling rate. | ✅ pass |
test_charged_off_pipeline | One measurement claims with and without impairment rows on the same recovered channel, xi_claimed sitting above est.xi when charged and equal to it when not. | ✅ pass |
test_coherence_form | coherence(lw, tau) equals exp(-pilwtau) and exp(-V/2) to 1e-15 (lw in Hz, tau in s), the mean cosine of 200000 phase draws to 5e-3, squares when tau doubles, and reads 0.9690724263048106 at 10 kHz over 1 us. | ✅ pass |
test_demux_cancels | raman_photons is linear in the demux (Kumar Eq. (6)'s eta_D), raman divides it back out to 1e-15, and q.Link refuses a demux other than 1.0. | ✅ pass |
test_dephasing_form | impairments.dephasing is budget.phase's estimator form, 6.2871e-3 SNU at 20 kHz over 10 ns (V_phi = 1.257e-3 rad^2) against the literature form's smaller 6.2812e-3, and q.Dephasing charges that row. | ✅ pass |
test_drift_still_runs | q.Polarisation and q.Modulator carrying only charged fields reach the budget as polarisation and imbalance. | ✅ pass |
test_dropped_rows | A PMD coefficient and a modulator extinction ratio are refused by name on a quadrature link and still reported by security() as dgd and extinction. | ✅ pass |
test_fading_costs_rate | On a noiseless T = 0.5, leaving the transmittance unattenuated over-claims the rate by 0.83%, 3.34% and 22.16% at j/w = 0.1, 0.2 and 0.5, and 0.07%, 0.42% and 1.68% at a polarisation drift of 0.02, 0.05 and 0.1 rad. | ✅ pass |
test_fading_identity | fading_factor is the transmittance half of polarisation() and timing() (1.0 undescribed, <sqrt(eta)>^2 per row, their product for both), and q.Link closes T_claimed*(V_A + xi) = TV_A<eta> to 1e-14, where the noise half alone reads 2.50003094 against 2.48759298 at j/w = 0.1. | ✅ pass |
test_fading_noise | Polarisation noise is zero when aligned and rises as V_As^4/2 (Usenko's fading identity), and sampling-jitter noise is zero at zero jitter, depends on j/w alone and rises as V_Au^2/8 with u = (j/w)^2. | ✅ pass |
test_imbalance_anchor | Published anchor, fitted V_A = 5.25 SNU: arXiv:2503.10168 Eq. (E1) at d = 1 reproduces their 0.02 SNU imbalance noise "within a deviation angle range of +/- 5 degrees", zero for a balanced modulator, rising with imbalance and bias, and under 1e-4 SNU at their measured d = 0.9937 and V_A = 5. | ✅ pass |
test_omitted_hardware | An undescribed row emits no entry, a perfect modulator emits 0.0, entries keep catalogue order, and V_A or T out of range or a Raman entry without a fibre length is refused. | ✅ pass |
test_raman_anchor | Published anchor: Kumar, Qin and Alleaume (arXiv:1412.1403) Eq. (6) at 0 dBm, 25 km, beta = 3e-9 /(km nm), 1531.12 nm and 0.5 dB add/drop reproduces their 1.3e-3 SNU forward and 1.6e-3 backward at Bob to 3%. | ✅ pass |
test_raman_growth | Raman xi grows monotonically with launch power and linearly with channel count. | ✅ pass |
test_raman_plane | The Raman entry reads xi_input = xi_Bob / T, and the demux cancels between Kumar Eqs. (6) and (7). | ✅ pass |
test_rayleigh_saturates | The Rayleigh return fraction rises with length to coeff/(alpha v_g), about -31 dB for SMF-28 at 1550 nm and less for ULL (arXiv:2407.08009), and q.Backscatter charges assemble_extra's row alone, input-referred noise unmoved by a receive coupling and raised by exactly the decibels of a launch coupling. | ✅ pass |
test_rin_charged | A declared RIN and detection bandwidth emit rin_sig and rin_lo rows matching explain's, xi_total rises with RIN, and -100 dBc/Hz leaves no key. | ✅ pass |
test_rin_half | A RIN without a detection bandwidth, or a bandwidth without a RIN, is refused naming the missing end. | ✅ pass |