Public Member Functions | Private Member Functions | Private Attributes

GaussianReceiver Class Reference

#include <GaussianReceiver.hh>

List of all members.

Public Member Functions

 GaussianReceiver (OptSignal *WDMSignal2, RanNumGen *RNG2, int DemuxChannArrayIndex2, string InDir, string Job2)
 ~GaussianReceiver ()
string WriteTypeOutput (void)
string WriteTypeGaussianNoise (void)
string WriteTypePMDonSignal (void)
string WriteTypeClockRecovery (void)
void ReceiveSignal (string FileID)
void SetFirstOrderPMDParameters (double *StokesParametersPlusPlus, cplx *StokesParametersPlusMinus, cplx c_plus2, cplx c_minus2)
void ComputeFirstOrderPMDParameters (OptFiber *PMF)
void ReceiveSignalDGD_NoisePartiallyPolarized (double DGD2, double ClockRecoveryTime2, double *UnitStokesPlusPlus2, double *UnitAverageStokesSignal, double DOP_Signal, double TotalNoiseSpectralDensity, double DOP_Noise, double *UnitStokesVectorPolarizedPartNoise, string OutFileID)

Private Member Functions

void RecoverClockAndSetTimeSlices (void)
void SetTimeSlices (void)
void ReceiveSignalUnpolarizedNoise (string FileID)
void ReceiveSignalNoPMD_NoisePartiallyPolarized (string FileID)
void ReceiveSignalDGD_NoisePartiallyPolarized (string FileID)
void ComputeMinimumBERAndDecisionThreshold (string FileID)
void WriteFilePairVectors (double *x, double *y, int dim, string OutFileName)
void WriteFilePDFTimeSlices (string OutFileName)
void ComputeAveragePDFs (string FileID)

Private Attributes

typeOutput TypeOutput
typeGaussianNoise TypeGaussianNoise
typePMDonSignal TypePMDonSignal
typeClockRecoveryGaussianReceiver TypeClockRecovery
int DebugLevel
double ClockRecoveryTime
OptSignalWDMSignal
OptSignalSingleChannelSignal
OptSignalWDMSignalTmp
OptFilterTunableOptFilter
OptDemuxeroOptDemuxer
PhotodetectoroPhotodetector
ElecFilteroElecFilter
ElecSignalStatoElecSignalStat
int DemuxChannArrayIndex
string Job
int ObjectInitialized
int NumTimeSlices
int NumSlicesPerBit
double TimeBetweenSlices
int NumBitsToPlot
double * TimeSlices
int * TimeSliceIndices
double * VarianceCurrent
double * MeanCurrent
double MeanNoise
double MinCurrent
double MaxCurrent
double DeltaCurrent
int NumPointsCurrent
double * CurrentVector
double * BER
double * AveragePDFZeros
double * AveragePDFOnes
double ** PDFTimeSlices
double * PDFTimeSlicesStorageVec
int * BitString
bool FirstOrderPMDParametersSet
double DGD
double * StokesPlusPlus
cplxStokesPlusMinus
cplx c_plus
cplx c_minus

Detailed Description

Given a noise free signal, appropriate noise statistics and receive filters this class computes the Gaussian approximation of the PDF of the current in each bit and the corresponding bit-error ratio


Constructor & Destructor Documentation

GaussianReceiver::GaussianReceiver ( OptSignal WDMSignal2,
RanNumGen RNG2,
int  DemuxChannArrayIndex2,
string  InDir,
string  Job2 
)
GaussianReceiver::~GaussianReceiver (  ) 

Member Function Documentation

void GaussianReceiver::ComputeAveragePDFs ( string  FileID  )  [private]
void GaussianReceiver::ComputeFirstOrderPMDParameters ( OptFiber PMF  ) 

The OptFiber PMF must be associated to the OptSignal WDMSignal. You must have called PMF->GetFiberSampleCompleteScatt() before calling this method. The implementation of the theory given in this method assumes that WDMSignal has only been generated using a signal constructor or OptSignal::RegenerateSignalString() and is to be propagated through the PMF. In particular, the signal has not been sent through a PolarizTransformer. Instead, you can use OptSignal::SetInJones() and OptSignal::RegenerateSignalString()

References c_minus, c_plus, DGD, OptSignal::GetCenterFreq(), OptFiber::GetDGD(), OptSignal::GetInJones(), OptFiber::GetOutPD_Vector(), JonesPair2MixedStokes(), SetFirstOrderPMDParameters(), Stokes2Jones(), OptFiber::TransformJonesVectorThroughFiber(), and WDMSignal.

