Skip to main content

Module fbmc

Module fbmc 

Source
Expand description

Filter-bank multicarrier with offset QAM (FBMC/OQAM, staggered multitone).

§Model

$M$ subcarriers spaced by $1/T$ ($T = M$ samples) carry real symbols $a_{m,n}$ every $T/2$, each on a time and frequency shift of a real, symmetric prototype filter $h$ of $L = KM - 1$ taps ($K$ the overlapping factor; Bouhadda et al. 2014, eqs. (3)–(4); Nissel & Rupp 2017, eq. (2)):

$$ s[k] = \sum_{n} \sum_{m=0}^{M-1} a_{m,n}, g_{m,n}[k], \qquad g_{m,n}[k] = h[k - nM/2], e^{j 2\pi m (k - nM/2 - D/2)/M}, e^{j \frac{\pi}{2}(m + n)}, $$

with $D = L - 1$, so that the exponential is centred on the filter. The pulses are orthogonal in the real sense only, $\Re\langle g_{m,n}, g_{m’,n’} \rangle = \delta_{mm’}\delta_{nn’}$ (nearly, for PHYDYAS: below $5 \cdot 10^{-4}$ per neighbour for $K = 4$, $5 \cdot 10^{-3}$ for $K = 3$, $0.05$ for $K = 2$): the receiver projects on $g_{m,n}$ and keeps the real part, the imaginary part being the intrinsic interference of the neighbours (Fbmc::interference). A complex QAM symbol is split into two real ones on consecutive half-symbols (oqam_stagger), the real part first on the even subcarriers and the imaginary part first on the odd ones, so that FBMC/OQAM carries as many complex symbols as OFDM without a cyclic prefix ($TF = 1$).

The pulses have unit energy: with QAM symbols of unit energy (real symbols of variance 1/2) on all subcarriers the signal has unit power, and complex noise of variance $\sigma^{2}$ per sample leaves a variance $\sigma^{2}/2$ on every real estimate, the SNR of OFDM per dimension (Nissel & Rupp 2017, eq. (18)).

The modulator and the demodulator are polyphase: one FFT of size $M$ per half-symbol and $L$ products.

As Modulate and Demodulate blocks, Fbmc takes complex QAM symbols and returns them: the OQAM staggering (oqam_stagger) and its inverse on the real parts of the projections (oqam_destagger) are inside the traits, at Fbmc::sample_rate.

Prototype::Phydyas is the filter of the PHYDYAS project (Bellanger 2010), sampled from its frequency response $H_{0} = 1$, $H_{1}, \dots, H_{K-1}$: $h[k] = H_{0} + 2\sum_{i=1}^{K-1} (-1)^{i} H_{i} \cos\left(\frac{2\pi i (k+1)}{KM}\right)$, $k = 0, \dots, KM - 2$, normalised to unit energy; for $K = 4$, $H_{1} = 0.97195983$, $H_{2} = 1/\sqrt{2}$, $H_{3} = 0.23514695$ (the transmultiplexer response of Table 1 of Bouhadda et al. 2014 to three decimals, checked by Fbmc::interference).

§Examples

use comnum_waveform::fbmc::{Fbmc, oqam_stagger, oqam_destagger};
use comnum_math::C64;
let f = Fbmc::new(16, 4)?;
// 6 complex symbols per subcarrier: 12 real half-symbols
let c: Vec<C64> = (0..16 * 6).map(|i| C64::new(if i % 3 == 0 { 1.0 } else { -1.0 }, if i % 5 == 0 { -1.0 } else { 1.0 })).collect();
let a = oqam_stagger(&c, 16)?;
let s = f.modulate(&a)?;
assert_eq!(s.len(), f.n_samples(12));
let y = f.demodulate(&s)?;
let back = oqam_destagger(&y.iter().map(|v| v.re).collect::<Vec<f64>>(), 16)?;
// PHYDYAS is nearly perfect reconstruction: a residual of a few 1e-3
assert!(back.iter().zip(&c).all(|(a, b)| (a - b).norm() < 1e-2));

§References

  1. B. Farhang-Boroujeny, “OFDM versus filter bank multicarrier,” IEEE Signal Process. Mag., 28(3), 92–112, 2011.
  2. M. Bellanger, “FBMC physical layer: a primer,” PHYDYAS project (FP7-ICT 211887), 2010.
  3. H. Bouhadda, H. Shaiek, D. Roviras, R. Zayani, Y. Medjahdi and R. Bouallegue, “Theoretical analysis of BER performance of nonlinearly amplified FBMC/OQAM and OFDM signals,” EURASIP J. Adv. Signal Process., 2014:60.
  4. R. Nissel and M. Rupp, “OFDM and FBMC-OQAM in doubly-selective channels: calculating the bit error probability,” IEEE Commun. Lett., 21(6), 1297–1300, 2017.

Structs§

Fbmc
An FBMC/OQAM modem (see the module).

Enums§

Prototype
The prototype filter of an Fbmc.

Functions§

oqam_destagger
The inverse of oqam_stagger: complex symbols from the real estimates a[n * M + m] of an even number of half-symbols.
oqam_stagger
Split complex symbols c[k * M + m] ($k$ the complex symbol, $m$ the subcarrier) into real symbols on twice as many half-symbols, a[n * M + m]: the real part on the even half-symbol and the imaginary part on the odd one for the even subcarriers, the reverse for the odd subcarriers.