00001
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef TDSPWSSUS_H
00019 #define TDSPWSSUS_H
00020
00021 #include <TDSPVector.h>
00022 #include <TDSPMatrix.h>
00023 #include <TDSPLTVChannel.h>
00024
00029 class TDSPWssus : public TDSPLTVChannel {
00030 protected:
00031
00032 Int_t fType;
00033
00034 TDSPMatrix* fTransferFunction;
00035 TDSPMatrix* fScatteringFunction;
00036 TDSPMatrix* fSpreadingFunction;
00037
00038 Double_t fMaxDoppler;
00039 Double_t fCarrierFreq;
00040 Double_t fSymbolRate;
00041 Double_t fOverSampling;
00042
00043 Double_t fExpDecay;
00044 Double_t fMaxDelay;
00045
00046
00047 static TDSPMatrix*
00048 ScatFunction(Int_t type,
00049 Double_t alpha,
00050 Double_t beta,
00051 UInt_t t0,
00052 UInt_t f0,
00053 UInt_t clen,
00054 TDSPMatrix *ScatFun=NULL);
00055
00056 static TDSPMatrix*
00057 TapFunction(TDSPMatrix *ScatFun,
00058 UInt_t tlen,
00059 UInt_t flen,
00060 UInt_t TapFunLen,
00061 TDSPMatrix *TapFun=NULL);
00062
00063 public:
00064 TDSPWssus(char *name = NULL);
00065 ~TDSPWssus();
00066
00067
00068
00069
00070
00071
00072
00073 void SetOption(Option_t *opt);
00074
00075 void SetSymbolRate(Double_t s) { fSymbolRate=s;};
00076 void SetSymbolRateMHz(Double_t s) { SetSymbolRate(s*1.0e6);};
00077 void SetOverSampling(Double_t s) { fOverSampling=s;};
00078 void SetMaxDoppler(Double_t d) { fMaxDoppler=d;};
00079 void SetSpeed(Double_t v) { SetMaxDoppler(v/3.0e8*fCarrierFreq);};
00080 void SetSpeedKMH(Double_t v) { SetSpeed(v*1000./3600.);};
00081 void SetCarrierFrequency(Double_t f) { fCarrierFreq=f;};
00082 void SetCarrierFrequencyMHz(Double_t f) { SetCarrierFrequency(f*1.0e6); };
00083 void SetCarrierFrequencyGHz(Double_t f) { SetCarrierFrequency(f*1.0e9); };
00084 void SetExpDecay(Double_t al) { fExpDecay = al;};
00085 void SetExpDecayMHz(Double_t al) { SetExpDecay(al*1.0e6);};
00086 void SetMaxDelay(Double_t md) { fMaxDelay = md;};
00087 void SetMaxDelayMus(Double_t md) { SetMaxDelay(md/1.0e6);};
00088
00089 Double_t GetSamplePeriod() { return 1./GetSamplingRate();};
00090 Double_t GetSamplePeriodMus() { return 1./GetSamplingRateMHz();};
00091 Double_t GetSymbolPeriod() { return 1./GetSymbolRate();};
00092 Double_t GetSymbolPeriodMus() { return 1./GetSymbolRateMHz();};
00093 Double_t GetMaxDelay() const { return fMaxDelay;};
00094 Double_t GetMaxDelayMus() { return fMaxDelay*1.0e6;}
00095 Double_t GetExpDecay() const { return fExpDecay;};
00096 Double_t GetExpDecayMHz() const { return fExpDecay/1.0e6;};
00097 Double_t GetSymbolRate() const { return fSymbolRate;};
00098 Double_t GetSymbolRateMHz() { return GetSymbolRate()/1.0e6;};
00099 Double_t GetSamplingRate() { return GetSymbolRate()*fOverSampling;};
00100 Double_t GetSamplingRateMHz() { return GetSymbolRateMHz()*fOverSampling;};
00101 Double_t GetOverSampling() const { return fOverSampling;};
00102 Double_t GetMaxDoppler() const { return fMaxDoppler;};
00103 Double_t GetSpeed() { return fMaxDoppler*3.0e8/fCarrierFreq;};
00104 Double_t GetSpeedKMH() { return GetSpeed()/1000.*3600.;};
00105 Double_t GetCarrierFrequency() const { return fCarrierFreq;};
00106 Double_t GetCarrierFrequencyMHz() { return GetCarrierFrequency()/1.0e6;};
00107 Double_t GetCarrierFrequencyGHz() { return GetCarrierFrequency()/1.0e9;};
00108 Int_t GuessChannelBlockLen();
00109
00110
00111 Int_t GetDiscreteMaxDelay() {return TMath::Nint(TMath::Max(GetMaxDelay()*GetSamplingRate(),1.));};
00112 Double_t GetDiscreteExpDecay() {return GetExpDecay()/GetSamplingRate();};
00113 Int_t GetDiscreteMaxDoppler() {return TMath::Nint(TMath::Max(GetMaxDoppler(),1.));};
00114 Int_t GetDiscreteScatteringMatrixSize();
00115
00116
00117 TDSPMatrix* GetTransferFunction();
00118 TDSPMatrix* GetScatteringFunction();
00119 TDSPMatrix* GetSpreadingFunction();
00120 TDSPMatrix* CreateTransferFunction(TDSPMatrix *out=NULL);
00121 TDSPMatrix* CreateScatteringFunction(TDSPMatrix *out=NULL);
00122 TDSPMatrix* CreateSpreadingFunction(TDSPMatrix *out=NULL);
00123 virtual TDSPMatrix*CreateImpulseResponse(TDSPMatrix *out=NULL);
00124
00125 Bool_t fHaveScatteringFunction;
00126 Bool_t fHaveTransferFunction;
00127 Bool_t fHaveSpreadingFunction;
00128
00129
00130
00131
00132 virtual void ChangeRepresentation();
00133
00134
00135
00136 virtual void Draw(Option_t *o="");
00137 virtual void Print();
00138
00139 ClassDef(TDSPWssus,1)
00140
00141 };
00142
00143 #endif