Public Member Functions | Private Member Functions | Private Attributes

ChiSquareReceiver Class Reference

#include <ChiSquareReceiver.hh>

List of all members.

Public Member Functions

 ChiSquareReceiver (string InFileName, NoiseCovariance *oNoiseCovariance2)
 Constructor.
 ~ChiSquareReceiver (void)
void ReceiveSignal (string OutFileNamePrefix2)
 Call this method each time you want to receive the signal.
void ComputeGaussianPDFsAndBER (void)
double GetOSNR_dB (double B_OSA)
double GetBitErrorRatio (void)
double GetDecisionThresholdmV (void)
void SetOSNR (double Value)
void SetElecFilterBandwidth (double ValueHz)
void SetOptFilterBandwidth (double ValueHz)
void ReceiveSignalCWNoLossNoDisp (string OutFileNamePrefix2, double P_0, double z, double gamma, double N_ASE, double NF)
double GetNormalizationFactor ()
 For debugging purposes only.
void SetNormalizationFactor (double Value)

Private Member Functions

void ReceiveNoiseFreeSignalAndRecoverClock (void)
void PrepareToComputeKLModes (void)
void GetReducedNoiseFreeSigAndDiagonalizeCovMatrix (void)
void ComputeTimeIndependentPartOfFilterMatrix (void)
void ComputeKLModes (int TimeIndex)
void ComputePDFAtTimeValue (int TimeIndex)
void ComputePDFAtTimeValueFourierTransform (int TimeIndex)
 Not implemented yet as it seems we don't need it.
double ComputePDFValueSteepestDescent (int TimeIndex, int CurrentIndex)
double EvaluateGaussianApproximation (double SaddlePoint)
void WriteFilePDFs (void)
void WriteFileEye (void)
void ComputeAveragePDFs (void)
void ComputeMinimumBERAndDecisionThreshold (void)
void ComputeMomentsInEachBit (void)
void ComputeEye (void)
void SymmetricEig (double **Matrix, double *EigValue, double **EigVector, int Dim)
void PrepareSymmetricEig (void)
 Called once to allocate memory for work array for SymmetricEig.
bool TestEigDecomposition (double **Matrix, double *EigValue, double **EigVector, int Dim)
double ReducedFrequency (int k)
void WriteFileSquareMatrix (double **A, int dim, string OutFileName, double NormalizationFactor)
void WriteFileVector (double *V, int dim, string OutFileName, double NormalizationFactor)
void WriteFilePairVectors (double *x, double *y, int dim, string OutFileName, double xNormalizationFactor, double yNormalizationFactor)
void WriteFileComplexMatrix (cplx **A, int dim, string RealOutFileName, string ImagOutFileName, double NormalizationFactor)
void WriteFilePDFTimeSlices (string OutFileName)
void WriteFileGSLFunction (double CurrentValue, double s_min, double s_max, int NumPts, string OutFileName)
void InitializeGSL_FunctionToDerivativePsi (void)
double FindRootInterval (double &LowerBound, double &UpperBound)

Private Attributes

string Job
string OutFileNamePrefix
typeIntegrationMethod TypeIntegrationMethod
bool ReadInSignalAndCovMatrixFlag
string SignalAndCovMatrixDir
string SignalAndCovMatrixJob
double SetOSNRdB
double B_OSA
int DebugLevel
int DemuxChannArrayIndex
NoiseCovarianceoNoiseCovariance
OptSignalSignal
fftMatrices ReceiverReducedNoiseFreeSignal
double * ReducedNoiseFreeSignalRealVector
RanNumGenRNG
OptSignalDemuxedNoiseFreeSignal
OptFilterTunableOptFilterForNoiseFreeSignal
OptDemuxerOptDemuxerForNoiseFreeSignal
PhotodetectorPhotodetectorForNoiseFreeSignal
ElecFilterElecFilterForNoiseFreeSignal
ElecSignalStatElecSignalStatForNoiseFreeSignal
OptSignalOptFilterTransferFunction
PhotodetectorElecFilterTransferFunction
OptFilterTunableOptFilterForTransferFunction
ElecFilterElecFilterForTransferFunction
double DeltaFreq
double TimeWindow
double ReducedDeltaTime
double ReducedFreqWindow
double ** CovarianceMatrix
typeOutput TypeOutput
int NumBitsToPlot
int NumBitsBetweenSlices
 The number of bits between slices for TypeOutput == PDF.
int NumSlicesPerBit
 The number of slices per bit for TypeOutput == EYE.