void GaussianReceiver::ComputeMinimumBERAndDecisionThreshold ( string  FileID  )  [private]
void GaussianReceiver::ReceiveSignal ( string  FileID  ) 
void GaussianReceiver::ReceiveSignalDGD_NoisePartiallyPolarized ( double  DGD2,
double  ClockRecoveryTime2,
double *  UnitStokesPlusPlus2,
double *  UnitAverageStokesSignal,
double  DOP_Signal,
double  TotalNoiseSpectralDensity,
double  DOP_Noise,
double *  UnitStokesVectorPolarizedPartNoise,
string  OutFileID 
)
void GaussianReceiver::ReceiveSignalDGD_NoisePartiallyPolarized ( string  FileID  )  [private]

Receives a signal that is the sum of (1) a noise-free signal that has gone through first-order PMD fiber (ie PMF) and (2) Partially polarized noise.

For each different fiber realization and input polarization state, you must call GaussianReceiver::ComputeFirstOrderPMDParameters. You must also propagate the signal through an OptFiber object before calling this method. The clock will be recovered based on the signal after the PMF unless you use TypeClockRecovery = MANUALLY_SET.

References c_minus, c_plus, ClockRecoveryTime, DemuxChannArrayIndex, OptDemuxer::DemuxChannel(), Photodetector::DetectOptSignal(), DGD, ElecFilter::FilterElecSignal(), Photodetector::GetConvFactOptElecPhotod(), ElecSignalStat::GetIntegralForSignalNoiseVariance(), ElecSignalStat::GetMeanNoiseGaussianStatistics(), ElecSignalStat::GetNoiseNoiseVarianceGaussianStatistics(), OptSignal::GetNumChannels(), ReduOptSignal::GetStokesNoise(), ReduOptSignal::GetTotalNoiseSpectralDensity(), OptSignal::GetTypeSimulation(), InnerProduct(), Job, MeanCurrent, MeanNoise, NumTimeSlices, oElecFilter, oElecSignalStat, oOptDemuxer, oPhotodetector, OptSignal::oReduOptSignal, OptDemuxer::PrepareToDemuxChannel(), RecoverClockAndSetTimeSlices(), OptSignal::RegenerateSignalString(), ElecSignalStat::ResetOptElecFiltersForGaussianStatistics(), OptSignal::SetInJones(), Photodetector::sfftPM, SingleChannelSignal, sq(), sqrt(), StokesPlusMinus, StokesPlusPlus, TimeSliceIndices, TimeSlices, fftPowerMatrices::tPowerSignal, VarianceCurrent, WDMSignal, WDMSignalTmp, and Photodetector::WriteFileTimePower().

void GaussianReceiver::ReceiveSignalNoPMD_NoisePartiallyPolarized ( string  FileID  )  [private]

References sq(), and sqrt().

Referenced by ReceiveSignal().

void GaussianReceiver::ReceiveSignalUnpolarizedNoise ( string  FileID  )  [private]
void GaussianReceiver::RecoverClockAndSetTimeSlices ( void   )  [private]
void GaussianReceiver::SetFirstOrderPMDParameters ( double *  StokesParametersPlusPlus,
cplx StokesParametersPlusMinus,
cplx  c_plus2,
cplx  c_minus2 
)

StokesParametersPlusPlus and StokesParametersPlusMinus are 4x1 vectors for the first-order PMD fiber. c_plus2 and c_minus2 are the cplx splitting factors.

References c_minus, c_plus, FirstOrderPMDParametersSet, StokesPlusMinus, and StokesPlusPlus.

Referenced by ComputeFirstOrderPMDParameters().

void GaussianReceiver::SetTimeSlices ( void   )  [private]
void GaussianReceiver::WriteFilePairVectors ( double *  x,
double *  y,
int  dim,
string  OutFileName 
) [private]
void GaussianReceiver::WriteFilePDFTimeSlices ( string  OutFileName  )  [private]
string GaussianReceiver::WriteTypeClockRecovery ( void   ) 

References AUTOMATIC, MANUALLY_SET, and TypeClockRecovery.

Referenced by GaussianReceiver().

string GaussianReceiver::WriteTypeGaussianNoise ( void   ) 
string GaussianReceiver::WriteTypeOutput ( void   ) 

References EYE, PDFS, and TypeOutput.

Referenced by GaussianReceiver().

string GaussianReceiver::WriteTypePMDonSignal ( void   ) 

Member Data Documentation

double* GaussianReceiver::BER [private]

Referenced by GaussianReceiver().

double GaussianReceiver::DGD [private]
string GaussianReceiver::Job [private]
double GaussianReceiver::MaxCurrent [private]

Referenced by GaussianReceiver().

double* GaussianReceiver::MeanCurrent [private]
double GaussianReceiver::MeanNoise [private]
double GaussianReceiver::MinCurrent [private]

Referenced by GaussianReceiver().

Referenced by GaussianReceiver().

double** GaussianReceiver::PDFTimeSlices [private]

Referenced by GaussianReceiver(), and SetTimeSlices().

double* GaussianReceiver::TimeSlices [private]

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