#include <ocsReduPolDepAttenuator.hh>
Public Member Functions | |
ReduPolDepAttenuator () | |
Default constructor. | |
ReduPolDepAttenuator (ReduOptSignal *oReduOptSignalTmp) | |
Constructor. | |
ReduPolDepAttenuator (ReduOptSignal *oReduOptSignalTmp, double PolDepAttenuationXTmp, double PolDepAttenuationYTmp) | |
Constructor. | |
void | InitPolDepAttenuator (ReduOptSignal *oReduOptSignalTmp) |
Initializes the parameters. Called by the constructors. | |
void | SetPolDepAttenuation (double PolDepAttenuationXTmp, double PolDepAttenuationYTmp) |
Sets the amount of PDL in the X and Y directions in Jones space. | |
void | SetPolDepAttenuationX (double PolDepAttenuationXTmp) |
Sets the PDL in the X direction. | |
void | SetPolDepAttenuationY (double PolDepAttenuationYTmp) |
Sets the PDL in the Y direction. | |
double | GetPolDepAttenuationPowerX (void) |
double | GetPolDepAttenuationPowerY (void) |
double | GetLinearPolDepAttenuationPowerX (void) |
double | GetLinearPolDepAttenuationPowerY (void) |
void | GetTransmMatrixCoefficients (void) |
void | SyncNumChannels (void) |
void | PolDepAttenuate (void) |
Transmits the Reduced Signal through the PDL element. | |
Private Attributes | |
int | ObjectInitialized |
ReduOptSignal * | oReduOptSignal |
double | NumChannels |
The number of channels of oReduOptSignal. | |
double | LinearPolDepAttenuationX |
double | LinearPolDepAttenuationY |
in the Y dircetion in Jones space | |
double | Tm00 |
double | Tm01 |
double | Tm22 |
The reduced polarization dependent attenuator.
Models a polarization-dependent loss (PDL) element.
In the reduced model the action of a PDL element on the Stokes parameters of the signal and of the noise is given by Equation (6) of Wang and Menyuk, JLT Vol 19, Num4, April 2001 [WM 2001].
The action of a PDL element on the additional unpolarized noise is given by setting (S_1, S_2, S_3) = (0,0,0) in Equation (6) of [WM 2001].
For a simple application we call the constructor
ReduPolDepAttenuator(ReduOptSignal *oReduOptSignalTmp ,double PolDepAttenuationXTmp ,double PolDepAttenuationYTmp)
where we usually set PolDepAttenuationX = 0.0 and
PolDepAttenuationY = The amount of PDL in dB.
This is as in [WM 2001, Eq 5].
Then we call the method
which passes the signal through the PDL element.
ReduPolDepAttenuator::ReduPolDepAttenuator | ( | ) | [inline] |
ReduPolDepAttenuator::ReduPolDepAttenuator | ( | ReduOptSignal * | oReduOptSignalTmp | ) |
Constructor.
oReduOptSignalTmp,: | An object in the reduced optical signal class |
We need to pass a ReduOptSignal because the PDL element acts on the Stokes parameters of the signal and noise in each channel and on the additional unpolarized noise all of which are data members in ReduOptSignal.
This constructor calls
InitPolDepAttenuator(ReduOptSignal *oReduOptSignalTmp)
ReduPolDepAttenuator::ReduPolDepAttenuator | ( | ReduOptSignal * | oReduOptSignalTmp, | |
double | PolDepAttenuationXTmp, | |||
double | PolDepAttenuationYTmp | |||
) |
Constructor.
oReduOptSignalTmp,: | An object in the reduced optical signal class |
We need to pass a ReduOptSignal because the PDL element acts on the Stokes parameters of the signal and noise in each channel and on the additional unpolarized noise all of which are data members in ReduOptSignal.
This constructor calls the two functions:
InitPolDepAttenuator(ReduOptSignal *oReduOptSignalTmp)
SetPolDepAttenuation(double,double)
References InitPolDepAttenuator(), and SetPolDepAttenuation().
double ReduPolDepAttenuator::GetLinearPolDepAttenuationPowerX | ( | void | ) | [inline] |
Returns the amount of loss of power due to PDL in the X direction on linear scale.
References LinearPolDepAttenuationX, and sq().
double ReduPolDepAttenuator::GetLinearPolDepAttenuationPowerY | ( | void | ) | [inline] |
Returns the amount of loss of power due to PDL in the Y direction on linear scale.
References LinearPolDepAttenuationY, and sq().
double ReduPolDepAttenuator::GetPolDepAttenuationPowerX | ( | void | ) | [inline] |
Returns the amount of loss of power due to PDL in the X direction on log scale.
References Linear2dB(), LinearPolDepAttenuationX, and sq().
double ReduPolDepAttenuator::GetPolDepAttenuationPowerY | ( | void | ) | [inline] |
Returns the amount of loss of power due to PDL in the Y direction on log scale.
References Linear2dB(), LinearPolDepAttenuationY, and sq().
void ReduPolDepAttenuator::GetTransmMatrixCoefficients | ( | void | ) |
Initializes the non-zero coefficients of the 4 by 4 PDL transmission matrix that acts on the 4 Stokes parameters.
The PDL is initialized in Jones space by SetPolDepAttenuation but it acts by matrix multiplication on the Stokes parameters of the signal and noise. This method initializes the non-zero entries of the matrix as in [WM 2001] Eq (6).
The method is called by
void SetPolDepAttenuation(double,double)
References LinearPolDepAttenuationX, LinearPolDepAttenuationY, sq(), Tm00, Tm01, and Tm22.
Referenced by SetPolDepAttenuationX(), and SetPolDepAttenuationY().
void ReduPolDepAttenuator::InitPolDepAttenuator | ( | ReduOptSignal * | oReduOptSignalTmp | ) |
Initializes the parameters. Called by the constructors.
Initializes the class variables oReduOptSignal, NumChannels, and sets ObjectInitialized = 0, since the amount of PDL still needs to be set.
References ReduOptSignal::GetNumChannels().
Referenced by ReduPolDepAttenuator().
void ReduPolDepAttenuator::PolDepAttenuate | ( | void | ) |
Transmits the Reduced Signal through the PDL element.
The action of a PDL element on the Stokes parameters of the signal and of the noise is given by Equation (6) of Wang and Menyuk, JLT Vol 19, Num4, April 2001 [WM 2001].
The action of a PDL element on the additional unpolarized noise is given by setting (S_1, S_2, S_3) = (0,0,0) in Equation (6) of [WM 2001].
References NumChannels, ObjectInitialized, oReduOptSignal, ReduOptSignal::StokesNoise, ReduOptSignal::StokesSignal, Tm00, Tm01, and Tm22.
Referenced by ReduOptAmplifier::AddPolDepGainEffect(), and PolDepAttenuator::PolDepAttenuate().
void ReduPolDepAttenuator::SetPolDepAttenuation | ( | double | PolDepAttenuationXTmp, | |
double | PolDepAttenuationYTmp | |||
) |
Sets the amount of PDL in the X and Y directions in Jones space.
We usually set
PolDepAttenuationX | = 0.0 dB (no loss in the X direction) | |
PolDepAttenuationY | = Amount of PDL in dB = x_{PDL} in the notation of [Wang and Menyuk, JLT 2001, above Eq (6)]. |
The method also sets ObjectInitialized = 1.
ReduPolDepAttenuator(ReduOptSignal *oReduOptSignalTmp)
void SetPolDepAttenuationX(double PolDepAttenuationXTmp)
void SetPolDepAttenuationY(double PolDepAttenuationYTmp)
References ObjectInitialized, SetPolDepAttenuationX(), and SetPolDepAttenuationY().
Referenced by ReduOptAmplifier::ReduOptAmplifier(), ReduPolDepAttenuator(), and PolDepAttenuator::SetPolDepAttenuation().
void ReduPolDepAttenuator::SetPolDepAttenuationX | ( | double | PolDepAttenuationXTmp | ) |
Sets the PDL in the X direction.
PolDepAttenuationXTmp | is in dB |
The factor of 1/2 comes from the fact that the LinearPolDepAttenuationX acts on the field, not on the power.
References dB2Linear(), GetTransmMatrixCoefficients(), and LinearPolDepAttenuationX.
Referenced by ReduOptAmplifier::AddPolDepGainEffect(), and SetPolDepAttenuation().
void ReduPolDepAttenuator::SetPolDepAttenuationY | ( | double | PolDepAttenuationYTmp | ) |
Sets the PDL in the Y direction.
PolDepAttenuationYTmp | is in dB |
The factor of 1/2 comes from the fact that the LinearPolDepAttenuationY acts on the field, not on the power.
References dB2Linear(), GetTransmMatrixCoefficients(), and LinearPolDepAttenuationY.
Referenced by SetPolDepAttenuation().
void ReduPolDepAttenuator::SyncNumChannels | ( | void | ) |
Synchronizes the class parameter NumChannels with the corresponding parameter in oReduOptSignal.
Used when sweep over the number of channels.
References ReduOptSignal::GetNumChannels(), NumChannels, and oReduOptSignal.
Referenced by ReduOptAmplifier::SyncNumChannels().
double ReduPolDepAttenuator::LinearPolDepAttenuationX [private] |
The amount of loss of field-amplitude due to PDL on a linear scale in the X dircetion in Jones space
Referenced by GetLinearPolDepAttenuationPowerX(), GetPolDepAttenuationPowerX(), GetTransmMatrixCoefficients(), and SetPolDepAttenuationX().
double ReduPolDepAttenuator::LinearPolDepAttenuationY [private] |
in the Y dircetion in Jones space
The amount of loss of field-amplitude due to PDL on a linear scale
Referenced by GetLinearPolDepAttenuationPowerY(), GetPolDepAttenuationPowerY(), GetTransmMatrixCoefficients(), and SetPolDepAttenuationY().
double ReduPolDepAttenuator::NumChannels [private] |
The number of channels of oReduOptSignal.
Referenced by PolDepAttenuate(), and SyncNumChannels().
int ReduPolDepAttenuator::ObjectInitialized [private] |
Referenced by PolDepAttenuate(), ReduPolDepAttenuator(), and SetPolDepAttenuation().
A pointer to the ReduOptSignal object to be transmitted through the PDL element.
Referenced by PolDepAttenuate(), and SyncNumChannels().
double ReduPolDepAttenuator::Tm00 [private] |
The nonzero entries of the 4 by 4 PDL transmission matrix that acts on the 4 Stokes prameters.
Referenced by GetTransmMatrixCoefficients(), and PolDepAttenuate().
double ReduPolDepAttenuator::Tm01 [private] |
Referenced by GetTransmMatrixCoefficients(), and PolDepAttenuate().
double ReduPolDepAttenuator::Tm22 [private] |
Referenced by GetTransmMatrixCoefficients(), and PolDepAttenuate().