00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include"rect_spectral_mask.h"
00031
00032 #include<stdlib.h>
00033 #include <assert.h>
00034 #include<algorithm>
00035
00036 static class RectSpectralMaskClass : public TclClass {
00037 public:
00038 RectSpectralMaskClass() : TclClass("MSpectralMask/Rect") {}
00039 TclObject* create(int, const char*const*) { return (new RectSpectralMask); }
00040 } class_Rect_Spectral_Mask;
00041
00042
00043
00044 RectSpectralMask::RectSpectralMask()
00045 : freq_(2.437e3),
00046 bandwidth_(22e6),
00047 c_(3e8)
00048 {
00049
00050 }
00051
00052
00053 double RectSpectralMask::getFreq()
00054 {
00055 return freq_;
00056 }
00057
00058 void RectSpectralMask::setFreq(double f)
00059 {
00060 freq_ = f;
00061 }
00062
00063 double RectSpectralMask::getPropagationSpeed()
00064 {
00065 return c_;
00066 }
00067
00068 void RectSpectralMask::setPropagationSpeed(double s)
00069 {
00070 c_ = s;
00071 }
00072
00073 double RectSpectralMask::getLambda()
00074 {
00075 return (c_ / freq_);
00076 }
00077
00078 double RectSpectralMask::getBandwidth()
00079 {
00080 return bandwidth_;
00081 }
00082
00083 void RectSpectralMask::setBandwidth(double b)
00084 {
00085 bandwidth_ = b;
00086 }
00087
00088
00089
00090 int RectSpectralMask::command(int argc, const char*const* argv)
00091 {
00092
00093 Tcl& tcl = Tcl::instance();
00094
00095 if(argc == 2)
00096 {
00097 if(strcasecmp(argv[1], "getFreq")==0)
00098 {
00099 tcl.resultf("%f",getFreq());
00100 return TCL_OK;
00101 }
00102
00103 if(strcasecmp(argv[1], "getPropagationSpeed")==0)
00104 {
00105 tcl.resultf("%f",getPropagationSpeed());
00106 return TCL_OK;
00107 }
00108
00109 if(strcasecmp(argv[1], "getLambda")==0)
00110 {
00111 tcl.resultf("%f",getLambda());
00112 return TCL_OK;
00113 }
00114
00115 if(strcasecmp(argv[1], "getBandwidth")==0)
00116 {
00117 tcl.resultf("%f",getBandwidth());
00118 return TCL_OK;
00119 }
00120
00121 }
00122 if(argc == 3)
00123 {
00124 if(strcasecmp(argv[1], "setFreq")==0)
00125 {
00126 setFreq(atof(argv[2]));
00127 return TCL_OK;
00128 }
00129
00130 if(strcasecmp(argv[1], "setPropagationSpeed")==0)
00131 {
00132 setPropagationSpeed(atof(argv[2]));
00133 return TCL_OK;
00134 }
00135
00136 if(strcasecmp(argv[1], "setBandwidth")==0)
00137 {
00138 setBandwidth(atof(argv[2]));
00139 return TCL_OK;
00140 }
00141
00142 }
00143 }
00144
00145
00146 double RectSpectralMask::getOverlap(MSpectralMask* msm, Packet*)
00147 {
00148
00149 RectSpectralMask* tbm = dynamic_cast<RectSpectralMask *>(msm);
00150 assert(tbm);
00151
00152 double hbw = bandwidth_/2;
00153 double hbw2 = (tbm->getBandwidth())/2;
00154
00155 double overlap = std::min(tbm->getFreq() + hbw2, freq_ + hbw) - std::max(tbm->getFreq() - hbw2, freq_ - hbw);
00156
00157 if (overlap > 0)
00158 return (overlap/bandwidth_);
00159 else
00160 return 0;
00161
00162 }