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
- 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).
- 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.
- 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§
- Effective
Channel - 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_fftdelay bins $M$ (the subcarriers),n_symbolsDoppler bins $N$ (the symbols of a frame) and one prefix ofn_cpsamples per frame (see the module).