double TimeBetweenSlices
bool ReadInClockRecoveryTimeFlag
double ClockRecoveryTime
 ClockRecoveryTime.
double ClockRecoveryCurrent
int NumTimeSlices
double * TimeSlices
 Array of size NumTimeSlices to hold the times of the time slices.
double MinCurrent
 Minimum value of current in the discrete pdfs and eye (Volts).
double MaxCurrent
 Maximum value of current in the discrete pdfs and eye (Volts).
int NumPointsCurrent
double DeltaCurrent
double * CurrentVector
double * ActiveCurrentValuePtr
 Pointer to the active (current) element of the array CurrentVector.
int CovMatrixDim
int CovMatrixFirstIndex
int CovMatrixLastIndex
double NormalizationFactor
double LowerPole
double UpperPole
double DecisionThreshold
double BitErrorRatio
int LengthSymmetricEigWork
double * SymmetricEigWork
double * CovarianceEvalues
 Array to store eigenvalues of CovarianceMatrix.
double ** CovarianceEvectors
double * CovarianceEvectorsStorageVec
 Actual array used to store eigenvectors of CovarianceMatrix.
cplx ** FilterMatrixTimeIndependent
 Complex matrix of size CovMatrixDim x CovMatrixDim.
cplxFilterMatrixTimeIndependentStorageVec
 Actual array used to store FilterMatrixTimeIndependent.
double ** FilterMatrix
 Real matrix of size 2*CovMatrixDim x 2*CovMatrixDim.
double * FilterMatrixStorageVec
 Actual array used to store FilterMatrix.
double ** HMatrix
 The matrix H in (A.3.1g) of Ron Holzloehner's thesis.
double * HMatrixStorageVec
 Actual array used to store HMatrix.
double ** VMatrix
 The matrix V in (A.3.1f) of Ron Holzloehner's thesis.
double * VMatrixStorageVec
 Actual array used to store VMatrix.
double ** WorkMatrix
 Temporary storage used in ComputeKLModes().
double * WorkMatrixStorageVec
 Actual array used to store TempMatrix.
double ** TestEigMatrix
 Temporary storage used in TestEigDecomposition.
double * TestEigMatrixStorageVec
 Actual array used to store TestEigMatrix.
double * LambdaVec
 The vector Lambda of (A.3.1b) in Ron's thesis.
double * LambdaQSqVec
 The vector whose kk entry is Lambda[kk]QSq[kk].
double * WorkVec
 WorkVec has size 2*CovMatrixDim.
gsl_function * GSL_Function
int RootFinderMaxIterations
double MinNegLambda
struct
ChiSquareReceiverParameters
Parameters
double ** PDFTimeSlices
double * PDFTimeSlicesStorageVec
 Actual array used to store PDFTimeSlices.
double * AveragePDFZeros
 Array to store average PDF of the zeros.
double * AveragePDFOnes
 Array to store average PDF of the ones.
double * PowerInSlice
 Used in ComputeAveragePDFs.
int * BitString
 Used in ComputeAveragePDFs.
double ** EyeMatrix
double * EyeMatrixStorageVec
 Actual array used to store EyeMatrix.
double * BER
 Array to store BER as function of Decision threshold.
double * MomentsIntegrand
double * MeanCurrent
double * StandardDeviationCurrent

Detailed Description

Given a noise free signal, covariance matrix and receive filters this class computes the PDFs of the current in each bit and the bit-error ratio

This code was written and documented by John Zweck, June 2004 Please report all bugs to zweck@math.umbc.edu

The code is based on the receiver model in Ronald Holzloehner's thesis. However, rather than computing the inverse Fourier transform of the characteristic function of the pdf in each bit using a DFT, we use the method of steepest descent along the same lines as in the paper of Forestieri that is referenced in Ron's thesis. Actually Forestieri explains how to compute the BER, which is a different problem from that of computing the PDFs. I adapted Forestieri's method to compute the PDFs. I have handwritten notes explaining the theory available upon request.

Currently, the noise-free signal and the covariance matrix must be of SCALAR rather than VECTOR type, i.e. we don't have polarization effects yet. (That's the next step.)

In addition, if you are doing WDM simulations I recommend using EvenlySpacedChannels = 1 in the Signal.in file. The receiver will receive the channel at the center frequency. In general it will receive the channel with ChannelPhysicalIndex = 0, and it assumed that this channel is at the center frequency.

To use the class you must also use an instance of the NoiseCovariance class, to produce a noise-free signal and a noise covariance matrix with either AWGN or coloured noise.

The following code fragments should be used in your application code:

