Skip to main content

A module for general radar signal processing library

Project description

rad-lab

CI Docs

A Python radar module for simulating pulse-Doppler returns, generating range-Doppler maps (RDMs), and forming synthetic aperture radar (SAR) images. Designed for radar engineers and students who want to build intuition for how RDMs and SAR images are formed, how waveforms affect resolution, and how DRFM electronic attack techniques appear in the RDMs.

Installation

Install from PyPI (library only)

pip install rad-lab

Clone for the full example apps

git clone https://github.com/JohnNehls/rad-lab
pip install -e ./rad-lab

A few exercises use LaTeX for plot labels — LaTeX must be installed for those to run.

Usage

RDM Generation

from rad_lab import rdm, Radar, Target, Return, barker_coded_waveform

radar = Radar(
    fcar=10e9,
    tx_power=1e3,
    tx_gain=10 ** (30 / 10),
    rx_gain=10 ** (30 / 10),
    op_temp=290,
    sample_rate=20e6,
    noise_factor=10 ** (8 / 10),
    total_losses=10 ** (8 / 10),
    prf=200e3,
    dwell_time=2e-3,
)

waveform = barker_coded_waveform(10e6, nchips=13)

return_list = [Return(target=Target(range=0.5e3, range_rate=1.0e3, rcs=1))]

rdm.gen(radar, waveform, return_list)

Other available waveforms: uncoded_waveform, random_coded_waveform, lfm_waveform. For additional RDM examples see apps/rdms, or the API docs.

SAR Image Generation

rad-lab also supports stripmap and spotlight SAR image formation from point-target scenes:

For more SAR examples see apps/sar.

Exercises

Many radar subsystems are demonstrated as standalone scripts in apps/exercises. Each file builds intuition for one concept and can be run directly. Topics covered include:

  • Range equation
  • Pulse-Doppler processing
  • Waveforms and cross-correlation
  • Ambiguity function
  • Datacube processing and windowing
  • Keystone formatting
  • Detection theory
  • Linear arrays and monopulse
  • Stripmap and spotlight SAR

Modeling assumptions

The RDM and SAR simulators in rad_lab use a few standard simplifications. They are noted here so it is clear which physical effects the simulator deliberately omits.

  • Stop-and-hop (start-stop) propagation. Within a single pulse the radar and target are treated as stationary; motion happens only between pulses. Round-trip delay and carrier phase are evaluated once per pulse, at the pulse-transmit instant, and the matched-filter template is a perfect replica of the transmitted pulse. This is the standard pulse-Doppler / SAR signal model (e.g. Richards, Fundamentals of Radar Signal Processing, §8). Consequences: no intra-pulse range walk and no Doppler time-scaling of the echo — all target motion appears as the pulse-to-pulse phase progression -4π f_c R(t_m)/c.
  • Point scatterers. Targets are ideal points with a scalar RCS; no glint, no extended-target spread.
  • No propagation medium effects. No atmospheric attenuation, no ionospheric dispersion, no multipath.
  • Ideal receiver chain. Linear, time-invariant, with thermal noise modeled from the receiver noise figure and operating temperature.

Contributing

Contributions are welcome. Please fork the repository and submit a pull request.

To run the test suite:

python -m pytest tests/ -v  # unit tests (fast; apps regression is deselected)
python -m pytest -m apps    # apps regression: run every apps/ script headless,
                            # comparing stdout against tests/app_baselines/ and
                            # each figure against tests/app_baselines/figures/

After an intentional change to a script's output or plots, refresh both the stdout and image baselines with:

RADLAB_UPDATE_APP_BASELINES=1 python -m pytest -m apps

New app scripts are picked up automatically. Seed any randomness (np.random.seed(0)) so the stdout and figure baselines are stable, or name the file *_no_test.py to have the regression skip it. Figure comparison is RMS-pixel based, so a matplotlib upgrade may require a baseline refresh.

License

This project is licensed under the GPL-3.0 License - see LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rad_lab-0.0.5.tar.gz (5.7 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rad_lab-0.0.5-py3-none-any.whl (68.8 kB view details)

Uploaded Python 3

File details

Details for the file rad_lab-0.0.5.tar.gz.

File metadata

  • Download URL: rad_lab-0.0.5.tar.gz
  • Upload date:
  • Size: 5.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for rad_lab-0.0.5.tar.gz
Algorithm Hash digest
SHA256 41070410d8d915499b59b1a2bae694fc57f91978fee3243625e139d4cc640269
MD5 2b40fc0e77b8cc0a8a8092dea795b7b4
BLAKE2b-256 336dabdc93256686be32fa178ad5d8ac3a20d98c4fe3ba4c8dcb6bf89a033b29

See more details on using hashes here.

Provenance

The following attestation bundles were made for rad_lab-0.0.5.tar.gz:

Publisher: publish.yml on JohnNehls/rad-lab

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rad_lab-0.0.5-py3-none-any.whl.

File metadata

  • Download URL: rad_lab-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 68.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for rad_lab-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 e319ecc914e9cc7c79f5d119e6200ffd4bc37cfaf4a98e8b503de236248166af
MD5 31b9c9665780fe7473a6a114386e2031
BLAKE2b-256 77227b5f6b20cb3ff074f7ce25354c42e1d1ee3cceddcb96c9d0a33c26f0eab3

See more details on using hashes here.

Provenance

The following attestation bundles were made for rad_lab-0.0.5-py3-none-any.whl:

Publisher: publish.yml on JohnNehls/rad-lab

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page