The channels stored in this library can be used in two ways: (1) a channel can be applied directly to a user-generated signal, or (2) it can be decompressed for visualizing. Ready-to-use code for performing these functions is available under GitHub. You can also download the MATLAB package here. To install the Python package,
To pass a signal of your choice through a channel, generate the desired signal in passband, respecting the bandwidth and the sampling rate limits of the chosen channel (see the channel tab).
Run replay on the signal.
Specify the noise power, and add the output of noisegen to the output of replay at a desired signal-to-noise ratio.
A simple example of this process is given in MATLAB and Python. Before running the example code, please read the corresponding README file.
Important note
The channels are specified for a certain acoustic bandwidth that was used during the experiment. When working with a channel, please understand that only that bandwidth is visible. If you are designing a signal that you will pass through a channel, the bandwidth of your signal must fit within the stated limit. Note that you do not need to decompress the channel first to replay the signal.
Visualizing a channel
To visualize a channel as a collection of impulse responses evolving over time, you will need to decompress the channel impulse responses via unpack.m. This will produce a new channel matrix that is decompressed (it is larger than the stored original) and contains all the physical effects of delay drifting. The new matrix can be generated at arbitrary sampling rates in time, provided it is no greater than the sampling rate in delay.
A simple example of this process is given in MATLAB and Python. Before running the example code, please read the corresponding README file.
1 - Channel file format specifications
UWA-Channels MAT File Format Specification
The uwa-channels-compatible .mat files must be saved with the following flags:
-v7.3: Supports large variables and the HDF5 file format, ensuring better compatibility with other programming languages such as Python and Julia.
-nocompression: Accelerates loading speed.
Required Fields
Each .mat file must include the following variables:
h_hat
Type: Multi-dimensional numeric tensor (single or double precision). Arbitrarily scaled.
Dimensions: [delay, receiver, time]
Description: The estimated time-varying channel impulse response (TVIR), complex baseband.
params
A MATLAB structure containing the following scalar fields:
fs_delay (Hz): Sampling rate of h_hat along the delay axis.
fs_time (Hz): Sampling rate of h_hat along the time axis.
fc (Hz): The probing waveform was basebanded with respect to fc prior to the TVIR estimation; fc typically corresponds to the center frequency of the probing waveform.
version
Type: Numeric scalar
Description: Dataset format version number.
Optional Fields
theta_hat
Type: Numeric matrix of size [receiver, time] (single or double precision).
Sampling Rate: Must match params.fs_delay
Duration Constraint: The time duration of theta_hat must match the third dimension of h_hat, i.e., size(theta_hat, 2) * params.fs_time == size(h_hat, 3) * params.fs_delay.
Description: For each hydrophone (receiver), theta_hat represents a time-varying resampling factor $R(t)$ to be applied to the output signal in conjunction with $h(t,\tau)$:
$$ R(t) = 1 - \frac{1}{2 \pi f_c} \frac{\text{d} \hat{\theta}(t)}{\text{d} t} $$
where $f_c$ is the center frequency, and the $\hat{\theta}(t)$ is the theta_hat.
f_resamp
Type: Scalar (single or double precision)
Units: Unitless resampling factor
Description: A time-invariant resampling factor applied to the output signal after convolution. This is typically the inverse of a resampling operation used to remove nominal Doppler offsets during channel estimation. It is applied after the time-varying convolution.
meta
The meta structure is optional but encouraged for documenting dataset context. The suggested fields include:
meta.experiment_name (string): Name of the experiment.
meta.experiment_info (string or struct): Descriptive details about the experimental setup.
meta.array_info (string or struct): Information about the hydrophone array (e.g., geometry, number of elements).
meta.authorship (string or struct): Data contributor names and affiliations.
Users are free to add any number of additional fields to meta to record experiment-specific metadata.
Dataset Configurations
The following configurations are currently supported:
h_hat only — supported but not used in official datasets.
h_hat and theta_hat — used in the blue, red, green, purple, yellow, abyssal, and namikaze datasets.
h_hat and f_resamp — used in Watermark datasets.
h_hat, theta_hat, and f_resamp — used in the Sky dataset.
2 - Code Contribution Guide
Contributing to UWA-Channels (MATLAB & Python)
First off — thank you for considering a contribution! Bug reports, feature requests, documentation improvements, and code changes are all welcome.
This guide explains how to contribute effectively to the two companion repositories hosted at https://github.com/uwa-channels:
Merged PRs are reflected in CHANGELOG.md, with entries auto-generated from commit messages.
Acknowledgments
This guide was inspired by the excellent UnderwaterAcoustics.jl contributing guide, as well as the contribution guidelines from NumPy, SciPy, and MATLAB Style Guide.
Happy hacking – may your channels be peaceful and your SNR high!