Replay, noise generation, and unpacking for measured underwater acoustic channels.
Project description
Underwater Acoustic Channel Toolbox — Python
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. |
Quick start
Download the channel MAT-files from here and place them in your working directory.
Replay and noise generation
import h5py
from uwa_channels import replay, noisegen
channel = h5py.File("blue_1.mat", "r")
noise = h5py.File("blue_1_noise.mat", "r")
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.
Unpack
import h5py
from uwa_channels import unpack
channel = h5py.File("blue_1.mat", "r")
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 three 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. |
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. |
Tests run automatically on every push, ensuring continued correctness of the core functions.
Related repositories
| 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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file uwa_channels-0.5.3.tar.gz.
File metadata
- Download URL: uwa_channels-0.5.3.tar.gz
- Upload date:
- Size: 20.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d82b0d8e8a8e3fe21af9bddf4221cc83a31ecb580bea2eac7ba5c08711137e2d
|
|
| MD5 |
4cac54d537e75c0f58685d924d0e25ba
|
|
| BLAKE2b-256 |
20211a1afc923bd0eafb892d072a685a03f984a37c9b47012ccbbfeb44c9a55b
|
Provenance
The following attestation bundles were made for uwa_channels-0.5.3.tar.gz:
Publisher:
ci.yaml on uwa-channels/python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
uwa_channels-0.5.3.tar.gz -
Subject digest:
d82b0d8e8a8e3fe21af9bddf4221cc83a31ecb580bea2eac7ba5c08711137e2d - Sigstore transparency entry: 1072302807
- Sigstore integration time:
-
Permalink:
uwa-channels/python@99c2ada6bca2b4912373b4532b85c70613c40533 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/uwa-channels
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yaml@99c2ada6bca2b4912373b4532b85c70613c40533 -
Trigger Event:
push
-
Statement type:
File details
Details for the file uwa_channels-0.5.3-py3-none-any.whl.
File metadata
- Download URL: uwa_channels-0.5.3-py3-none-any.whl
- Upload date:
- Size: 10.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0aca8e6b19ac1436df91bc43e4137570ce9e4991fc5ec6380dcd420b10f35fe3
|
|
| MD5 |
152690ba7b30aad95cdf47e6ad8945aa
|
|
| BLAKE2b-256 |
704eb129e2709e0bcca21b1870d824d30281ac0f750357bb84dfa1b34df071f0
|
Provenance
The following attestation bundles were made for uwa_channels-0.5.3-py3-none-any.whl:
Publisher:
ci.yaml on uwa-channels/python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
uwa_channels-0.5.3-py3-none-any.whl -
Subject digest:
0aca8e6b19ac1436df91bc43e4137570ce9e4991fc5ec6380dcd420b10f35fe3 - Sigstore transparency entry: 1072302832
- Sigstore integration time:
-
Permalink:
uwa-channels/python@99c2ada6bca2b4912373b4532b85c70613c40533 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/uwa-channels
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yaml@99c2ada6bca2b4912373b4532b85c70613c40533 -
Trigger Event:
push
-
Statement type: