Beispiel #1
0
 private void qlra(RadioClimate klimx, VariabilityMode mdvarx)
 {
     foreach (var antenna in Antennae)
     {
         double q;
         if (antenna.kst == SiteCriteria.Random)
         {
             antenna.he = antenna.hg;
         }
         else
         {
             if (antenna.kst != SiteCriteria.Careful)
             {
                 q = 9;
             }
             else
             {
                 q = 4;
             }
             if (antenna.hg < 5)
             {
                 q *= Math.Sin(0.3141593 * antenna.hg);
             }
             antenna.he = antenna.hg + (1 + q) * Math.Exp(-Math.Min(20, 2 * antenna.hg / Math.Max(1e-3, _dh)));
         }
         q           = Math.Sqrt(2 * antenna.he / _gme);
         antenna.dl  = q * Math.Exp(-0.07 * Math.Sqrt(_dh / Math.Max(antenna.he, 5)));
         antenna.the = (0.65 * _dh * (q / antenna.dl - 1) - 2 * antenna.he) / q;
     }
     _mdp   = ControlFlow.AreaBegin;
     _mdvar = mdvarx;
     _klim  = klimx;
     _lvar  = Changes.All;
 }
Beispiel #2
0
        //********************************************************
        //* Point-To-Point Mode Calculations                     *
        //********************************************************

        public void point_to_pointMDH(double[] elev, double tht_m, double rht_m,
                                      double eps_dielect, double sgm_conductivity, double eno_ns_surfref,
                                      double frq_mhz, RadioClimate radio_climate, Polarization pol, VariabilityMode mdvar, double timepct, double locpct, double confpct,
                                      out double dbloss, out PropMode propmode, out double deltaH, out int errnum)
        // timepct, locpct, confpct: .01 to .99
        // elev[]: [num points - 1], [delta dist(meters)], [height(meters) point 1], ..., [height(meters) point n]
        // errnum: 0- No Error.
        //         1- Warning: Some parameters are nearly out of range.
        //                     Results should be used with caution.
        //         2- Note: Default parameters have been substituted for impossible ones.
        //         3- Warning: A combination of parameters is out of range.
        //                     Results are probably invalid.
        //         Other-  Warning: Some parameters are out of range.
        //                          Results are probably invalid.
        {
            _klim  = radio_climate;
            _lvar  = Changes.All;
            _mdp   = ControlFlow.PointToPoint;
            _w1    = true;  // possible bugfix: original embedded this value in mdvar
            _mdvar = mdvar; // bugfix: original used 'mobile'

            Transmitter.hg = tht_m;
            Receiver.hg    = rht_m;

            var e = new Elevations(elev);

            qlrps(frq_mhz, e.Points.Average(), eno_ns_surfref, pol, eps_dielect, sgm_conductivity);
            qlrpfl(e, _klim, _mdvar);
            var fs = 32.45 + 20 * Math.Log10(frq_mhz) + 20 * Math.Log10(_dist / 1000.0);

            deltaH   = _dh;
            propmode = GetPropMode();
            dbloss   = avar(qerfi(timepct), qerfi(locpct), qerfi(confpct)) + fs;    //avar(time,location,confidence)
            errnum   = _kwx;
        }
Beispiel #3
0
        private void qlrpfl(Elevations pfl, RadioClimate klimx, VariabilityMode mdvarx)
        {
            _dist = pfl.EndIndex * pfl.DeltaDistance;
            hzns(pfl);
            foreach (var antenna in Antennae)
            {
                antenna.xl = Math.Min(15 * antenna.hg, 0.1 * antenna.dl);
            }
            Receiver.xl = _dist - Receiver.xl;
            _dh         = d1thx(pfl, Transmitter.xl, Receiver.xl);
            if (Transmitter.dl + Receiver.dl > 1.5 * _dist)
            {
                z1sq1(pfl, Transmitter.xl, Receiver.xl, out var za, out var zb);
                Transmitter.he = Transmitter.hg + Dim(pfl.FirstPoint, za);
                Receiver.he    = Receiver.hg + Dim(pfl.LastPoint, zb);
                foreach (var antenna in Antennae)
                {
                    antenna.dl = Math.Sqrt(2 * antenna.he / _gme) * Math.Exp(-0.07 * Math.Sqrt(_dh / Math.Max(antenna.he, 5)));
                }
                var q = Transmitter.dl + Receiver.dl;

                if (q <= _dist)
                {
                    q = Math.Pow(_dist / q, 2);
                    foreach (var antenna in Antennae)
                    {
                        antenna.he *= q;
                        antenna.dl  = Math.Sqrt(2 * antenna.he / _gme) * Math.Exp(-0.07 * Math.Sqrt(_dh / Math.Max(antenna.he, 5)));
                    }
                }
                foreach (var antenna in Antennae)
                {
                    q           = Math.Sqrt(2 * antenna.he / _gme);
                    antenna.the = (0.65 * _dh * (q / antenna.dl - 1) - 2 * antenna.he) / q;
                }
            }
            else
            {
                z1sq1(pfl, Transmitter.xl, 0.9 * Transmitter.dl, out var za, out _);
                z1sq1(pfl, _dist - 0.9 * Receiver.dl, Receiver.xl, out _, out var zb);
                Transmitter.he = Transmitter.hg + Dim(pfl.FirstPoint, za);
                Receiver.he    = Receiver.hg + Dim(pfl.LastPoint, zb);
            }
            _mdp   = ControlFlow.PointToPoint;
            _mdvar = mdvarx;
            _klim  = klimx;
            _lvar  = Changes.All;
            lrprop(0);
        }
Beispiel #4
0
        //********************************************************
        //* Area Mode Calculations                               *
        //********************************************************

        public void area(VariabilityMode ModVar, double deltaH, double tht_m, double rht_m,
                         double dist_km, SiteCriteria TSiteCriteria, SiteCriteria RSiteCriteria,
                         double eps_dielect, double sgm_conductivity, double eno_ns_surfref,
                         double frq_mhz, RadioClimate radio_climate, Polarization pol, double pctTime, double pctLoc,
                         double pctConf, out double dbloss, out PropMode propmode, out int errnum)
        {
            // pctTime, pctLoc, pctConf: .01 to .99
            // errnum: 0- No Error.
            //         1- Warning: Some parameters are nearly out of range.
            //                     Results should be used with caution.
            //         2- Note: Default parameters have been substituted for impossible ones.
            //         3- Warning: A combination of parameters is out of range.
            //                     Results are probably invalid.
            //         Other-  Warning: Some parameters are out of range.
            //                          Results are probably invalid.
            _dh             = deltaH;
            _klim           = radio_climate;
            _ens            = eno_ns_surfref;
            Transmitter.hg  = tht_m;
            Transmitter.kst = TSiteCriteria;
            Receiver.hg     = rht_m;
            Receiver.kst    = RSiteCriteria;
            qlrps(frq_mhz, 0, eno_ns_surfref, pol, eps_dielect, sgm_conductivity);
            qlra(_klim, ModVar);
            if (_lvar < Changes.Distance)
            {
                _lvar = Changes.Distance;
            }
            lrprop(dist_km * 1000);
            var fs  = 32.45 + 20 * Math.Log10(frq_mhz) + 20 * Math.Log10(_dist / 1000.0);
            var xlb = fs + avar(qerfi(pctTime), qerfi(pctLoc), qerfi(pctConf));

            dbloss   = xlb;
            errnum   = _kwx;
            propmode = GetPropMode();
        }