-NoiseCovariance * NoiseCov;

-NoiseCov = new NoiseCovariance(InDir + "NoiseCovariance.in",Job,Signal);

-ChiSquareReceiver * ChiSqRx;

-ChiSqRx = new ChiSquareReceiver("ChiSquareReceiver.in",NoiseCov);

-Calls to propagate noise covariance matrix and/or noise-free signal through system go here

-string Suffix = "";

-NoiseCov->WriteFileNoiseFreeSignalAndCovarianceMatrix(Suffix);

-ChiSqRx->ReceiveSignal(Suffix);

-cout << "OSNR [dB] = " << ChiSqRx->GetOSNR_dB(B_OSA) << endl; -cout << "BER = " << ChiSqRx->GetBitErrorRatio() << endl; -cout << "Decision Threshold [mV] = " << ChiSqRx->GetDecisionThresholdmV() << endl;

-ChiSqRx->~ChiSquareReceiver(); -NoiseCov->~NoiseCovariance();

You can use the receiver in a for loop, say with different realizations of polarization effects, or different amounts of noise, or different receiver filters etc. Just make the changes you need to the system at the start of the for loop, change the Suffix string if you like and then call ChiSqRx->ReceiveSignal(Suffix).

Here is an explanation of the input parameter file ChiSquareReceiver.in together with a discussion of the capabilities of the class:

TypeOutput:

ReadInSignalAndCovMatrixFlag:

SetOSNRdB:

NumBitsToPlot:

NumBitsBetweenSlices:

-The number of bits between slices for TypeOutput == PDF

NumSlicesPerBit:

-The number of slices per bit for TypeOutput == EYE

MinCurrent:

MaxCurrent:

NumPointsCurrent:

ReadInClockRecoveryTimeFlag:

DebugLevel:

Finally, what tests are in the code to ensure it is working correctly.

Future improvements:


Constructor & Destructor Documentation

ChiSquareReceiver::ChiSquareReceiver ( string  InFileName,
NoiseCovariance oNoiseCovariance2 
)

Constructor.

  • InFileName is name of input parameter file
  • oNoiseCovariance2 is NoiseCovariance class that must be passed to this class, which contains data for NoiseFreeSignal (aka Signal) and Covariance Matrix of noise. There are methods in NoiseCovariance class that allow one to easily obtain a diagonal noise covariance matrix from an OSNR value, noise spectral density, or AWGN noise propagation model.

References ChiSquareReceiverParameters::ActiveCurrentValue, AveragePDFOnes, AveragePDFZeros, B_OSA, BER, ClockRecoveryTime, CovarianceEvalues, CovarianceEvectors, CovarianceEvectorsStorageVec, CovarianceMatrix, ChiSquareReceiverParameters::CovMatrixDim, CovMatrixDim, CovMatrixFirstIndex, CovMatrixLastIndex, CurrentVector, DebugLevel, DeltaCurrent, DeltaFreq, DemuxedNoiseFreeSignal, Photodetector::DetectOptSignal(), ElecFilterForNoiseFreeSignal, ElecFilterForTransferFunction, ElecFilterTransferFunction, ElecSignalStatForNoiseFreeSignal, EYE, EyeMatrix, EyeMatrixStorageVec, FilterMatrix, FilterMatrixStorageVec, FilterMatrixTimeIndependent, FilterMatrixTimeIndependentStorageVec, OptSignal::GetBitLength(), NoiseCovariance::GetCovMatrixDim(), NoiseCovariance::GetCovMatrixFirstIndex(), NoiseCovariance::GetCovMatrixLastIndex(), OptSignal::GetDeltaFreq(), NoiseCovariance::GetJobName(), OptSignal::GetStringLength(), OptSignal::GetTimeWindow(), HMatrix, HMatrixStorageVec, InitializeGSL_FunctionToDerivativePsi(), Job, ChiSquareReceiverParameters::LambdaQSqVec, LambdaQSqVec, ChiSquareReceiverParameters::LambdaVec, LambdaVec, LogFile, LogFileSeparator(), LOWER_AND_UPPER, LOWER_ONLY, LowerPole, MANDATORY, MaxCurrent, MeanCurrent, MinCurrent, MomentsIntegrand, NO_BOUNDS, NumBitsBetweenSlices, NumBitsToPlot, NumPointsCurrent, NumSlicesPerBit, NumTimeSlices, oNoiseCovariance, OptDemuxerForNoiseFreeSignal, OptFilterTransferFunction, OPTIONAL_NO_WARNING, Parameters, PDFS, PDFTimeSlices, PDFTimeSlicesStorageVec, PhotodetectorForNoiseFreeSignal, PowerInSlice, PrepareSymmetricEig(), ReadDouble(), ReadInClockRecoveryTimeFlag, ReadInSignalAndCovMatrixFlag, ReadInt(), ReadString(), ReducedDeltaTime, ReducedFreqWindow, ReducedNoiseFreeSignalRealVector, OptSignal::RNG, RNG, SetOSNRdB, NoiseCovariance::Signal, Signal, SignalAndCovMatrixDir, SignalAndCovMatrixJob, StandardDeviationCurrent, TestEigMatrix, TestEigMatrixStorageVec, TimeBetweenSlices, TimeSlices, TimeWindow, TunableOptFilterForNoiseFreeSignal, TunableOptFilterForTransferFunction, TypeIntegrationMethod, TypeOutput, UpperPole, VMatrix, VMatrixStorageVec, WorkMatrix, WorkMatrixStorageVec, and WorkVec.

