Robochameleon  v1.0
Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
LinChBulk_v1 Class Reference

Linear channel model. More...

Inherits unit.

Public Member Functions

function LinChBulk_v1 (in param)
 Class constructor. More...
 
function traverse (in obj, in in)
 Traverse function. More...
 
function cd_loading (in param, in Ein)
 Chromatic dispersion loading. More...
 
function pmd_loading (in obj, in in)
 PMD loading. More...
 
- Public Member Functions inherited from unit
function traverseNode (in obj)
 Set unique ID when creating a unit. More...
 
function connectOutput (in obj, in uobj, in unitOutput, in nextUnitInput)
 Specify where signal should go next. More...
 
function connectOutputs (in obj, in units, in destInputs)
 Specify where signal should go next. More...
 
function writeInputBuffer (in obj, in sig, in inputId)
 write input buffer
 
function horzcat (in varargin)
 horizontal concatenation
 
function vertcat (in varargin)
 vertical concatenation
 
function setparams (in obj, in params, in REQUIRED_PARAMS, in QUIET_PARAMS)
 set parameters More...
 
function view (in obj)
 Show interactive GUI through unit_view-class.
 

Static Public Member Functions

static function random_unitary (in N)
 Generates a random unitary matrix. More...
 
static function random_hermitian (in N)
 Generates a random hermitian matrix. More...
 
static function stokes_from_U (in U)
 Converts unitary matrix to equivalent rotation matrix. More...
 
static function D_lookup (in lambda)
 Dispersion lookup table. More...
 

Public Attributes

Property nOutputs
 Number of outputs.
 
Property nInputs
 Number of inputs.
 
Property D
 dispersion coeff. (ps/nm km)
 
Property S
 2nd order dispersion coeff. (ps/nm^2 km)
 
Property L
 length (km)
 
Property U
 Jones matrix.
 
Property DGD
 modulus of DGD/PMD vector (s)
 
Property tau
 vector of DGDs (s)
 
Property P
 Matrix of principal modes.
 
Property DGD_mode
 How to specify DGD {'set' | 'random'}.
 
Property loss
 loss (dB/km)
 
- Public Attributes inherited from unit
Property inputBuffer
 Buffer for storing inputs as we traverse the graph.
 
Property nextNodes
 Children nodes.
 
Property destInputs
 Destination inputs in children.
 
Property results
 For storing results.
 
Property label
 
Property draw
 enable/disable plotting
 
Property nInputs
 Number of signals traverse expects.
 
Property nOutputs
 Number of outputs traverse expects.
 

Detailed Description

Linear channel model.

Linear fiber optic channel model with polarization (mode) mixing, chromatic dispersion, PMD, and loss

Observations

  1. Number of modes supported by fiber is set by the dimension of the input signal
  2. Fiber parameters are taken from a look-up table for SMF28 unless otherwise specified.
  3. Mode mixing is based on random matrix generation unless otherwise specified.
  4. The general assumption is that the fiber supports "principal modes" and that these have a bandwidth that is larger than the signal bandwidth. This is fine for SMF, but potentially problematic for multimode fiber.

Examples

param = struct('D', 1e-6, 'S', .0092, 'L', 40, 'loss', .34);
channel = LinChBulk_v1(channel);

Will construct a 40km channel with .34 dB/km loss and negligible 1st order dispersion (typical parameters at 1310). These parameters will be fixed regardless of the wavelength of the input signal. The code

param = struct('L', 40);
channel = LinChBulk_v1(channel);
signal = signal_interface(field, struct('Fc', const.c/1310e-9, ...));
sigout = channel.traverse(signal);

Will also construct a 40km channel with .34 dB/km loss and negligible 1st order dispersion. If the input signal were at 1550 instead, the dispersion, loss, etc. would be different.

To remove the effect of polarization mixing, specify the Jones matrix of the fiber as an identity matrix:

param = struct('L', 40, 'U', eye(2));
channel = LinChBulk_v1(channel);
Author
Molly Piels
Version
2

Definition at line 58 of file LinChBulk_v1.m.

Constructor & Destructor Documentation

function LinChBulk_v1::LinChBulk_v1 ( in  param)

Class constructor.

Constructs an object of type LinChBulk

