Skip to main content

Module otfs

Module otfs 

Source
Expand description

Orthogonal time frequency space (OTFS) modulation with rectangular pulses and one cyclic prefix per frame.

§Model

An $M \times N$ grid $X$ of symbols in the delay–Doppler plane ($M$ delay bins, the subcarriers; $N$ Doppler bins, the symbols of the frame) is spread by the inverse symplectic finite Fourier transform (ISFFT) to the time–frequency plane and sent by the Heisenberg transform, an OFDM modulator with rectangular pulses. Both together reduce to an IDFT along the Doppler axis (Raviteja et al. 2019, eqs. (1)–(2)):

$$ \mathbf{s} = \operatorname{vec}(X F_{N}^{H}) = (F_{N}^{H} \otimes I_{M}), \mathbf{x}, \qquad \mathbf{x} = \operatorname{vec}(X), $$

the samples $s[nM + m]$ of the $N$ symbols one after the other, preceded by a single cyclic prefix for the whole frame. The receiver drops the prefix and applies $(F_{N} \otimes I_{M})$ (Wigner transform and SFFT, eq. (11)).

A channel of $P$ paths of gains $h_{i}$, integer delays $l_{i} < M$ and Doppler shifts $k_{i}$ (in bins of $1/(NT)$), $r[n] = \sum_{i} h_{i} e^{j 2\pi k_{i}(n - l_{i})/(MN)} s[[n - l_{i}]{MN}]$ after the prefix (eq. (6)), becomes in the delay–Doppler plane $\mathbf{y} = H{\mathrm{eff}} \mathbf{x} + \mathbf{w}$ with the sparse matrix of Theorem 1, Otfs::effective_channel (EffectiveChannel: $P$ entries per row, applied in $O(MNP)$ operations, EffectiveChannel::to_dense for the detectors that take a matrix), the 2D circular convolution $Y[m, n] = \sum_{i} h_{i} X[[m - l_{i}]{M}, [n - k{i}]{N}]$ of ideal pulses (eq. (30)) up to the phases $\alpha{i}(m, n)$ of Remark 1. Fractional Doppler shifts spread over all the Doppler bins (Otfs::transform_channel takes any time-domain channel matrix). The channel itself is drawn in comnum-channel (multipath::DelayDoppler), its paths are comnum_core::channel::Path; the detectors are those of comnum-mimo on $H_{\mathrm{eff}}$.

§Examples

use comnum_waveform::otfs::Otfs;
use comnum_math::C64;
let o = Otfs { n_cp: 2, ..Otfs::new(8, 4)? };
let x: Vec<C64> = (0..32).map(|i| C64::new((i % 3) as f64 - 1.0, (i % 2) as f64)).collect();
let s = o.modulate(&x)?;
assert_eq!(s.len(), 32 + 2);
assert!(o.demodulate(&s)?.iter().zip(&x).all(|(a, b)| (a - b).norm() < 1e-12));

§References

  1. R. Hadani, S. Rakib, M. Tsatsanis, A. Monk, A. J. Goldsmith, A. F. Molisch and R. Calderbank, “Orthogonal time frequency space modulation,” Proc. IEEE WCNC, 2017 (arXiv:1808.00519).
  2. P. Raviteja, Y. Hong, E. Viterbo and E. Biglieri, “Practical pulse-shaping waveforms for reduced-cyclic-prefix OTFS,” IEEE Trans. Veh. Technol., 68(1), 957–961, 2019.
  3. Z. Wei, W. Yuan, S. Li, J. Yuan, G. Bharatula, R. Hadani and L. Hanzo, “Orthogonal time-frequency space modulation: a promising next-generation waveform,” IEEE Wireless Commun., 28(4), 136–144, 2021.

Structs§

EffectiveChannel
The effective delay–Doppler channel of Otfs::effective_channel: an $MN \times MN$ matrix of $P$ entries per row, one per path (the entries of paths that land on the same column add up).
Otfs
An OTFS modem: n_fft delay bins $M$ (the subcarriers), n_symbols Doppler bins $N$ (the symbols of a frame) and one prefix of n_cp samples per frame (see the module).