Main Content

dsocWebbGaussianChannel

Create deep space optical communications Webb Gaussian or Gaussian channel

Since R2024b

Description

The dsocWebbGaussianChannel System object™ creates a deep space optical communications (DSOC) channel, based on the value set for the ApproximationMethod property.

  • DSOC Webb Gaussian channel, as defined in NASA article Section C [1].

  • DSOC Gaussian channel, as defined in NASA article Section D [1].

Use dsocWebbGaussianChannel to model a full avalanche photo detector (APD) output, which includes thermal noise and surface leakage current, using Webb Gaussian or Gaussian approximation, and to obtain the estimate photon count in each slot.

To create a DSOC Webb Gaussian or Gaussian channel:

  1. Create the dsocWebbGaussianChannel object and set its properties.

  2. Call the object with arguments, as if it were a function.

To learn more about how System objects work, see What Are System Objects?

Creation

Description

chan = dsocWebbGaussianChannel creates a default DSOC Webb Gaussian channel System object.

example

chan = dsocWebbGaussianChannel(Name=Value) sets properties using one or more name-value arguments. For example, dsocWebbGaussianChannel(ApproximationMethod="Gaussian") sets the approximation method to "Gaussian" and creates a DSOC Gaussian channel.

example

Properties

expand all

Unless otherwise indicated, properties are nontunable, which means you cannot change their values after calling the object. Objects lock when you call them, and the release function unlocks them.

If a property is tunable, you can change its value at any time.

For more information on changing property values, see System Design in MATLAB Using System Objects.

Approximation method to determine the distribution used to generate the slot counts, specified as one of these values.

  • "Webb-Gaussian" — Use this option to create a Webb Gaussian channel, as defined in NASA article Section C [1].

  • "Gaussian" — Use this option to create a Gaussian channel, as defined in NASA article Section D [1].

Data Types: char | string

Average signal photons per pulsed slot, specified as a real positive scalar.

NumSignalPhotons also denotes the average number of signal photons per symbol, as the pulse energy of a symbol is captured in a single slot.

Data Types: double

Average noise photons per slot, specified as a nonnegative real scalar.

Data Types: double

APD gain, specified as a positive integer.

Data Types: double | uint32

Ionization ratio (keff), specified as a scalar in the range (0, 1).

This equation shows the relationship between keff and the ExcessNoiseFactor read-only property.

ExcessNoiseFactor = keff×G + ((2 – 1∕G)×(1 – keff)), where G is Gain.

Data Types: double

Surface leakage current in amperes, specified as a nonnegative real scalar.

Data Types: double

Width of the PPM slot required for the laser (Ts) in seconds, specified as a positive real scalar.

  • This equation shows the relationship between SlotTime and LoadResistance read-only property.

    Load resistance = 5.75e12×Ts

  • This equation shows the relationship between SlotTime and Bandwidth read-only property.

    Bandwidth = ½×Ts

Data Types: double

Noise temperature in kelvin, specified as a positive real scalar.

Data Types: double

Normalized timing offset, specified as a scalar in the range [0, 1). TimingOffset indicates the fractional timing offset in each slot.

Data Types: double

Source of the random number stream, specified as "Global stream" or "mt19937ar with seed".

  • "Global stream" — The object uses the current global random number stream for Webb Gaussian or Gaussian distributed random number generation. In this case, the reset object function resets only the filters.

  • "mt19937ar with seed" — The object uses the mt19937ar algorithm for Webb Gaussian or Gaussian distributed random number generation. In this case, the reset object function resets the filters and reinitializes the random number stream to the value of the Seed property.

Data Types: char | string

Initial seed of the mt19937ar random number stream generator algorithm, specified as a nonnegative integer. When you call the reset object function, it reinitializes the mt19937ar random number stream to the Seed value.

Dependencies

To enable this property, set the RandomStream property to "mt19937ar with seed".

Data Types: double | uint32

This property is read-only.