Generally, if fiber parameters are not specified, the model will assume SMF-28 and use a lookup table based on the input signal's wavelength.

Parameters
param.DDispersion coefficient [ps/nm*km].
param.SDispersion slope [(ps/nm^2 km)] [Default 0].
param.LFiber length [km] [Default: 0].
param.UUnitary matrix describing mode mixing [au] [Default: randomly generated]
param.DGDModulus of DGD/PMD vector [s] [Default: 0]
param.DGD_modeHow to interpret param.DGD: 'set' = the DGD is param.DGD (only makes sense for SMF); 'random' = the DGD is drawn randomly from an appropriate PDF with this mean. [Default: set]
param.lossFiber loss [dB/km]
param.tauVector of differential group delays to apply [s]
param.PMatrix describing polarization alignment of DGD vector [au] [Default: randomly generated]
Return values
objAn instance of the class ClassTemplate_v1

Member Function Documentation

function LinChBulk_v1::cd_loading ( in  param,
in  Ein 
)

Chromatic dispersion loading.

Chromatic dispersion loading - operates in frequency domain

Parameters
Eininput signal (signal_interface)
Return values
Eoutoutput signal (signal_interface)
HTransfer function of dispersion operator
static function LinChBulk_v1::D_lookup ( in  lambda)
static

Dispersion lookup table.

Dispersion lookup table based on Corning SMF 28

Parameters
lambdawavelength in m
Return values
D_outin ps/(nm km)
function LinChBulk_v1::pmd_loading ( in  obj,
in  in 
)

PMD loading.

PMD loading

Modes of operation: PMD can either be set ('set' mode) or drawn from an appropriate statistical distribution ('random' mode). In 'set' mode, for a 2-mode fiber, you specify the modulus of the DGD vector (DGD property), and the associated delays are +/- tau/2. For N-mode fiber, you can either set the modulus (DGD property) or specify the actual delays (tau property) In random mode, model draws from a chi distribution with <# of modes> degrees of freedom for actual modulus of PMD vector (Maxwell if N=2).

Main method: Delays are applied as shifts to randomly oriented principal modes. See J. P. Gordon and H. Kogelnik, "PMD fundamentals: Polarization mode dispersion in optical fibers," Proc. Natl. Acad. Sci., vol. 97, no. 9, pp. 4541–4550, 2000. or K.-P. Ho and J. M. Kahn, "Statistics of Group Delays in Multimode Fiber with Strong Mode Coupling," J. Light. Technol., vol. 29, pp. 3119–3128, 2011.

Parameters
UJones matrix of fiber
ininput signal (signal_interface class)
Return values
Eoutoutput signal
mod_taumodulus of DGD vector
static function LinChBulk_v1::random_hermitian ( in  N)
static

Generates a random hermitian matrix.

Generates a random Hermitian matrix with zero trace

Parameters
Nmatrix dimension
Return values
HNxN Hermitian matrix
static function LinChBulk_v1::random_unitary ( in  N)
static

Generates a random unitary matrix.

Generates a random unitary matrix. If called many times, the set of returned matrices will have appropriately statistically distributed eigenvalues. This is important for channel capacity calculations. The algorithm is from F. Mezzadri, "How to generate random matrices from the classical compact groups,” arXiv Prepr. math-ph/0609050, vol. 54, no. 5, pp. 592–604, 2006.

Parameters
Nmatrix dimension
Return values
UNxN unitary matrix
static function LinChBulk_v1::stokes_from_U ( in  U)
static

Converts unitary matrix to equivalent rotation matrix.

Maps U in C^2 to R in R^3 - returns rotation part of Mueller matrix of fiber given a fiber Jones matrix. Only applies to 2x2 Jones matrices.

Parameters
UJones matrix (must be 2x2)
Return values
Rrotation matrix
function LinChBulk_v1::traverse ( in  obj,
in  in 
)
virtual

Traverse function.

Applies polarization mixing, then chromatic dispersion, then PMD, then loss

Return values
outsignal after propagation through channel
results.JonesJones matrix of fiber
results.PMDmodulus of PMD vector
results.StokesRotation matrix of fiber in Stokes space (SMF only)

Reimplemented from unit.


The documentation for this class was generated from the following file: