Skip to main content
Ctrl+K

comnum

  • Getting started
  • Tutorials
  • User guide
  • Gallery of classical results
  • Why the results can be trusted
  • Maturity
    • Comparisons with other libraries
    • Why comnum
    • Benchmarks against other libraries
    • Classical performance
    • API reference
  • GitHub
  • Getting started
  • Tutorials
  • User guide
  • Gallery of classical results
  • Why the results can be trusted
  • Maturity
  • Comparisons with other libraries
  • Why comnum
  • Benchmarks against other libraries
  • Classical performance
  • API reference
  • GitHub

Section Navigation

  • Monte Carlo campaigns in Python
  • Chains of blocks
  • Analysing a campaign
  • Wireless and coded links
  • Waveforms beyond OFDM
  • Optical links: WDM and nonlinearity
  • Fibre propagation: how the split step is validated
  • Optical wireless links
  • Standards
  • 5G NR PDSCH: the conformance tests and the industry
  • Declarative campaigns
  • Recordings
  • User guide
  • Optical wireless links

Optical wireless links#

Light also carries data through the air: LED lights that communicate while they illuminate a room (visible-light communication) or infrared emitters indoors, and laser links between buildings (free-space optics). Both use intensity modulation and direct detection: the transmitted quantity is an optical power, and the channel is a real, non-negative impulse response for indoor links and a random gain of the intensity for outdoor links. The gallery page Optical wireless: an LED-lit room and a turbulent free-space link reproduces the figures of the three papers cited below.

Indoor channel#

An OwcRoom is an empty rectangular room whose walls, ceiling and floor are ideal diffuse reflectors. illuminate() carries the light of Lambertian emitters (positions, axes, mode lambertian_mode() of their semi-angle, power) to the elements of the surfaces, once, with as many orders of reflection as partitions given (Barry et al. 1993). An OwcIllumination then gives the impulse response at any detector, by order of reflection:

import comnum, numpy as np

room = comnum.OwcRoom([5.0, 5.0, 3.0], {"north": 0.7, "south": 0.7, "east": 0.7, "west": 0.7})
down, up = [0, 0, -1], [0, 0, 1]
lit = room.illuminate([2.5, 2.5, 2.5], down, comnum.lambertian_mode(np.radians(70)), 1.0,
                      bin_s=0.01e-9, partitions=[[50, 50, 30]])
h = lit.impulse_responses([1.0, 1.0, 0.85], up, 1e-4, np.radians(60),
                          concentrator_index=1.5)
both = h[0] + h[1]                 # line of sight and one reflection
both.total_w(), both.bandwidth_3db_hz()
signal, isi = both.bit_split(10e-9, h[0].first_arrival_s())

bit_split() splits the power of on–off keying into the part received within the bit and the part spilled onto the next ones; PinFetReceiver turns them into an SNR with the shot and thermal noise of a PIN photodiode and its FET preamplifier (Komine & Nakagawa 2004), and owc_illuminance() gives the illuminance of the same lights. The time bins must be small against the delay spread: a line of sight spreads over a few hundred picoseconds, hence 10 ps bins for an SNR at 100 Mb/s. validation/tests/optical_wireless/barry1993.rs and komine2004.rs check the received powers, bandwidths and SNR against the papers.

Free-space optics#

An Fso link multiplies the intensity by a gain drawn once per frame (the fading lasts milliseconds): a deterministic loss (fog_attenuation_db_per_km() for haze and fog), the turbulence and the pointing errors (PointingError). The turbulence is log-normal for weak fluctuations, negative exponential at saturation, or gamma–gamma across all regimes, with parameters predicted from the Rytov variance (rytov_variance(), from_rytov(), Al-Habash, Andrews & Phillips 2001):

g = comnum.GammaGamma.from_rytov(comnum.rytov_variance(5e-14, 1550e-9, 2000.0))
link = comnum.Fso(10.0, turbulence=g, pointing=comnum.PointingError(2.0, 0.1, 0.3))
h = link.gains(10_000, comnum.Rng(1))   # one gain per frame
g.alpha, g.beta, g.scintillation_index()

References: J. R. Barry et al., IEEE J. Sel. Areas Commun. 11(3), 1993; T. Komine and M. Nakagawa, IEEE Trans. Consum. Electron. 50(1), 2004; M. A. Al-Habash, L. C. Andrews and R. L. Phillips, Opt. Eng. 40(8), 2001; M. A. Khalighi and M. Uysal, IEEE Commun. Surveys Tuts. 16(4), 2014.

previous

Fibre propagation: how the split step is validated

next

Standards

On this page
  • Indoor channel
  • Free-space optics
Show Source

© Copyright 2022-2026, Vincent Choqueuse.

Created using Sphinx 9.1.1.

Built with the PyData Sphinx Theme 0.24.0.