ChiSquareReceiver::~ChiSquareReceiver ( void   ) 

Member Function Documentation

void ChiSquareReceiver::ComputeAveragePDFs ( void   )  [private]

Computes the average PDFs of the ZEROs and ONEs and stores results in arrays ChiSquareReceiver::AveragePDFZeros and ChiSquareReceiver::AveragePDFOnes

This method identifies which time slices are ZEROs and which are ONEs by choosing an optimal bit shift which maximizes the correlation between the BitString vector and the vector containing the electrical current at each time in the vector TimeSlices. This has only been debugged when the channel is at the center frequency (in which case there is not much to do!)

References AveragePDFOnes, AveragePDFZeros, DemuxedNoiseFreeSignal, BitString::GetBit(), OptSignal::GetDeltaTime(), Photodetector::GetQtPoints(), NumBitsBetweenSlices, NumBitsToPlot, NumPointsCurrent, NumTimeSlices, OptSignal::oBitString, PDFTimeSlices, PhotodetectorForNoiseFreeSignal, PowerInSlice, and TimeSlices.

Referenced by WriteFilePDFs().

void ChiSquareReceiver::ComputeEye ( void   )  [private]

Computes EyeMatrix, which stores eye for one bit. Use matlab to get a double eye.

References EyeMatrix, OptSignal::GetBitLength(), MaxCurrent, MinCurrent, NormalizationFactor, NumBitsToPlot, NumPointsCurrent, NumSlicesPerBit, NumTimeSlices, PDFTimeSlices, and Signal.

Referenced by WriteFileEye().

void ChiSquareReceiver::ComputeGaussianPDFsAndBER ( void   ) 
void ChiSquareReceiver::ComputeKLModes ( int  TimeIndex  )  [private]
void ChiSquareReceiver::ComputeMinimumBERAndDecisionThreshold ( void   )  [private]

Computes the decision threshold that minimizes the bit-error ratio together with the corresponding BER using the average PDFs of the marks and spaces.

References AveragePDFOnes, AveragePDFZeros, BER, BitErrorRatio, CurrentVector, DebugLevel, DecisionThreshold, max(), NormalizationFactor, NumPointsCurrent, OutFileNamePrefix, Quadrature(), and WriteFilePairVectors().

Referenced by WriteFilePDFs().

void ChiSquareReceiver::ComputeMomentsInEachBit ( void   )  [private]
void ChiSquareReceiver::ComputePDFAtTimeValue ( int  TimeIndex  )  [private]
void ChiSquareReceiver::ComputePDFAtTimeValueFourierTransform ( int  TimeIndex  )  [private]

Not implemented yet as it seems we don't need it.

Referenced by ComputePDFAtTimeValue().

double ChiSquareReceiver::ComputePDFValueSteepestDescent ( int  TimeIndex,
int  CurrentIndex 
) [private]

cout << "vv,LowerCount,UpperCount,LowerBoundValue,UpperBoundValue = " << CurrentIndex << " " << LowerCount << " " << UpperCount << " " << LowerBoundValue << " " << UpperBoundValue << endl;

References ChiSquareReceiverParameters::ActiveCurrentValue, CurrentVector, DebugLevel, EvaluateGaussianApproximation(), FindRootInterval(), GSL_Function, LowerPole, MinNegLambda, Parameters, STEEPEST_DESCENT, TypeIntegrationMethod, and UpperPole.

Referenced by ComputePDFAtTimeValue().

