Skip to main content

CI codecov DOI PyPI Version

Underwater Acoustic Channel Toolbox — Python

Generic badge

Python toolbox for replaying signals through measured underwater acoustic channels, generating realistic ocean noise, and unpacking stored impulse responses. To learn more about the channels, check out the documentation.

Please report bugs and suggest enhancements by creating a new issue. We welcome your feedback. See CONTRIBUTING.md for more information.

Installation

pip install uwa-channels

Functions

Function Description
replay Pass a passband signal through a measured underwater acoustic channel.
noisegen Generate realistic ocean noise: pink Gaussian (17 dB/decade), spatially-correlated Gaussian, or impulsive (symmetric α-stable).
unpack Reconstruct the full time-varying impulse response from the compressed representation.
load_channel, load_noise Open a channel or noise MAT-file saved either with or without -v7.3.

Quick start

Download the channel MAT-files from Zenodo and place them in your working directory.

Replay and noise generation

from uwa_channels import replay, noisegen, load_channel, load_noise

channel = load_channel("blue_1.mat")
noise = load_noise("blue_noise.mat")

array_index = [0, 1, 2]
y = replay(input, fs, array_index, channel)
w = noisegen(y.shape, fs, array_index, noise)
r = y + 0.05 * w

See examples/example_replay.py for a complete example that generates a BPSK signal, replays it through the blue_1 channel, adds noise, and plots the received signal, cross-correlation, and spectrum.

Use load_channel / load_noise rather than h5py.File directly. The file-format specification asks for -v7.3 (HDF5), and h5py reads only that; MATLAB's save writes MAT v5 unless told otherwise. The loaders accept either flavour and return something replay, noisegen and unpack take unchanged — for a -v7.3 file they return the same open h5py.File as before.

Unpack

from uwa_channels import unpack, load_channel

channel = load_channel("blue_1.mat")
unpacked = unpack(fs_time, array_index, channel)

See examples/example_unpack.py for details.

Channel format

Each channel MAT-file contains:

Variable Description
h_hat Estimated impulse response, shape (K, M, T)
theta_hat or phi_hat Phase or delay-phase trajectory, shape (M, N)
params Group with fs_delay, fs_time, fc
meta Estimation metadata (see estimate repo)
version File format version

Each noise MAT-file contains:

Field Description
Fs Sampling rate at which noise statistics were measured [Hz]
R Signal bandwidth [Hz]
alpha Stability index (2 = Gaussian, < 2 = impulsive)
beta Mixing coefficients, shape (M, M, K)
fc Center frequency [Hz]
rms_power Per-channel RMS power scaling, shape (M, 1)
version Noise struct version

Tests

This repository includes automated testing via GitHub Actions. The tests folder contains five test suites:

Test What it verifies
test_replay Generates random mobile channels ({static, mobile} × {theta_hat, phi_hat}), transmits a signal, and checks that cross-correlation peaks match the true multipath structure; also checks that array_index isolates individual hydrophones and that the output power scaling is O(1).
test_noisegen Verifies output size, spectral shape (17 dB/decade), spatial correlation (theoretical vs. sample), bandpass filtering, rms_power scaling, Gaussianity (α = 2), and heavy-tail behavior (α < 2).
test_unpack Tests all tracking modes (none, theta_hat, phi_hat, f_resamp, and combinations) for correct impulse response reconstruction.
test_io Writes the same channel and noise as both -v7.3 and MAT v5, and checks that load_channel and load_noise hand replay and noisegen identical data either way.
test_zenodo Downloads a channel and its noise file from Zenodo and replays a probe through them, checking the arrival against h_hat and phi_hat and the generated noise against beta. See below.

Tests run automatically on every push, ensuring continued correctness of the core functions.

Testing against the released files

The first four suites build their channels in memory, so they cannot catch a disagreement between the package and the files you actually download. test_zenodo starts from the files: it fetches black.mat and black_noise.mat (162 MB, checked against the MD5 digests Zenodo publishes), replays a BPSK probe through the channel, and checks that

  • the arrival lands within two samples of fs_delay of where h_hat and the delay drift phi_hat / (2π f_c) say it should,
  • the measured power-delay profile matches the one stored in h_hat,
  • the generated noise has the spatial covariance beta prescribes, and
  • both load_channel and load_noise read the released data identically from a -v7.3 and a MAT v5 copy.

Because of the download it is opt-in:

PYTHONPATH=src pytest tests/test_zenodo.py --zenodo

Files land in ~/.cache/uwa-channels, or in $UWA_CHANNELS_CACHE if you set it; point that at a directory where you already keep the library and nothing is downloaded. Once the files are there the suite runs as part of a plain pytest. UWA_CHANNELS_ZENODO=1 is equivalent to --zenodo.

Repository Description
uwa-channels/matlab MATLAB/Octave implementation of the replay toolbox.
uwa-channels/estimate Channel estimation from single-carrier signals, with visualization.

License

The license is available in the LICENSE file within this repository.

© 2025–2026, Underwater Acoustic Channels Group.

Metadata

Release files for uwa-channels 0.7.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for uwa-channels 0.7.1
File Size Uploaded
uwa_channels-0.7.1.tar.gz 39.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for uwa-channels 0.7.1
File Interpreter ABI Platform
uwa_channels-0.7.1-py3-none-any.whl Python 3 none any Details

Total release size: 54.3 kB

Release files / uwa_channels-0.7.1.tar.gz

Download URL uwa_channels-0.7.1.tar.gz
Size 39.0 kB
Tags Source
SHA-256 checksum
How to use checksums
815e721ff22469e11fc838c9748bbd92e4e96832421894e7a39859173b153790
BLAKE2b-256 checksum
How to use checksums
be16838a382601794aea592a8fbbd4dfbbb8bdef2f46719f0aac342ba9fe7ed1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.

Transparency log

Release files / uwa_channels-0.7.1-py3-none-any.whl

Download URL uwa_channels-0.7.1-py3-none-any.whl
Size 15.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1799ef898ca452ad9f19af44979d10ac0b92252267c3174750a93c90e66b279d
BLAKE2b-256 checksum
How to use checksums
e6bce7b04e126375e06c1918535322ddd6f455b4ec5796ef669d6d34a56ea670
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.7.1 This release

2 release files

0.7

2 release files

0.6.7

2 release files

0.6.6

2 release files

0.6.5

2 release files

0.6.4

2 release files

0.6.3

2 release files

0.6.1

2 release files

0.5.7

2 release files

0.5.5

2 release files

0.5.3

2 release files

0.5.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page