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,
pip install uwa-channels
Applying a channel to an arbitrary signal
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 to support large variables and HDF5 file format.
-nocompression to accelerate loading speed.
Required Fields
Each .mat file must include the following variables:
Description: The estimated time-varying channel impulse response (TVIR).
params
A structure with the following scalar fields:
Field
Type
Unit
Description
fs_delay
scalar
Hz
Sampling rate along the delay axis.
fs_time
scalar
Hz
Sampling rate along the time axis.
fc
scalar
Hz
Center frequency of the signal used during channel estimation.
version
Type: Numeric scalar.
Description: Dataset format version number (currently 1.0).
Phase / Delay Tracking Fields
Exactly one of theta_hat or phi_hat must be present.
theta_hat (phase tracking only)
Type: Numeric matrix, size [receiver, time]
Units: Radians
Sampling rate: params.fs_delay
Description: Time-varying phase correction. In this mode, h_hat contains the drifting impulse response (delay drift is embedded in the taps). Only the phase is tracked separately. The baseband received signal is modeled as:
where $d(n)$ is the data symbol, $h(t, \tau)$ is the time-varying impulse response with drifting taps, $T$ is the symbol duration, and $\theta(t)$ is the tracked phase.
phi_hat (delay tracking)
Type: Numeric matrix, size [receiver, time]
Units: Radians
Sampling rate: params.fs_delay
Description: Time-varying phase that encodes both phase rotation and delay drift. In this mode, h_hat is static (drift-free). The delay drift is recovered from phi_hat as:
Description: A time-invariant resampling factor applied to the output signal. This is typically the inverse of a resampling operation applied to remove the nominal Doppler frequency offset before channel estimation. It is applied after the time-varying convolution.
meta
The meta structure is optional but strongly encouraged. The following fields are recognized by the toolbox:
Field
Type
Description
description
string
Free-text description of the experiment.
nsd
scalar
Samples per symbol in the delay domain.
nst
scalar
Samples per symbol in the time domain.
K_1
scalar
Anti-causal filter length [symbols].
K_2
scalar
Causal filter length [symbols].
fc
scalar
Center frequency [Hz].
element_spacing
scalar
Array element spacing [m].
vertical
logical
true if vertical array.
delay_tracking
logical
true if delay tracking is enabled (phi_hat present).
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!