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

Laser model. More...

Inherits unit.

Public Member Functions

function Laser_v1 (in param)
 Class constructor. More...
 
function traverse (in obj, in varargin)
 Main function call.
 
function process (in obj, in varargin)
 save parameters, generate noise More...
 
function MaxFreq (in obj)
 
function MinFreq (in obj)
 
function genNoise (in obj)
 generate noise More...
 
function plotLineShape (in obj)
 
function plotFMPSD (in obj)
 
function plotPNPSD (in obj)
 
function plotFreqNoise (in obj)
 
function plotPhaseNoise (in obj, in varargin)
 
function plot (in obj)
 
- 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 idft (in f, in X, in t)
 

Public Attributes

Property nInputs
 Number of inputs.
 
Property nOutputs
 Number of outputs.
 
Property Fc
 carrier frequency (Hz, can also be set by parameters)
 
Property linewidth
 Lorentzian linewidth for standard (non-semiconductor) laser.
 
Property Fs
 Sampling frequency (Hz)
 
Property Rs
 Symbol rate (/sec)
 
Property Lnoise
 Length of the noise signal (samples)
 
Property cacheEnabled
 Saves the waveform onto a file for speed porposes.
 
Property Power
 Output power (pwr object)
 
Property model
 Phase Noise Model (Type PhaseNoiseModel_v1)
 
Property limitPn
 Phase noise clipping limit [-1 1]*limitPn.
 
Property FMnoiseCal
 Frequency Modulation noise.
 
Property PMnoiseCal
 Phase Modulation noise.
 
Property fn
 Frequency noise time sequence.
 
Property pn
 Phase noise time sequence.
 
Property L
 FM noise PSD length.
 
Property Lir
 FM noise PSD length.
 
Property LFLW1GHZ
 Equivalent linewidth for 1/f noise defined at 1GHz.
 
Property HFLW
 High-frequency (Lorentzian-equivalent) linewidth.
 
Property fr
 Relaxation resonance frequency.
 
Property K
 Damping factor.
 
Property alpha
 Linewidth enhancement factor.
 
- 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

Laser model.

Outputs a time-domain phase noise sequence with the desired frequency noise power spectral density.

Basic algorithm

  1. FM noise PSD is generated in the frequency domain
  2. FM noise PSD is converted to time domain using IDFT
  3. FM noise PSD is convolved with white Gaussian noise
  4. PM noise is generated by integrating FM noise The length of the FM noise PSD is specified in model.Lpsd, or in the constructor, param.L. Noise at the lowest frequency component (DC) is forced to zero unless L=1. This means phase noise will be zero-mean unless L=1.

How to use it

Two ways for using within the Robochameleon framework:

  1. Source: Specify signal_interface parameters (Fs,Lnoise)
  2. Traverseable: Gets the signal parameters as an input

Two types of operation

  1. lorentzian: You need to specifiy linewidth. It creates a flat frequency power spectral density (PSD) at linewidth/pi level, which corresponds to a lorenztian optical spectrum with a FWHM of linewidth.
  2. semiconductor: You need to specify LFLW1GHZ, HFLW, fr, K and alpha. It creates the desired semiconductor frequency noise PSD based on those 5 parameters and outputs a time-domain phase noise sequence that matches the desired PSD.

Basic use case: Build a Lorentizan laser with linewidth of 100 KHz at 1550 nm with 2^10 samples

param.laser.Fs = 80e9;
param.laser.Lnoise = 2^10;

Lorentzian examples:

Txparam = struct('Power', pwr(150, {5, 'dBm'}), 'linewidth', 1e5, 'Fc', const.c/1550e-9, 'L', 2^7, ...
'Fs', param.ppg.Rs*param.ps.US_factor, 'Rs', Rs, 'Lnoise', param.ps.US_factor*L);
LOparam = struct('Power', pwr(150, {5, 'dBm'}), 'linewidth', 1e5, 'Fc', const.c/1550e-9+foffset, 'L', 1);

A laser with Txparam would generate a signal; a laser with LOparam would read many properties from an input signal_interface. The LO uses filter lengths 1, so phase will act like a random walk (no low-frequency noise suppression). The TX uses a long filter, so low-frequency noise will be suppressed. Runtime will also be longer.

SCL example:

SCLparam = struct('Power', pwr(150, {5, 'dBm'}), 'Fc', const.c/1550e-9+foffset, 'L', 2^14, ...
'alpha', 3, 'fr', 1e9, 'K', .3e-9, 'LFLW1GHZ', 1e6, 'HFLW', 1e5);
badSCLparam = struct('Power', pwr(150, {5, 'dBm'}), 'linewidth', 1e5, 'Fc', const.c/1550e-9+foffset, 'L', 2^14, ...
'alpha', 3, 'fr', 1e9, 'K', .3e-9, 'LFLW1GHZ', 1e6, 'HFLW', 1e5););

A laser with SCLparam will be a standarad SCL with the properties specified. A laser with badSCLparam will be a Lorentzian, because 'linewidth' will take precedence over alpha, fr, etc. See:

References

M. Iglesias Olmedo, X. Pang, A. Udalcovs, R. Schatz, D. Zibar, G. Jacobsen, S. Popov, and I. T. Monroy, "Impact of Carrier Induced Frequency Noise from the Transmitter Laser on 28 and 56 Gbaud DP-QPSK Metro Links," in Asia Communications and Photonics Conference 2014, OSA Technical Digest (online) (Optical Society of America, 2014), paper ATh1E.1. https://www.osapublishing.org/abstract.cfm?uri=ACPC-2014-ATh1E.1

for definitions of these terms. They are also defined in many other sources (e.g. Coldren & Corzine).

Author
Miguel Iglesias Olmedo
See also
PhaseNoiseModel_v1
Version
1

Definition at line 89 of file Laser_v1.m.

Constructor & Destructor Documentation

function Laser_v1::Laser_v1 ( in  param)

Class constructor.

Determines whether user wants to take signal parameters from another input signal or to specify them. Also determines whether to operate in Lorentzian or semiconductor laser mode.

Parameters
param.FsSampling frequency [Hz];
param.RsSymbol rate [Hz]. Default: nan (Don't use this information).
param.LnoiseSignal length [Samples].
param.FcCarrier frequency [Hz]. Default: 193.41 THz (1550 nm);
param.PowerOutput power (pwr object). Default: SNR:inf, P: 0 dBm
param.linewidthLorentzian linewidth - forces operation in Lorentzian mode if specified [Hz]
param.LFLW1GHZlinewidth at 1GHz
param.HFLWhigh-frequency linewidth [Hz]
param.frrelaxation resonance frequency [Hz]
param.KDamping factor
param.alphaLinewidth enhancement factor [unitless]

Member Function Documentation

function Laser_v1::genNoise ( in  obj)

generate noise

Generates frequency and phase noise time sequences. Generates a time-domain filter with length obj.Lpsd (in constructor, param.L or param.Lir), generates white noise, then filters that noise using the constructed filter. NB: filter will remove DC component of noise if length>1.

Return values
fnfrequency noise sequence
fnphase noise sequence
function Laser_v1::MaxFreq ( in  obj)

This function calls genNoise to generate appropriate phase noise and frequency noise sequences.

function Laser_v1::process ( in  obj,
in  varargin 
)

save parameters, generate noise

This function copies signal_interface parameters from input signal if any.

Parameters
varargininput signal_interface
Return values
fnfrequency noise sequence
fnphase noise sequence

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