You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Every coherent example was back to back, so the impairment that dominates
any real span had never been in the loop. Measured: 5 km of ordinary fiber
costs 20 dB of SNR, and at 80 km 3698 of 3968 symbols are wrong — 93%,
against the 93.75% that blind guessing gives on 16-QAM. Not degraded, gone.
DispersionCompensator is one static all-pass filter on the received
baseband. It calls the fiber's own propagator with a negated distance
rather than writing the inverse transfer function out, because two copies
of a beta2 sign only stay equal until someone edits one of them. Spans
from 5 km to 1000 km return to back-to-back EVM with no penalty that grows
with distance, which is the whole argument for coherent detection: an
all-pass phase removes nothing, so a receiver that measures the field
still holds all of it.
Parametrised by accumulated D*L in ps/nm, not by D and length. A receiver
cannot know how the span was built and two links with the same total
behave identically; asking for both would invent a distinction that does
not exist on that side of the fiber.
Kept separate from the butterfly equaliser, and that ordering is measured
rather than quoted: on the dual-pol link over 80 km, growing the butterfly
from 7 taps to 65 leaves EVM at 2941% against 3030%, while the static
block ahead of a 7-tap filter restores 2.67%. A blind modulus criterion
has no gradient to follow once the constellation is a Gaussian blob.
Seven sabotages, seven caught: compensation sign, hardcoded wavelength,
ps/nm conversion off by 1000x, parameter ignored, compensation skipped,
I/Q swapped, symbol rate dropped from dispersive_spread.
README: the front page claimed equalisers and coherent detection were not
implemented, months after both landed. Corrected, along with the roadmap
and four new validation rows.
Mockup: regenerated from the new export, so the demonstrated link now runs
over the span too. Two defects found by rebuilding against real output —
the sensitivity sweep's 256-QAM curve never crossed the FEC threshold and
so was the one curve with no label, and the sweep overrode only one of the
two mappers. 17 blocks, 22 links, 33 components, contrast clean in both
grounds across all four dock tabs.
517 tests.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|**2 — Coherent transceiver** ✅ | Gray-coded M-QAM to 256, IQ modulator with bias and quadrature error, 90° hybrid, balanced detection, blind carrier phase recovery, dual polarization with a blind butterfly equaliser, root-raised-cosine shaping and matched filtering, differential quadrant encoding, receiver-side dispersion compensation over spans to 1000 km, EVM/MER, constellation diagram, validated against closed-form SER |~3 months |
418
+
|**3 — GUI & WDM**| Session server, React Flow graph editor, wavelength-selective filters and an OSA · DWDM + XPM/FWM crosstalk, 400G/800G references, CuPy back-end |~6 months |
364
419
|**4 — PIC**| Waveguides, ring resonators, MMI, MZI via integration with an existing S-matrix solver; PDK import | — |
365
420
366
421
¹ One developer, part-time. Estimates, not commitments.
@@ -383,6 +438,10 @@ Every physics block ships with a test against a closed-form result, run in CI
383
438
| Gaussian pulse, CD only |`T₁/T₀ = √(1 + (z/L_D)²)`, `L_D = T₀²/\|β₂\|`| ✅ |
384
439
| Chirped Gaussian |`T₁/T₀ = √((1 + Cβ₂z/T₀²)² + (β₂z/T₀²)²)` — pins the sign of β₂ | ✅ |
385
440
| Dispersion compensation |`+D` then `−D` restores the input sample-for-sample | ✅ |
441
+
| Receiver-side CD removal | Compensator is the propagator inverted; round trip exact to 1e-9 | ✅ |
442
+
| CD compensation is all-pass | Energy conserved; a wrong sign lands exactly on twice the span | ✅ |
0 commit comments