void ChiSquareReceiver::ComputeTimeIndependentPartOfFilterMatrix ( void   )  [private]
double ChiSquareReceiver::EvaluateGaussianApproximation ( double  SaddlePoint  )  [private]
double ChiSquareReceiver::FindRootInterval ( double &  LowerBound,
double &  UpperBound 
) [private]
double ChiSquareReceiver::GetBitErrorRatio ( void   )  [inline]

References BitErrorRatio.

double ChiSquareReceiver::GetDecisionThresholdmV ( void   )  [inline]
double ChiSquareReceiver::GetNormalizationFactor (  )  [inline]

For debugging purposes only.

References NormalizationFactor.

double ChiSquareReceiver::GetOSNR_dB ( double  B_OSA  ) 
void ChiSquareReceiver::GetReducedNoiseFreeSigAndDiagonalizeCovMatrix ( void   )  [private]
void ChiSquareReceiver::InitializeGSL_FunctionToDerivativePsi ( void   )  [private]

References GSL_Function, and Parameters.

Referenced by ChiSquareReceiver().

void ChiSquareReceiver::PrepareSymmetricEig ( void   )  [private]

Called once to allocate memory for work array for SymmetricEig.

References CovMatrixDim, F77NAME, ilaenv(), LengthSymmetricEigWork, max(), and SymmetricEigWork.

Referenced by ChiSquareReceiver().

void ChiSquareReceiver::PrepareToComputeKLModes ( void   )  [private]
void ChiSquareReceiver::ReceiveNoiseFreeSignalAndRecoverClock ( void   )  [private]
void ChiSquareReceiver::ReceiveSignal ( string  OutFileNamePrefix2  ) 

Call this method each time you want to receive the signal.

  • For now code only works to receive channel that is at center freq (at least in case have evenly spaced freqs)
  • OutFileNamePrefix2 will be prepended to all output files generated by a call to this method.

You can call this method multiple times during the course of a simulation with different data in oNoiseCovariance2

References ComputeKLModes(), ComputePDFAtTimeValue(), CurrentVector, DebugLevel, DeltaCurrent, DemuxChannArrayIndex, EYE, OptSignal::GetCenterFreq(), OptSignal::GetChannelArrayIndex(), OptSignal::GetFrequency(), Job, MinCurrent, NormalizationFactor, NumPointsCurrent, NumTimeSlices, oNoiseCovariance, OutFileNamePrefix, PDFS, PrepareToComputeKLModes(), NoiseCovariance::ReadFileNoiseFreeSignalAndCovarianceMatrix(), ReadInSignalAndCovMatrixFlag, ReceiveNoiseFreeSignalAndRecoverClock(), Signal, SignalAndCovMatrixJob, TypeOutput, WriteFileEye(), and WriteFilePDFs().

void ChiSquareReceiver::ReceiveSignalCWNoLossNoDisp ( string  OutFileNamePrefix2,
double  P_0,
double  z,
double  gamma,
double  N_ASE,
double  NF 
)

This method uses an analytic formula for the characteristic function of the pdf of the current in the case of a CW signal propagated through a fiber with no loss and no dispersion. It is included in the code for debugging purposes. The formula was derived by J.Z. based on work of Hui and others.

References ComputePDFAtTimeValue(), CovMatrixDim, CurrentVector, DebugLevel, DeltaCurrent, DemuxChannArrayIndex, EYE, OptSignal::GetChannelArrayIndex(), OptSignal::GetDeltaFreq(), Job, LambdaQSqVec, LambdaVec, MinCurrent, NormalizationFactor, NumPointsCurrent, NumTimeSlices, OutFileNamePrefix, PDFS, PrepareToComputeKLModes(), ReceiveNoiseFreeSignalAndRecoverClock(), Signal, sq(), sqrt(), TypeOutput, WriteFileEye(), WriteFilePDFs(), and WriteFileVector().

double ChiSquareReceiver::ReducedFrequency ( int  k  )  [inline, private]

The k-th ReducedFrequency in Hz. Goes from -ReducedFreqWindow/2 to ReducedFreqWindow/2 - DeltaFreq

References CovMatrixFirstIndex, and DeltaFreq.

void ChiSquareReceiver::SetElecFilterBandwidth ( double  ValueHz  ) 

Sets the electrical filter f_3dB bandwidth. Useful in for loops Call before calling ChiSquareReceiver::ReceiveSignal

References ElecFilterForNoiseFreeSignal, ElecFilterForTransferFunction, and ElecFilter::Set_f_3dB_ElecFilter().

void ChiSquareReceiver::SetNormalizationFactor ( double  Value  )  [inline]

References NormalizationFactor.

