Synchronization¶
Synchronization in Hermes refers to the process of partitioning streams of received base-band samples into communication frames. Synchronization can be interpreted as an optimization problem
estimating the primary delay component \(\tau\) of the channel model \(\mathbf{H}(t, \tau)\) within specific interval between \(T_\mathrm{min}\) and \(T_\mathrm{max}\). The estimated delay is equivalent to a perceived timing offset between the transmitter’s and receiver’s respective clocks. Most statistical channel models for link-level simulations ignore the minimum free-space propagation delays of waveforms traveling from one device to another and instead model only the delay spread of multipath components. As a result, the first signal sample after channel propagation contains the first sample of the propagated signal’s line of sight component, or, in non line of sight cases, the first sample of the shortest path propagation. Therefore, link-level simulations tend to ignore synchronization and only focus on processing the multipath components. When considering spatial channel models with realistic propagation delays or, more importantly, transmitting waveforms over real hardware, estimating the introduced propagation delays becomes vital for error-free information transmission.
- class Synchronization(waveform=None)[source]¶
Bases:
Generic
[CWT
],ABC
,Serializable
Abstract base class for synchronization routines of waveform generators.
Refer to Nasir et al.[1] for an overview of the current state of the art.
- Parameters:
waveform (CommunicationWaveform, optional) – The waveform generator this synchronization routine is attached to.
- synchronize(signal)[source]¶
Simulates time-synchronization at the receiver-side.
Sorts base-band signal-sections into frames in time-domain.
- Parameters:
signal (np.ndarray) – Vector of complex base-band samples of with num_streams`x`num_samples entries.
- Return type:
- Returns:
List of time indices indicating the first samples of frames detected in signal.
- Raises:
RuntimeError – If the synchronization routine is floating