00001 // $Id: MachZehnder.hh,v 1.2 2008/08/08 02:19:51 zweck Exp $ 00002 00003 //################################################################### 00004 // 00005 // Optical Communication Systems Simulator 00006 // 00007 // Copyright (2000): 00008 // Optical Fiber Communications Laboratory (OFCL) 00009 // Computer Science & Electrical Engineering Department (CSEE) 00010 // University of Maryland Baltimore County (UMBC) 00011 // 00012 //################################################################### 00013 00014 #ifndef _MACH_ZEHNDER_ 00015 #define _MACH_ZEHNDER_ 00016 00017 #include "ocsOptSignal.hh" 00018 #include "ocsElecFilter.hh" 00019 00020 00021 enum typeMachZehnder { BINARY_DATA_PERFECT_RECT = 1, 00022 BINARY_DATA_ARCTANH_SMOOTHING = 2, 00023 BINARY_DATA_SUPERGAUSS_SMOOTHING = 3, 00024 SINUSOIDAL_SIGNAL = 4 }; 00025 00026 00027 class MachZehnder 00028 { 00029 00030 public: 00031 00032 MachZehnder(string InFileName, OptSignal * oOptSignal2); 00033 00034 void GeneratePerfectRectBinaryElecData(int ChannelArrayIndex); 00035 void GenerateSmoothedRectBinaryElecDataArctanh(int ChannelArrayIndex); 00036 void GenerateSmoothedRectBinaryElecDataSuperGauss(int ChannelArrayIndex); 00037 void GenerateSinusoidalElecSignal(int ChannelArrayIndex); 00038 00039 double SuperGauss(double Time); 00040 00041 void FilterBinaryElecData(void); 00042 00043 void MZModulator(void); 00044 void PhaseModulator(void); 00045 00046 double EAM34PulseShape(double TimeRelPulseCenter); 00047 double EAMPoly(double time); 00048 00049 00050 void WriteFileTimePower(string outFile); 00051 void WriteFileFreqPower(string outFile); 00052 00053 typeMachZehnder GetTypeMachZehnder(void) { return TypeMachZehnder; }; 00054 00055 00056 private: 00057 00058 typeMachZehnder TypeMachZehnder; 00059 00060 BitString * oBitString; 00061 OptSignal * oOptSignal; 00062 ElecFilter * oElecFilter; 00063 00064 cfftw * fft; 00065 fftPowerMatrices sfftPM; 00066 fftMatrices sfftM; 00067 00068 typeSimulation TypeSimulation; 00069 00070 int NumChannels; 00071 double CenterFreq; 00072 00073 double BitLength; // The time length in seconds of a bit 00074 double BitRateChann; 00075 00076 int StringLength; 00077 double OptPowerChann; 00078 00079 int qtPoints; 00080 double TimeWindow,DeltaTime; 00081 double FreqWindow,DeltaFreq; 00082 00083 double V_pi, V_pi1, V_pi2; 00084 double Phi_10,Phi_20; 00085 double DeltaPhaseModulator; 00086 double OptModulationDepth; 00087 double SlopeFactor; 00088 double ShiftAmt; 00089 bool ChirpFreeFlag; 00090 00091 int SuperGaussExponent; 00092 00093 int RandomPolarizationFlag; 00094 00095 // Parameters for UMBC_RZ 00096 00097 bool DoEOMFlag; 00098 bool EAMWithHump; 00099 00100 }; 00101 00102 #endif /* _MACH_ZEHNDER_ */ 00103 00104 00105 00106