void ChiSquareReceiver::SetOptFilterBandwidth ( double  ValueHz  ) 

Sets the optical filter FWHM bandwidth. Useful in for loops Call before calling ChiSquareReceiver::ReceiveSignal

References OptFilter::SetFreqFWHM_OptFilter(), TunableOptFilterForNoiseFreeSignal, and TunableOptFilterForTransferFunction.

void ChiSquareReceiver::SetOSNR ( double  Value  ) 

Sets the required OSNR for AWGN noise. Call before calling ChiSquareReceiver::ReceiveSignal Can be used in for loops.

Resets OSNRdB to Value. Must have set SetOSNRdB to be nonzero in input file, so B_OSA is read in

References SetOSNRdB.

void ChiSquareReceiver::SymmetricEig ( double **  Matrix,
double *  EigValue,
double **  EigVector,
int  Dim 
) [private]

Interface to LAPACK subroutine DSYEV which computes the eigenvalues and vectors of a real symmetric Dim x Dim matrix, Matrix

We assume that Matrix is symmetric

Matrix = EigVector*Diag(EigValue)*EigVector^T

The columns of EigVector are the eigenvectors of Matrix The eigenvalues are in ascending order

So in Matlab's notation: [EigVector,EigValue] = eig(Matrix)

References CopyMatrix(), dsyev(), F77NAME, LengthSymmetricEigWork, SymmetricEigWork, and TransposeMatrix().

Referenced by ComputeKLModes(), and GetReducedNoiseFreeSigAndDiagonalizeCovMatrix().

bool ChiSquareReceiver::TestEigDecomposition ( double **  Matrix,
double *  EigValue,
double **  EigVector,
int  Dim 
) [private]

If SymmetricEig computes the decomposition U^T A U = Diag, U^T U = I then this method checks how well these two equations hold using InfNormMatrix. If InfNorm(U^T A U - Diag) relative to InfNorm(A) or InfNorm(U^T U - Id) relative to InfNorm(A) exceeds 1e-10 then eigen decomposition fails test. Returns 1 if passes test, 0 if fails test.

References AddToPrincipalDiag(), AddVectorToPrincipalDiag(), CovMatrixDim, DebugLevel, DenseMatrixProduct(), DenseMatrixSimilarityProduct(), InfNormMatrix(), TestEigMatrix, and WorkMatrix.

Referenced by ComputeKLModes(), and GetReducedNoiseFreeSigAndDiagonalizeCovMatrix().

void ChiSquareReceiver::WriteFileComplexMatrix ( cplx **  A,
int  dim,
string  RealOutFileName,
string  ImagOutFileName,
double  NormalizationFactor 
) [private]
void ChiSquareReceiver::WriteFileEye ( void   )  [private]

A one-bit eye is written to a file so that an image of the output matrix looks like the eye. Signal::BitLength, MinCurrent, and MaxCurrent are hidden in columns 1,2,3 of the top row.

References ComputeEye(), EyeMatrix, NumPointsCurrent, NumSlicesPerBit, OutFileNamePrefix, and WriteFilePDFTimeSlices().

Referenced by ReceiveSignal(), and ReceiveSignalCWNoLossNoDisp().

void ChiSquareReceiver::WriteFileGSLFunction ( double  CurrentValue,
double  s_min,
double  s_max,
int  NumPts,
string  OutFileName 
) [private]
void ChiSquareReceiver::WriteFilePairVectors ( double *  x,
double *  y,
int  dim,
string  OutFileName,
double  xNormalizationFactor,
double  yNormalizationFactor 
) [private]
void ChiSquareReceiver::WriteFilePDFs ( void   )  [private]
void ChiSquareReceiver::WriteFilePDFTimeSlices ( string  OutFileName  )  [private]

The columns of the output file are the pdfs at the different TimeSlices So the output matrix is NumPointsCurrent x NumTimeSlices

References CurrentVector, NormalizationFactor, NumPointsCurrent, NumTimeSlices, and PDFTimeSlices.

Referenced by WriteFileEye(), and WriteFilePDFs().

void ChiSquareReceiver::WriteFileSquareMatrix ( double **  A,
int  dim,
string  OutFileName,
double  NormalizationFactor 
) [private]
void ChiSquareReceiver::WriteFileVector ( double *  V,
int  dim,
string  OutFileName,
double  NormalizationFactor 
) [private]

Member Data Documentation

Pointer to the active (current) element of the array CurrentVector.

Used by friend functions

double ChiSquareReceiver::B_OSA [private]

