What's new in OpenDPD V2.1¶
OpenDPD V2.1 introduces a comprehensive visualization and plotting system that lets you observe model training dynamics in real time and generate publication-quality figures.
Real-Time Training Visualization¶
- Per-epoch plot generation during both PA modeling (
train_pa) and DPD learning (train_dpd). Enable with the--plotflag and control frequency with--plot_every N. - Plot types include: PSD (Power Spectral Density), AM/AM, AM/PM, constellation diagrams, waveform overlays, and prediction error plots — generated for both validation and test sets at each epoch.
- Fixed-axis re-rendering: After training completes, all epoch plots are automatically re-rendered with globally consistent axis limits for fair visual comparison across epochs.
Animated GIF Generation¶
- Automatic GIF animations are created from per-epoch plots at the end of training, producing smooth animations that show how the model learns over time.
- Configurable duration via
--gif_duration(default: 10 seconds). For 100 epochs at 10 seconds, this yields 10 fps for smooth playback. - GIFs are generated for every plot type (PSD, AM/AM, AM/PM, constellation, waveform, error) and overview panels.

Interactive Training Dashboard¶
- An HTML dashboard (
dashboard.html) is generated after training, providing an interactive view of all epoch plots with a slider to scrub through epochs.
Training Curve Plots¶
- Loss, ACLR, EVM, and NMSE curves are plotted across all epochs at the end of training, saved under
training_curves/.
Comparison Plots (New plot Step)¶
- A new
--step plotcommand generates side-by-side comparison figures of PA output without DPD vs. with DPD, including PSD, AM/AM, AM/PM, constellation, waveform, and a metrics summary table. - Available via CLI (
python main.py --step plot) and the Python API (opendpd.plot_dpd()).
OFDM Constellation Demodulation¶
- A new
Demodulatormodule (datasets/demodulator.py) supports OFDM demodulation for constellation diagram generation, with per-dataset configurations for APA and DPA signal types.
Python API Enhancements¶
opendpd.train_pa()andopendpd.train_dpd()now acceptplot=Trueandplot_every=Nparameters.- New
opendpd.plot_dpd()function for generating comparison plots from Python.
Example Usage¶
# Train DPD with per-epoch plotting and 10-second GIF animations
python main.py --dataset_name DPA_200MHz --step train_dpd --plot --plot_every 1 --gif_duration 10.0 --accelerator cuda
# Generate comparison plots (without DPD vs. with DPD)
python main.py --dataset_name DPA_200MHz --step plot --accelerator cuda