Load resistance in ohms, returned as a real scalar.

Data Types: double

This property is read-only.

Noise equivalent one-sided bandwidth in hertz, returned as a real scalar.

Data Types: double

This property is read-only.

Excess noise factor, returned as a real scalar.

Data Types: double

Usage

Description

slotCount = chan(modIn) adds Webb Gaussian or Gaussian distributed noise to modIn, transmitted through the channel chan, and returns the estimated photon count in slotCount.

Input Arguments

expand all

Modulated input data, specified as an N-element binary column vector. N is the number of samples. The vector contains the modulated data, with 1 representing a laser pulse and 0 representing the absence of a laser pulse.

Data Types: double | int8 | logical

Output Arguments

expand all

Estimate of the photo-electron count per slot at APD output, returned as an N-element column vector. The size of this vector is equal to the size of modIn.

Data Types: double

Object Functions

To use an object function, specify the System object as the first input argument. For example, to release system resources of a System object named obj, use this syntax:

release(obj)

expand all

stepRun System object algorithm
releaseRelease resources and allow changes to System object property values and input characteristics
cloneCreate duplicate System object
isLockedDetermine if System object is in use
resetReset internal states of System object

Examples

collapse all

To estimate photon count per slot at the receiver, configure a DSOC Webb Gaussian channel and pass the input signal through the channel.

Generate data.

rng("default")
symLen = 1000;
m = 6;
M = 2^m;                         % M-ary PPM
data = randi([0 M-1],symLen,1);

Create a Webb Gaussian channel object and set the properties.

chanObj = dsocWebbGaussianChannel(NumSignalPhotons=16, ...
             NumNoisePhotons=0.1, ...
             RandomStream="mt19937ar with seed",Seed=64);

Modulate the data using the pulse position modulation (PPM) technique.

modOut = zeros(symLen*M,1);
mapIndex = (0:symLen-1)'*M + data + 1; % Mapping Index
modOut(mapIndex) = 1;

Pass the modulated data through a Webb Gaussian channel.

receivedData = chanObj(modOut);

Plot the distribution for pulsed slots.

histogram(receivedData(modOut == 1))
xlabel("Slot")
ylabel("Photon Count")
title("Distribution for Pulsed Slots")

Figure contains an axes object. The axes object with title Distribution for Pulsed Slots, xlabel Slot, ylabel Photon Count contains an object of type histogram.

Estimate photon counts per slot by configuring a DSOC Gaussian channel and adding a timing offset to the signal.

Generate data.

rng("default")
symLen = 2500;
m = 3;
M = 2^m;                         % M-ary PPM
data = randi([0 M-1],symLen,1);

Create a Gaussian channel object and set the properties.

chanObj = dsocWebbGaussianChannel(ApproximationMethod="Gaussian", ...
             SurfaceLeakageCurrent=1e-9,TimingOffset=0.3);

Modulate the data using the PPM technique.

modOut = zeros(symLen*M,1);
mapIndex = (0:symLen-1)'*M + data + 1; % Mapping Index
modOut(mapIndex) = 1;

Pass the modulated data through the Gaussian channel.

receivedData = chanObj(modOut);

Plot the distribution for pulsed slots.

histogram(receivedData(modOut == 1))
xlabel("Slot")
ylabel("Photon Count")
title("Distribution for Pulsed Slots")

Figure contains an axes object. The axes object with title Distribution for Pulsed Slots, xlabel Slot, ylabel Photon Count contains an object of type histogram.

References

[1] Dolinar, S., D. Divsalar, J. Hamkins, and F. Pollara. "Capacity of pulse-position modulation (PPM) on Gaussian and Webb Channels," August 15, 2020.

[2] Ascheid, G. “On the Generation of WMC-Distributed Random Numbers.” IEEE Transactions on Communications 38, no. 12 (December 1990): 2117–18.

Extended Capabilities

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

Version History

Introduced in R2024b