Noise equivalent bandwidth of the optical spectrum analyzer used to set the OSNR for AWGN noise

See also:
SetOSNRdB

Referenced by ChiSquareReceiver(), and GetReducedNoiseFreeSigAndDiagonalizeCovMatrix().

double* ChiSquareReceiver::BER [private]

Array to store BER as function of Decision threshold.

Referenced by ChiSquareReceiver(), ComputeMinimumBERAndDecisionThreshold(), and ~ChiSquareReceiver().

Used in ComputeAveragePDFs.

The ClockCurrent from ElecSignalStat::GetClockCurrent for the noise free signal

Referenced by ReceiveNoiseFreeSignalAndRecoverClock().

Array to store eigenvalues of CovarianceMatrix.

Referenced by ChiSquareReceiver(), GetReducedNoiseFreeSigAndDiagonalizeCovMatrix(), and ~ChiSquareReceiver().

Real matrix of eigenvectors of CovarianceMatrix with size 2*CovMatrixDim x 2*CovMatrixDim

Referenced by ChiSquareReceiver(), ComputeKLModes(), GetReducedNoiseFreeSigAndDiagonalizeCovMatrix(), and ~ChiSquareReceiver().

Actual array used to store eigenvectors of CovarianceMatrix.

See also:
double ** NoiseCovariance::CovarianceEvectors

Referenced by ChiSquareReceiver(), and ~ChiSquareReceiver().

Real covariance matrix of size 2*NoiseCovarianceCovMatrixDim x 2*NoiseCovarianceCovMatrixDim

This is the script K in Ron's papers/thesis

Referenced by ChiSquareReceiver(), GetReducedNoiseFreeSigAndDiagonalizeCovMatrix(), and ~ChiSquareReceiver().

double ChiSquareReceiver::DeltaFreq [private]
double** ChiSquareReceiver::EyeMatrix [private]

Matrix to store the eye diagram, EyeMatrix[tt][vv] is of size NumSlicesPerBit x NumPointsCurrent

To help with plotting, we hide Signal::BitLength, MinCurrent, and MaxCurrent in this matrix

See also:
ChiSquareReceiver::WriteFileEye

Referenced by ChiSquareReceiver(), ComputeEye(), WriteFileEye(), and ~ChiSquareReceiver().

Actual array used to store EyeMatrix.

Referenced by ChiSquareReceiver(), and ~ChiSquareReceiver().

double** ChiSquareReceiver::FilterMatrix [private]

Real matrix of size 2*CovMatrixDim x 2*CovMatrixDim.

This matrix is { W} (script W) defined in (4.6.5b) of Ron Holzloehner's thesis

Referenced by ChiSquareReceiver(), ComputeKLModes(), and ~ChiSquareReceiver().

Actual array used to store FilterMatrix.

Referenced by ChiSquareReceiver(), and ~ChiSquareReceiver().

Complex matrix of size CovMatrixDim x CovMatrixDim.

Referenced by ChiSquareReceiver(), ComputeKLModes(), ComputeTimeIndependentPartOfFilterMatrix(), and ~ChiSquareReceiver().

Actual array used to store FilterMatrixTimeIndependent.

Referenced by ChiSquareReceiver(), and ~ChiSquareReceiver().

gsl_function* ChiSquareReceiver::GSL_Function [private]
double** ChiSquareReceiver::HMatrix [private]

The matrix H in (A.3.1g) of Ron Holzloehner's thesis.

Referenced by ChiSquareReceiver(), ComputeKLModes(), and ~ChiSquareReceiver().

Actual array used to store HMatrix.

Referenced by ChiSquareReceiver(), and ~ChiSquareReceiver().

string ChiSquareReceiver::Job [private]

The vector whose kk entry is Lambda[kk]QSq[kk].

Referenced by ChiSquareReceiver(), ComputeKLModes(), ReceiveSignalCWNoLossNoDisp(), and ~ChiSquareReceiver().

double* ChiSquareReceiver::LambdaVec [private]

The vector Lambda of (A.3.1b) in Ron's thesis.

Referenced by ChiSquareReceiver(), ComputeKLModes(), ComputePDFAtTimeValue(), ReceiveSignalCWNoLossNoDisp(), and ~ChiSquareReceiver().

double ChiSquareReceiver::LowerPole [private]

Maximum value of current in the discrete pdfs and eye (Volts).

Referenced by ChiSquareReceiver(), and ComputeEye().

double* ChiSquareReceiver::MeanCurrent [private]

Minimum value of current in the discrete pdfs and eye (Volts).

