Robochameleon  v1.0
Public Member Functions | Public Attributes | Private Attributes | List of all members
IQModulator_v1 Class Reference

I-Q modulator model. More...

Inherits unit.

Public Member Functions

function IQModulator_v1 (in varargin)
 Class constructor. More...
 
function traverse (in obj, in varargin)
 Applies drive signal to laser. More...
 
function checkParamSizes (in obj)
 Checks input signals for consistency with model parameters.
 
- 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.
 

Public Attributes

Property nInputs
 Number of inputs.
 
Property nOutputs
 Number of outputs.
 
Property Vb
 Bias voltage [V].
 
Property Vpi
 Vpi [V].
 
Property IQphase
 I-Q phase angle [rad].
 
Property IQGainImbalance
 I-Q gain imbalance [dB].
 
Property rescaleVdrive
 Force peak drive voltage to a certain value?
 
Property Vamp
 What value should it be forced to?
 
- 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.
 

Private Attributes

Property nModes
 Number of output modes.
 

Detailed Description

I-Q modulator model.

Basic model of an IQ optical modulator. In principle, this should work for an arbitrary number of modes.

Observations

  1. Number of inputs-checking is done upon traverse
  2. Noise from the electrical drive is not passed through to the output signal_interface
  3. The modulator has unlimited bandwidth
  4. By default, the input drive signal is rescaled to an appropriate value for the given Vpi; this can be disabled

Conventions

Example

% The IQ modulator with no input parameters should behave like an
% ideal IQ modulator
drive = createDummySignal(); %2-pol complex drive input
param.laser.Power = pwr(150, {14, 'dBm'});
param.laser.linewidth = 100;
param.laser.Fs = 160e9;
param.laser.Rs = 1e9;
param.laser.Fc = const.c/1550e-9;
param.laser.Lnoise = drive.L;
laser = Laser_v1(param.laser);
laserSig = laser.traverse();
sigOut = IQ.traverse(drive, laser);

Advanced Example

% One can also set any parameters
drive = createDummySignal(); %2-pol complex drive input
param.laser.Power = pwr(150, {14, 'dBm'});
param.laser.linewidth = 100;
param.laser.Fs = 160e9;
param.laser.Rs = 1e9;
param.laser.Fc = const.c/1550e-9;
param.laser.Lnoise = drive.L;
param.IQ.Vpi = 4; %all child MZMs have a Vpi of 4 V
param.IQ.Vb = [3.5, 4, 4, 4]; %the first child MZM is biased
%incorrecty
IQphase = [deg2rad(80), deg2rad(90)]; %the first polarization has 10
%degrees of quadrature error; the second is OK
IQGainImbalance = 0; %there is no gain imbalance anywhere
laser = Laser_v1(param.laser);
laserSig = laser.traverse();
IQ = IQModulator_v1(param.IQ);
sigOut = IQ.traverse(drive, laser);
Author
Molly Piels
Version
1

Definition at line 85 of file IQModulator_v1.m.

Constructor & Destructor Documentation

function IQModulator_v1::IQModulator_v1 ( in  varargin)

Class constructor.

Constructs an object of type IQModulator_v1

Most parameters (Vb, Vpi, IQphase, IQGainImbalance)can be passed as either a scalar or a vector. If they are passed as a scalar, the same value is applied to all relevant sub-components. If they're passed as vectors, there must be one value for each subcomponent (4x Vpi's and Vb's and 2x imbalances and phase angles for a standard dual-pol IQ modulator). Mixtures of scalars and vectors are acceptable.

Parameters
param.VbBias voltage [V]. [Default: Vpi=4]
param.VpiV pi for child modulators [V] [Default: 4].
param.IQphaseIQ phase angle [rad] [Default: pi/2].
param.IQGainImbalanceGain imbalance in I and Q [dB] [ Default: 0].
param.rescaleVdriveForce drive signal to a certain value [boolean] [Default: on]
param.VampWhat drive voltage should be forced to, if rescaling is enabled [V] [Default: 1];
Return values
objAn instance of the class IQModulator_v1

Member Function Documentation

function IQModulator_v1::traverse ( in  obj,
in  varargin 
)
virtual

Applies drive signal to laser.

There is some flexibility in how drive signals are specified. The following are acceptable:

  1. A single signal_interface with multiple complex baseband columns
  2. Several signal_interface objs with one complex baseband column each
  3. A single signal_interface with an even number of columns, or an even number of single-column signal_interfaces.
Parameters
vararginDrive1, Drive2, ... laser
Return values
outModulated laser

Reimplemented from unit.


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