#include <ChiSquareReceiver.hh>
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 |
NoiseCovariance * | oNoiseCovariance |
OptSignal * | Signal |
fftMatrices | ReceiverReducedNoiseFreeSignal |
double * | ReducedNoiseFreeSignalRealVector |
RanNumGen * | RNG |
OptSignal * | DemuxedNoiseFreeSignal |
OptFilter * | TunableOptFilterForNoiseFreeSignal |
OptDemuxer * | OptDemuxerForNoiseFreeSignal |
Photodetector * | PhotodetectorForNoiseFreeSignal |
ElecFilter * | ElecFilterForNoiseFreeSignal |
ElecSignalStat * | ElecSignalStatForNoiseFreeSignal |
OptSignal * | OptFilterTransferFunction |
Photodetector * | ElecFilterTransferFunction |
OptFilter * | TunableOptFilterForTransferFunction |
ElecFilter * | ElecFilterForTransferFunction |
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. | |
cplx * | FilterMatrixTimeIndependentStorageVec |
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 |
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:
ChiSquareReceiver::ChiSquareReceiver | ( | string | InFileName, | |
NoiseCovariance * | oNoiseCovariance2 | |||
) |
Constructor.
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 | ) |
References AveragePDFOnes, AveragePDFZeros, BER, CovarianceEvalues, CovarianceEvectors, CovarianceEvectorsStorageVec, CovarianceMatrix, CovMatrixDim, CurrentVector, DemuxedNoiseFreeSignal, ElecFilterForNoiseFreeSignal, ElecFilterForTransferFunction, ElecFilterTransferFunction, ElecSignalStatForNoiseFreeSignal, EYE, EyeMatrix, EyeMatrixStorageVec, FilterMatrix, FilterMatrixStorageVec, FilterMatrixTimeIndependent, FilterMatrixTimeIndependentStorageVec, GSL_Function, HMatrix, HMatrixStorageVec, LambdaQSqVec, ChiSquareReceiverParameters::LambdaQSqVec, LambdaVec, ChiSquareReceiverParameters::LambdaVec, MeanCurrent, MomentsIntegrand, NumSlicesPerBit, NumTimeSlices, oNoiseCovariance, OptDemuxerForNoiseFreeSignal, OptFilterTransferFunction, Parameters, PDFS, PDFTimeSlices, PDFTimeSlicesStorageVec, PhotodetectorForNoiseFreeSignal, PowerInSlice, ReducedNoiseFreeSignalRealVector, RNG, Signal, StandardDeviationCurrent, SymmetricEigWork, TestEigMatrix, TestEigMatrixStorageVec, TimeSlices, TunableOptFilterForNoiseFreeSignal, TunableOptFilterForTransferFunction, TypeOutput, VMatrix, VMatrixStorageVec, WorkMatrix, WorkMatrixStorageVec, WorkVec, ElecSignalStat::~ElecSignalStat(), OptDemuxer::~OptDemuxer(), OptSignal::~OptSignal(), Photodetector::~Photodetector(), and RanNumGen::~RanNumGen().
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 | ) |
References BitErrorRatio, CurrentVector, DecisionThreshold, DemuxedNoiseFreeSignal, BitString::GetBit(), Job, max(), MeanCurrent, NormalizationFactor, NumBitsBetweenSlices, NumBitsToPlot, NumPointsCurrent, NumTimeSlices, OptSignal::oBitString, pi, Quadrature(), sq(), sqrt(), and StandardDeviationCurrent.
void ChiSquareReceiver::ComputeKLModes | ( | int | TimeIndex | ) | [private] |
References CovarianceEvectors, CovMatrixDim, DebugLevel, DenseMatrixProduct(), DenseMatrixSimilarityProduct(), DenseMatrixVectorProduct(), exp_jc_real(), FilterMatrix, FilterMatrixTimeIndependent, HMatrix, InnerProduct(), Job, LambdaQSqVec, LambdaVec, NormalizationFactor, pi, ReducedNoiseFreeSignalRealVector, sq(), SymmetricEig(), SymmetrizeMatrix(), TestEigDecomposition(), TimeSlices, TimeWindow, TransposeMatrix(), VMatrix, WorkMatrix, WorkVec, WriteFileSquareMatrix(), and WriteFileVector().
Referenced by ReceiveSignal().
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] |
Computes the mean and standard deviation of the current in each bit.
References CurrentVector, MeanCurrent, MomentsIntegrand, NormalizationFactor, NumPointsCurrent, NumTimeSlices, OutFileNamePrefix, PDFTimeSlices, Quadrature(), sq(), sqrt(), StandardDeviationCurrent, TimeSlices, and WriteFilePairVectors().
Referenced by WriteFilePDFs().
void ChiSquareReceiver::ComputePDFAtTimeValue | ( | int | TimeIndex | ) | [private] |
cout << endl << "ChiSquareReceiver::ComputePDFAtTimeValue: TimeIndex = " << TimeIndex << endl;
References ComputePDFAtTimeValueFourierTransform(), ComputePDFValueSteepestDescent(), CovMatrixDim, CurrentVector, DebugLevel, FOURIER_TRANSFORM, LambdaVec, LowerPole, max(), MaxOfArray(), min(), MinNegLambda, MinOfArray(), NumPointsCurrent, PDFTimeSlices, Quadrature(), TypeIntegrationMethod, and UpperPole.
Referenced by ReceiveSignal(), and ReceiveSignalCWNoLossNoDisp().
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] |
Since N = Signal->GetQtPoints() >= CovMatrixDim we have -N/2 <= ii,jj <= N/2 - 1 and so -N+1 <= jj-ii <= N-1
Now ii,jj index physical frequencies Omega_ii = DeltaFreq*ii, Omega_jj = DeltaFreq*jj.
If abs(jj-ii)>= N/2 then abs(Omega_jj-Omega_ii) is large and we would want to have the electrical filter zero out this frequency entirely. So we don't want to wrap jj-ii
fft->index : [-N/2,N/2-1] -> [0,N-1]
References CovMatrixDim, CovMatrixFirstIndex, CovMatrixLastIndex, DebugLevel, ElecFilterForTransferFunction, ElecFilterTransferFunction, OptSignal::fft, Photodetector::fft, ElecFilter::FilterElecSignal(), FilterMatrixTimeIndependent, OptFilter::FilterOptSignal(), fftMatrices::fOptSignalX, fftPowerMatrices::fPowerSignal, Photodetector::GenerateImpulseCurrent(), OptSignal::GenerateImpulseSignal(), Photodetector::GetConvFactOptElecPhotod(), OptSignal::GetQtPoints(), cfftw::index(), Job, OptFilterTransferFunction, PhotodetectorForNoiseFreeSignal, OptSignal::sfftM, Photodetector::sfftPM, Signal, sq(), TunableOptFilterForTransferFunction, WriteFileComplexMatrix(), Photodetector::WriteFileFreqPower(), OptSignal::WriteFileFreqPower(), Photodetector::WriteFileTimePower(), and OptSignal::WriteFileTimePower().
Referenced by PrepareToComputeKLModes().
double ChiSquareReceiver::EvaluateGaussianApproximation | ( | double | SaddlePoint | ) | [private] |
References ChiSquareReceiverPsi(), ChiSquareReceiverSecondDerivativePsi(), NormalizationFactor, Parameters, pi, sq(), and sqrt().
Referenced by ComputePDFValueSteepestDescent(), and FindRootInterval().
double ChiSquareReceiver::FindRootInterval | ( | double & | LowerBound, | |
double & | UpperBound | |||
) | [private] |
References EvaluateGaussianApproximation(), GSL_Function, RootFinderMaxIterations, and TypeIntegrationMethod.
Referenced by ComputePDFValueSteepestDescent().
double ChiSquareReceiver::GetBitErrorRatio | ( | void | ) | [inline] |
References BitErrorRatio.
double ChiSquareReceiver::GetDecisionThresholdmV | ( | void | ) | [inline] |
References DecisionThreshold, and NormalizationFactor.
double ChiSquareReceiver::GetNormalizationFactor | ( | ) | [inline] |
For debugging purposes only.
References NormalizationFactor.
double ChiSquareReceiver::GetOSNR_dB | ( | double | B_OSA | ) |
void ChiSquareReceiver::GetReducedNoiseFreeSigAndDiagonalizeCovMatrix | ( | void | ) | [private] |
References B_OSA, CovarianceEvalues, CovarianceEvectors, CovarianceMatrix, CovMatrixDim, DebugLevel, DenseMatrixScale(), fftMatrices::fOptSignalX, NoiseCovariance::GetCovarianceMatrix(), NoiseCovariance::GetReducedNoiseFreeSignal(), NormalizationFactor, oNoiseCovariance, OutFileNamePrefix, ReadInSignalAndCovMatrixFlag, ReceiverReducedNoiseFreeSignal, ReducedNoiseFreeSignalRealVector, SetOSNRdB, sq(), sqrt(), SymmetricEig(), SymmetrizeMatrix(), TestEigDecomposition(), WriteFileSquareMatrix(), and WriteFileVector().
Referenced by PrepareToComputeKLModes().
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] |
References ComputeTimeIndependentPartOfFilterMatrix(), and GetReducedNoiseFreeSigAndDiagonalizeCovMatrix().
Referenced by ReceiveSignal(), and ReceiveSignalCWNoLossNoDisp().
void ChiSquareReceiver::ReceiveNoiseFreeSignalAndRecoverClock | ( | void | ) | [private] |
References ClockRecoveryCurrent, ClockRecoveryTime, ElecSignalStat::ComputePerformanceStatistics(), DebugLevel, DemuxChannArrayIndex, OptDemuxer::DemuxChannel(), Photodetector::DetectOptSignal(), ElecFilterForNoiseFreeSignal, ElecSignalStatForNoiseFreeSignal, EYE, ElecFilter::FilterElecSignal(), OptSignal::GetBitLength(), ElecSignalStat::GetClockCurrent(), ElecSignalStat::GetClockRecoveryTimeBeforeTimeShift(), NumTimeSlices, OptDemuxerForNoiseFreeSignal, OutFileNamePrefix, PhotodetectorForNoiseFreeSignal, ReadInClockRecoveryTimeFlag, Signal, TimeBetweenSlices, Photodetector::TimeShiftSignal(), TimeSlices, TimeWindow, TypeOutput, Photodetector::WriteFileFreqPower(), and Photodetector::WriteFileTimePower().
Referenced by ReceiveSignal(), and ReceiveSignalCWNoLossNoDisp().
void ChiSquareReceiver::ReceiveSignal | ( | string | OutFileNamePrefix2 | ) |
Call this method each time you want to receive the signal.
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] |
Referenced by ComputeTimeIndependentPartOfFilterMatrix().
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] |
References ChiSquareReceiverParameters::ActiveCurrentValue, GSL_Function, and Parameters.
void ChiSquareReceiver::WriteFilePairVectors | ( | double * | x, | |
double * | y, | |||
int | dim, | |||
string | OutFileName, | |||
double | xNormalizationFactor, | |||
double | yNormalizationFactor | |||
) | [private] |
Referenced by ComputeMinimumBERAndDecisionThreshold(), ComputeMomentsInEachBit(), and WriteFilePDFs().
void ChiSquareReceiver::WriteFilePDFs | ( | void | ) | [private] |
References AveragePDFOnes, AveragePDFZeros, ComputeAveragePDFs(), ComputeMinimumBERAndDecisionThreshold(), ComputeMomentsInEachBit(), CurrentVector, NormalizationFactor, NumPointsCurrent, OutFileNamePrefix, WriteFilePairVectors(), and WriteFilePDFTimeSlices().
Referenced by ReceiveSignal(), and ReceiveSignalCWNoLossNoDisp().
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] |
References WriteMatrix().
Referenced by ComputeKLModes(), and GetReducedNoiseFreeSigAndDiagonalizeCovMatrix().
void ChiSquareReceiver::WriteFileVector | ( | double * | V, | |
int | dim, | |||
string | OutFileName, | |||
double | NormalizationFactor | |||
) | [private] |
Referenced by ComputeKLModes(), GetReducedNoiseFreeSigAndDiagonalizeCovMatrix(), and ReceiveSignalCWNoLossNoDisp().
double* ChiSquareReceiver::ActiveCurrentValuePtr [private] |
Pointer to the active (current) element of the array CurrentVector.
Used by friend functions
double* ChiSquareReceiver::AveragePDFOnes [private] |
Array to store average PDF of the ones.
Referenced by ChiSquareReceiver(), ComputeAveragePDFs(), ComputeMinimumBERAndDecisionThreshold(), WriteFilePDFs(), and ~ChiSquareReceiver().
double* ChiSquareReceiver::AveragePDFZeros [private] |
Array to store average PDF of the zeros.
Referenced by ChiSquareReceiver(), ComputeAveragePDFs(), ComputeMinimumBERAndDecisionThreshold(), WriteFilePDFs(), and ~ChiSquareReceiver().
double ChiSquareReceiver::B_OSA [private] |
Noise equivalent bandwidth of the optical spectrum analyzer used to set the OSNR for AWGN noise
Referenced by ChiSquareReceiver(), and GetReducedNoiseFreeSigAndDiagonalizeCovMatrix().
double* ChiSquareReceiver::BER [private] |
Array to store BER as function of Decision threshold.
Referenced by ChiSquareReceiver(), ComputeMinimumBERAndDecisionThreshold(), and ~ChiSquareReceiver().
double ChiSquareReceiver::BitErrorRatio [private] |
Referenced by ComputeGaussianPDFsAndBER(), ComputeMinimumBERAndDecisionThreshold(), and GetBitErrorRatio().
int* ChiSquareReceiver::BitString [private] |
Used in ComputeAveragePDFs.
double ChiSquareReceiver::ClockRecoveryCurrent [private] |
The ClockCurrent from ElecSignalStat::GetClockCurrent for the noise free signal
Referenced by ReceiveNoiseFreeSignalAndRecoverClock().
double ChiSquareReceiver::ClockRecoveryTime [private] |
ClockRecoveryTime.
Referenced by ChiSquareReceiver(), and ReceiveNoiseFreeSignalAndRecoverClock().
double* ChiSquareReceiver::CovarianceEvalues [private] |
Array to store eigenvalues of CovarianceMatrix.
Referenced by ChiSquareReceiver(), GetReducedNoiseFreeSigAndDiagonalizeCovMatrix(), and ~ChiSquareReceiver().
double** ChiSquareReceiver::CovarianceEvectors [private] |
Real matrix of eigenvectors of CovarianceMatrix with size 2*CovMatrixDim x 2*CovMatrixDim
Referenced by ChiSquareReceiver(), ComputeKLModes(), GetReducedNoiseFreeSigAndDiagonalizeCovMatrix(), and ~ChiSquareReceiver().
double* ChiSquareReceiver::CovarianceEvectorsStorageVec [private] |
Actual array used to store eigenvectors of CovarianceMatrix.
Referenced by ChiSquareReceiver(), and ~ChiSquareReceiver().
double** ChiSquareReceiver::CovarianceMatrix [private] |
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().
int ChiSquareReceiver::CovMatrixDim [private] |
int ChiSquareReceiver::CovMatrixFirstIndex [private] |
Referenced by ChiSquareReceiver(), ComputeTimeIndependentPartOfFilterMatrix(), and ReducedFrequency().
int ChiSquareReceiver::CovMatrixLastIndex [private] |
Referenced by ChiSquareReceiver(), and ComputeTimeIndependentPartOfFilterMatrix().
double* ChiSquareReceiver::CurrentVector [private] |
Array of size NumPointsCurrent to store the discrete current values used in pdfs and eye
Referenced by ChiSquareReceiver(), ComputeGaussianPDFsAndBER(), ComputeMinimumBERAndDecisionThreshold(), ComputeMomentsInEachBit(), ComputePDFAtTimeValue(), ComputePDFValueSteepestDescent(), ReceiveSignal(), ReceiveSignalCWNoLossNoDisp(), WriteFilePDFs(), WriteFilePDFTimeSlices(), and ~ChiSquareReceiver().
int ChiSquareReceiver::DebugLevel [private] |
Higher means more output. Possible values 0,1,2,3 Default is 0, (no debugging output)
Referenced by ChiSquareReceiver(), ComputeKLModes(), ComputeMinimumBERAndDecisionThreshold(), ComputePDFAtTimeValue(), ComputePDFValueSteepestDescent(), ComputeTimeIndependentPartOfFilterMatrix(), GetReducedNoiseFreeSigAndDiagonalizeCovMatrix(), ReceiveNoiseFreeSignalAndRecoverClock(), ReceiveSignal(), ReceiveSignalCWNoLossNoDisp(), and TestEigDecomposition().
double ChiSquareReceiver::DecisionThreshold [private] |
Referenced by ComputeGaussianPDFsAndBER(), ComputeMinimumBERAndDecisionThreshold(), and GetDecisionThresholdmV().
double ChiSquareReceiver::DeltaCurrent [private] |
Referenced by ChiSquareReceiver(), ReceiveSignal(), and ReceiveSignalCWNoLossNoDisp().
double ChiSquareReceiver::DeltaFreq [private] |
Referenced by ChiSquareReceiver(), and ReducedFrequency().
int ChiSquareReceiver::DemuxChannArrayIndex [private] |
Referenced by ReceiveNoiseFreeSignalAndRecoverClock(), ReceiveSignal(), and ReceiveSignalCWNoLossNoDisp().
Referenced by ChiSquareReceiver(), ComputeAveragePDFs(), ComputeGaussianPDFsAndBER(), and ~ChiSquareReceiver().
Referenced by ChiSquareReceiver(), ComputeTimeIndependentPartOfFilterMatrix(), and ~ChiSquareReceiver().
Referenced by ChiSquareReceiver(), ReceiveNoiseFreeSignalAndRecoverClock(), and ~ChiSquareReceiver().
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
Referenced by ChiSquareReceiver(), ComputeEye(), WriteFileEye(), and ~ChiSquareReceiver().
double* ChiSquareReceiver::EyeMatrixStorageVec [private] |
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().
double* ChiSquareReceiver::FilterMatrixStorageVec [private] |
Actual array used to store FilterMatrix.
Referenced by ChiSquareReceiver(), and ~ChiSquareReceiver().
cplx** ChiSquareReceiver::FilterMatrixTimeIndependent [private] |
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().
double* ChiSquareReceiver::HMatrixStorageVec [private] |
Actual array used to store HMatrix.
Referenced by ChiSquareReceiver(), and ~ChiSquareReceiver().
string ChiSquareReceiver::Job [private] |
double* ChiSquareReceiver::LambdaQSqVec [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().
int ChiSquareReceiver::LengthSymmetricEigWork [private] |
Referenced by PrepareSymmetricEig(), and SymmetricEig().
double ChiSquareReceiver::LowerPole [private] |
Referenced by ChiSquareReceiver(), ComputePDFAtTimeValue(), and ComputePDFValueSteepestDescent().
double ChiSquareReceiver::MaxCurrent [private] |
Maximum value of current in the discrete pdfs and eye (Volts).
Referenced by ChiSquareReceiver(), and ComputeEye().
double* ChiSquareReceiver::MeanCurrent [private] |
Referenced by ChiSquareReceiver(), ComputeGaussianPDFsAndBER(), ComputeMomentsInEachBit(), and ~ChiSquareReceiver().
double ChiSquareReceiver::MinCurrent [private] |
Minimum value of current in the discrete pdfs and eye (Volts).
Referenced by ChiSquareReceiver(), ComputeEye(), ReceiveSignal(), and ReceiveSignalCWNoLossNoDisp().
double ChiSquareReceiver::MinNegLambda [private] |
Referenced by ComputePDFAtTimeValue(), and ComputePDFValueSteepestDescent().
double* ChiSquareReceiver::MomentsIntegrand [private] |
Referenced by ChiSquareReceiver(), ComputeMomentsInEachBit(), and ~ChiSquareReceiver().
double ChiSquareReceiver::NormalizationFactor [private] |
Referenced by ComputeEye(), ComputeGaussianPDFsAndBER(), ComputeKLModes(), ComputeMinimumBERAndDecisionThreshold(), ComputeMomentsInEachBit(), EvaluateGaussianApproximation(), GetDecisionThresholdmV(), GetNormalizationFactor(), GetReducedNoiseFreeSigAndDiagonalizeCovMatrix(), ReceiveSignal(), ReceiveSignalCWNoLossNoDisp(), SetNormalizationFactor(), WriteFilePDFs(), and WriteFilePDFTimeSlices().
int ChiSquareReceiver::NumBitsBetweenSlices [private] |
The number of bits between slices for TypeOutput == PDF.
Referenced by ChiSquareReceiver(), ComputeAveragePDFs(), and ComputeGaussianPDFsAndBER().
int ChiSquareReceiver::NumBitsToPlot [private] |
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().
int ChiSquareReceiver::NumPointsCurrent [private] |
Number of points for discretization of current in the discrete pdfs and eye
Referenced by ChiSquareReceiver(), ComputeAveragePDFs(), ComputeEye(), ComputeGaussianPDFsAndBER(), ComputeMinimumBERAndDecisionThreshold(), ComputeMomentsInEachBit(), ComputePDFAtTimeValue(), ReceiveSignal(), ReceiveSignalCWNoLossNoDisp(), WriteFileEye(), WriteFilePDFs(), and WriteFilePDFTimeSlices().
int ChiSquareReceiver::NumSlicesPerBit [private] |
The number of slices per bit for TypeOutput == EYE.
Referenced by ChiSquareReceiver(), ComputeEye(), WriteFileEye(), and ~ChiSquareReceiver().
int ChiSquareReceiver::NumTimeSlices [private] |
Referenced by ChiSquareReceiver(), ReceiveNoiseFreeSignalAndRecoverClock(), and ~ChiSquareReceiver().
Referenced by ChiSquareReceiver(), ComputeTimeIndependentPartOfFilterMatrix(), and ~ChiSquareReceiver().
string ChiSquareReceiver::OutFileNamePrefix [private] |
struct ChiSquareReceiverParameters* ChiSquareReceiver::Parameters [private] |
double** ChiSquareReceiver::PDFTimeSlices [private] |
double* ChiSquareReceiver::PDFTimeSlicesStorageVec [private] |
Actual array used to store PDFTimeSlices.
Referenced by ChiSquareReceiver(), and ~ChiSquareReceiver().
double* ChiSquareReceiver::PowerInSlice [private] |
Used in ComputeAveragePDFs.
Referenced by ChiSquareReceiver(), ComputeAveragePDFs(), and ~ChiSquareReceiver().
bool ChiSquareReceiver::ReadInClockRecoveryTimeFlag [private] |
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().
bool ChiSquareReceiver::ReadInSignalAndCovMatrixFlag [private] |
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 GetReducedNoiseFreeSigAndDiagonalizeCovMatrix().
double ChiSquareReceiver::ReducedDeltaTime [private] |
Referenced by ChiSquareReceiver().
double ChiSquareReceiver::ReducedFreqWindow [private] |
Referenced by ChiSquareReceiver().
double* ChiSquareReceiver::ReducedNoiseFreeSignalRealVector [private] |
RanNumGen* ChiSquareReceiver::RNG [private] |
Referenced by ChiSquareReceiver(), and ~ChiSquareReceiver().
int ChiSquareReceiver::RootFinderMaxIterations [private] |
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().
OptSignal* ChiSquareReceiver::Signal [private] |
string ChiSquareReceiver::SignalAndCovMatrixDir [private] |
Directory name for the files containing ReducedNoiseFreeSignal and CovarianceMatrix
Referenced by ChiSquareReceiver().
string ChiSquareReceiver::SignalAndCovMatrixJob [private] |
Job name prefix for the files containing ReducedNoiseFreeSignal and CovarianceMatrix
Referenced by ChiSquareReceiver(), and ReceiveSignal().
double* ChiSquareReceiver::StandardDeviationCurrent [private] |
Referenced by ChiSquareReceiver(), ComputeGaussianPDFsAndBER(), ComputeMomentsInEachBit(), and ~ChiSquareReceiver().
double* ChiSquareReceiver::SymmetricEigWork [private] |
Referenced by PrepareSymmetricEig(), SymmetricEig(), and ~ChiSquareReceiver().
double** ChiSquareReceiver::TestEigMatrix [private] |
Temporary storage used in TestEigDecomposition.
Referenced by ChiSquareReceiver(), TestEigDecomposition(), and ~ChiSquareReceiver().
double* ChiSquareReceiver::TestEigMatrixStorageVec [private] |
Actual array used to store TestEigMatrix.
Referenced by ChiSquareReceiver(), and ~ChiSquareReceiver().
double ChiSquareReceiver::TimeBetweenSlices [private] |
The time interval between the times of the pdfs or the time slices of the eye
Units = seconds
Default Values:
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::TimeWindow [private] |
Referenced by ChiSquareReceiver(), ComputeKLModes(), and ReceiveNoiseFreeSignalAndRecoverClock().
Referenced by ChiSquareReceiver(), SetOptFilterBandwidth(), and ~ChiSquareReceiver().
Referenced by ChiSquareReceiver(), ComputePDFAtTimeValue(), ComputePDFValueSteepestDescent(), and FindRootInterval().
typeOutput ChiSquareReceiver::TypeOutput [private] |
double ChiSquareReceiver::UpperPole [private] |
Referenced by ChiSquareReceiver(), ComputePDFAtTimeValue(), and ComputePDFValueSteepestDescent().
double** ChiSquareReceiver::VMatrix [private] |
The matrix V in (A.3.1f) of Ron Holzloehner's thesis.
Referenced by ChiSquareReceiver(), ComputeKLModes(), and ~ChiSquareReceiver().
double* ChiSquareReceiver::VMatrixStorageVec [private] |
Actual array used to store VMatrix.
Referenced by ChiSquareReceiver(), and ~ChiSquareReceiver().
double** ChiSquareReceiver::WorkMatrix [private] |
Temporary storage used in ComputeKLModes().
Referenced by ChiSquareReceiver(), ComputeKLModes(), TestEigDecomposition(), and ~ChiSquareReceiver().
double* ChiSquareReceiver::WorkMatrixStorageVec [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().