Referenced by ChiSquareReceiver(), ComputeEye(), ReceiveSignal(), and ReceiveSignalCWNoLossNoDisp().

The number of bits between slices for TypeOutput == PDF.

Referenced by ChiSquareReceiver(), ComputeAveragePDFs(), and ComputeGaussianPDFsAndBER().

The number of bits that contribute to the pdfs or eyes If this input parameter is set to 0 (default) then NumBitsToPlot is initialized to Signal->GetStringLength();

Referenced by ChiSquareReceiver(), ComputeAveragePDFs(), ComputeEye(), and ComputeGaussianPDFsAndBER().

The number of slices per bit for TypeOutput == EYE.

Referenced by ChiSquareReceiver(), ComputeEye(), WriteFileEye(), and ~ChiSquareReceiver().

Actual array used to store PDFTimeSlices.

Referenced by ChiSquareReceiver(), and ~ChiSquareReceiver().

Used in ComputeAveragePDFs.

Referenced by ChiSquareReceiver(), ComputeAveragePDFs(), and ~ChiSquareReceiver().

If value = 1 then read in ClockRecoveryTime from input parameter file. Otherwise, class computes ClockRecoveryTime automatically in method ChiSquareReceiver::ReceiveNoiseFreeSignalAndRecoverClock()

Referenced by ChiSquareReceiver(), and ReceiveNoiseFreeSignalAndRecoverClock().

Flag to indicate whether or not to read in the ReducedNoiseFreeSignal and CovarianceMatrix from files that were previously written by NoiseCovariance::WriteFileReducedNoiseFreeSignalAndCovarianceMatrix()

Referenced by ChiSquareReceiver(), GetReducedNoiseFreeSigAndDiagonalizeCovMatrix(), and ReceiveSignal().

Referenced by ChiSquareReceiver().

Referenced by ChiSquareReceiver().

Referenced by FindRootInterval().

double ChiSquareReceiver::SetOSNRdB [private]

Input parameter. Default value = 0. If value is nonzero then resets CovarianceMatrix to be the multiple of the identity matrix that with the NoiseFreeSignal gives the OSNR whose value in dB is SetOSNRdB. Only works when NoiseCovariance::TypeNoiseMethod == AWGN.

Referenced by ChiSquareReceiver(), GetReducedNoiseFreeSigAndDiagonalizeCovMatrix(), and SetOSNR().

Directory name for the files containing ReducedNoiseFreeSignal and CovarianceMatrix

See also:
ReadInSignalAndCovMatrixFlag

Referenced by ChiSquareReceiver().

Job name prefix for the files containing ReducedNoiseFreeSignal and CovarianceMatrix

See also:
ReadInSignalAndCovMatrixFlag

Referenced by ChiSquareReceiver(), and ReceiveSignal().

Temporary storage used in TestEigDecomposition.

Referenced by ChiSquareReceiver(), TestEigDecomposition(), and ~ChiSquareReceiver().

Actual array used to store TestEigMatrix.

Referenced by ChiSquareReceiver(), and ~ChiSquareReceiver().

The time interval between the times of the pdfs or the time slices of the eye

Units = seconds

Default Values:

  • If TypeOutput = PDFS the default value is Signal->GetBitPeriod()
  • If TypeOutput = EYE the default value is Signal->GetDeltaTime()

Referenced by ChiSquareReceiver(), and ReceiveNoiseFreeSignalAndRecoverClock().

double* ChiSquareReceiver::TimeSlices [private]

Array of size NumTimeSlices to hold the times of the time slices.

Referenced by ChiSquareReceiver(), ComputeAveragePDFs(), ComputeKLModes(), ComputeMomentsInEachBit(), ReceiveNoiseFreeSignalAndRecoverClock(), and ~ChiSquareReceiver().

double ChiSquareReceiver::UpperPole [private]
double** ChiSquareReceiver::VMatrix [private]

The matrix V in (A.3.1f) of Ron Holzloehner's thesis.

Referenced by ChiSquareReceiver(), ComputeKLModes(), and ~ChiSquareReceiver().

Actual array used to store VMatrix.

Referenced by ChiSquareReceiver(), and ~ChiSquareReceiver().

double** ChiSquareReceiver::WorkMatrix [private]

Actual array used to store TempMatrix.

Referenced by ChiSquareReceiver(), and ~ChiSquareReceiver().

double* ChiSquareReceiver::WorkVec [private]

WorkVec has size 2*CovMatrixDim.

Referenced by ChiSquareReceiver(), ComputeKLModes(), and ~ChiSquareReceiver().


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