PIKAN-DPD: joint nonlinear predistortion and bandwidth pre-equalization for ultra-high-speed coherent transmitters fusing device physical priors with a spline activation network
收藏资源简介:
# PIKAN-DPD **Joint nonlinear predistortion and bandwidth pre-equalization for ultra-high-speed coherent optical transmitters, fusing device physical priors with a spline-activation network.** [](https://www.python.org/) [](https://pytorch.org/) [](LICENSE) Reference implementation of the paper of the same title. PIKAN-DPD is a digital predistortion scheme for 200 Gbaud-class coherent optical transmitters that replaces end-to-end black-box networks with a differentiable device-physics twin plus a lightweight spline-activation residual, and jointly optimises bandwidth pre-emphasis and nonlinear predistortion under PAPR and quantization-SNR constraints. ## Highlights | Capability | Result | |---|---| | Peak Q factor at 120 Gbaud / 64QAM / 80 km SSMF | **8.85 dB** (vs. 8.48 dB LSTM, 8.19 dB Volterra ILA) | | Transmitter EVM at back-to-back optimum | **2.1 %** | | Complexity after 78 % pruning | **63 RMPB** with only -0.28 dB Q rollback | | Convergence after bias drift of 85 mV | **3.6 s** on 512 pilot symbols | | Pipeline wall-clock (CPU) | **~30 s** end to end | ## Repository This repository ships the complete end-to-end pipeline of the paper: - Differentiable digital twin of the transmitter chain, Eqs. (1)-(5). - Grouped Levenberg-Marquardt identification driven by the Jacobian condition number of Eq. (8), Algorithm S1. - Dual-branch predistorter with the analytical inverse of Eq. (9), the truncated Newton inverse of Eq. (10) and the B-spline residual of Eq. (11), bounded by the residual energy fraction of Eq. (13). - Joint optimisation of the pre-emphasis depth and the predistortion parameters under PAPR and quantization-SNR constraints, Eqs. (14)-(18), Algorithm S2. - Gradient-attribution pruning of Eq. (19) and the real multiplications per bit (RMPB) complexity measure of Eq. (20). - Few-shot online adaptation that updates only the drift-sensitive physical subset, Eqs. (21)-(22), Algorithm S3. ## Releases The code and data archives are published together on this repository: | Asset | Purpose | |---|---| | `PIKAN-DPD.zip` | Full source code (Python + PyTorch), trained receiver DSP weights, supplementary documentation | | `PIKAN-DPD-Data.zip` | Experimental data acquired on the hardware-in-the-loop coherent transmitter platform | Both archives can be downloaded from the Releases page of this repository. ## Quick start ```bash # 1. Clone the repository git clone https://github.com/<ORG>/PIKAN-DPD.git cd PIKAN-DPD # 2. Install dependencies (CPU PyTorch is sufficient) pip install -r requirements.txt # 3. Download the data archive from the Releases page and extract it # into data/ unzip PIKAN-DPD-Data.zip cp -r PIKAN-DPD-Data/* data/ # 4. Reproduce every result of Sections 4.2 to 4.7 python main.py ``` Figures land in `results/figures/` and tables in `results/tables/`. Each experiment can also be executed in isolation: ```bash python experiments/exp1_parameter_identification.py python experiments/exp2_baseline_comparison.py python experiments/exp3_joint_optimization.py python experiments/exp4_complexity_fixedpoint.py python experiments/exp5_online_adaptation.py python experiments/exp6_ablation.py ``` ## Directory layout ``` PIKAN-DPD/ ├── config.py Global constants ├── main.py Run all six experiments ├── requirements.txt ├── LICENSE ├── README.md │ ├── src/ │ ├── digital_twin.py Eqs 1-5 (Sec. 3.1) │ ├── identification.py Eqs 6-8, Alg. S1 │ ├── spline_kan.py Eq 11 (Sec. 3.2) │ ├── predistorter.py Eqs 9-13 (Sec. 3.2) │ ├── joint_optimization.py Eqs 14-18, Alg. S2 │ ├── pruning.py Eqs 19-20 (Sec. 3.4) │ ├── online_adaptation.py Eqs 21-22, Alg. S3 │ ├── baselines.py Volterra / LSTM / cascade │ ├── rx_dsp.py Trained receiver DSP head │ ├── metrics.py Q, EVM, PAPR, RMPB │ ├── data_loader.py Experimental data I/O │ └── plot_style.py Nature-style plotting │ ├── experiments/ │ ├── exp1_parameter_identification.py Sec. 4.2 → Table 3, Fig 7 │ ├── exp2_baseline_comparison.py Sec. 4.3 → Fig 8, Fig 9 │ ├── exp3_joint_optimization.py Sec. 4.4 → Table 4 │ ├── exp4_complexity_fixedpoint.py Sec. 4.5 → Fig 10, Table 5 │ ├── exp5_online_adaptation.py Sec. 4.6 → Fig 11, Table 6 │ └── exp6_ablation.py Sec. 4.7 → Table 7 │ ├── weights/ │ └── rx_dsp_coefficients.pt Trained receiver DSP head │ ├── docs/ Supplementary documentation │ ├── SI_01_Supplementary_Methods.md │ ├── SI_02_Supplementary_Results.md │ ├── SI_03_Uncertainty_Analysis.md │ ├── SI_04_Parameter_Dictionary.md │ ├── Test_Protocols/ TP01 to TP05 │ ├── Datasheets/ Six link-stage device excerpts │ ├── Setup_Documentation/ Block diagram, timing & sync │ └── Calibration_Reports/ Vpi, P1dB, ENOB records │ ├── data/ Place PIKAN-DPD-Data here └── results/ ├── figures/ Fig 7 to Fig 11 └── tables/ Table 3 to Table 7 ``` ## Experimental platform The data archive is acquired on a hardware-in-the-loop platform matched to the configuration in Table 2 of the paper: ``` ITLA → 256 GSa/s DAC → 80 GHz driver → 92 GHz TFLN DP-IQ modulator → 80 km SSMF │ 100 GHz coherent Rx ← EDFA │ 256 GSa/s real-time scope ``` | Stage | 3-dB BW | Key spec | |---|---|---| | ITLA laser | – | 25 kHz linewidth | | DAC | 55 GHz | ENOB 5.6 bit | | Driver amp. | 80 GHz | P1dB 13 dBm | | Modulator | 92 GHz | Vπ 2.7 V, DP-IQ TFLN | | Coherent Rx | 100 GHz | Integrated ICR | | Fiber | – | ITU-T G.652.D, 80 km span | Three symbol rates (100 / 120 / 140 Gbaud) are swept across two modulation formats (64QAM / 256QAM) with PRBS-driven training (2^16 symbols) and test (2^16 symbols) sets. ## Reproducing the paper Running `python main.py` writes: | Section | Figure / Table | File | |---|---|---| | 4.2 | Table 3 identified physical parameters | `results/tables/Table3_identified_parameters.csv` | | 4.2 | Fig 7a Jacobian condition numbers | `results/figures/Fig7_identification.png` | | 4.2 | Fig 7b estimation trajectories of V_π and a_3^I | `results/figures/Fig7_identification.png` | | 4.3 | Fig 8 Q factor against launch optical power | `results/figures/Fig8_Q_vs_launch_power.png` | | 4.3 | Fig 9 EVM joint density | `results/figures/Fig9_EVM_joint_density.png` | | 4.4 | Table 4 joint optimization against ENOB | `results/tables/Table4_joint_optimization_vs_ENOB.csv` | | 4.5 | Fig 10 Q factor against RMPB under the pruning sweep | `results/figures/Fig10_Q_vs_RMPB.png` | | 4.5 | Table 5 fixed-point rollback | `results/tables/Table5_fixed_point_rollback.csv` | | 4.6 | Fig 11 SNR_eff evolution under three perturbations | `results/figures/Fig11_SNReff_adaptation.png` | | 4.6 | Table 6 drift-trigger sensitivity | `results/tables/Table6_trigger_sensitivity.csv` | | 4.7 | Table 7 ablation | `results/tables/Table7_ablation.csv` | ## Requirements - Python 3.10 or higher - PyTorch 2.0 or higher (CPU build is sufficient) - NumPy, Pandas, SciPy, Matplotlib, openpyxl See `requirements.txt` for the pinned versions. ## Documentation Supplementary methods, uncertainty budget, test protocols, device datasheets, setup drawings and calibration records are shipped under `docs/`. Every parameter in the code uses the symbol defined in `docs/SI_04_Parameter_Dictionary.md`, and every characterization experiment follows one of the protocols in `docs/Test_Protocols/`. ## Citation If this work supports your research, please cite the companion paper. A BibTeX entry will be added once the DOI is minted. ## License Released under the MIT License, see [LICENSE](LICENSE) for the full terms.



