Beispiel #1
0
 private void SolverPolarizationY()
 {
     Logger.WriteStatus("Starting Polarization Y");
     CurrentSource = Polarization.Y;
     SolveForOneSource();
     OnPolarizationComplete(CurrentSource);
 }
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
        /// <summary>
        /// Ermittelt ein Kürzel für diese Gruppe.
        /// </summary>
        /// <returns>Das gewünschte Kürzel.</returns>
        public override int GetHashCode()
        {
            // Core
            int hash = (null == OrbitalPosition) ? 0 : OrbitalPosition.GetHashCode();

            // Merge all
            return(hash ^ Frequency.GetHashCode() ^ SymbolRate.GetHashCode() ^ Polarization.GetHashCode() ^ InnerFEC.GetHashCode() ^ UsesS2Modulation.GetHashCode() ^ Modulation.GetHashCode() ^ RollOff.GetHashCode() ^ IsWestPosition.GetHashCode());
        }
Beispiel #4
0
        /// <summary>
        /// Point-to-point mode functionality, with variability specified with confidence/reliability (CR)
        /// </summary>
        /// <param name="h_tx__meter">Structural height of the TX, in meters</param>
        /// <param name="h_rx__meter">Structural height of the RX, in meters</param>
        /// <param name="pfl">Terrain data, in PFL format</param>
        /// <param name="climate">Radio climate</param>
        /// <param name="N_0">Refractivity, in N-Units</param>
        /// <param name="f__mhz">Frequency, in MHz</param>
        /// <param name="pol">Polarization</param>
        /// <param name="epsilon">Relative permittivity</param>
        /// <param name="sigma">Conductivity</param>
        /// <param name="mdvar">Mode of variability</param>
        /// <param name="confidence">Confidence percentage</param>
        /// <param name="reliability">Reliability percentage</param>
        /// <param name="A__db">Basic transmission loss, in dB</param>
        /// <param name="warnings">Warning flags</param>
        /// <param name="interValues">Struct of intermediate values</param>
        /// <returns>Error code</returns>
        public static int ITM_P2P_CR_Ex(double h_tx__meter, double h_rx__meter, double[] pfl, Climate climate, double N_0,
                                        double f__mhz, Polarization pol, double epsilon, double sigma, int mdvar, double confidence, double reliability,
                                        out double A__db, out Warnings warnings, out IntermediateValues interValues)
        {
            int rtn = ITM_P2P_CR_Ex(h_tx__meter, h_rx__meter, pfl, (int)climate, N_0, f__mhz, (int)pol, epsilon, sigma, mdvar,
                                    confidence, reliability, out A__db, out long warns, out interValues);

            warnings = (Warnings)warns;
            return(rtn);
        }
Beispiel #5
0
        /// <summary>
        /// Point-to-point mode functionality, with variability specified with time/location/situation (TLS)
        /// </summary>
        /// <param name="h_tx__meter">Structural height of the TX, in meters</param>
        /// <param name="h_rx__meter">Structural height of the RX, in meters</param>
        /// <param name="pfl">Terrain data, in PFL format</param>
        /// <param name="climate">Radio climate</param>
        /// <param name="N_0">Refractivity, in N-Units</param>
        /// <param name="f__mhz">Frequency, in MHz</param>
        /// <param name="pol">Polarization</param>
        /// <param name="epsilon">Relative permittivity</param>
        /// <param name="sigma">Conductivity</param>
        /// <param name="mdvar">Mode of variability</param>
        /// <param name="time">Time percentage</param>
        /// <param name="location">Location percentage</param>
        /// <param name="situation">Situation percentage</param>
        /// <param name="A__db">Basic transmission loss, in dB</param>
        /// <param name="warnings">Warning flags</param>
        /// <returns>Error code</returns>
        public static int ITM_P2P_TLS(double h_tx__meter, double h_rx__meter, double[] pfl, Climate climate, double N_0, double f__mhz,
                                      Polarization pol, double epsilon, double sigma, int mdvar, double time, double location, double situation,
                                      out double A__db, out Warnings warnings)
        {
            int rtn = ITM_P2P_TLS(h_tx__meter, h_rx__meter, pfl, (int)climate, N_0, f__mhz, (int)pol, epsilon, sigma, mdvar, time,
                                  location, situation, out A__db, out long warns);

            warnings = (Warnings)warns;
            return(rtn);
        }
Beispiel #6
0
        /// <summary>
        /// Area mode functionality
        /// </summary>
        /// <param name="h_tx__meter">Structural height of the TX, in meters</param>
        /// <param name="h_rx__meter">Structural height of the RX, in meters</param>
        /// <param name="tx_site_criteria">Siting criteria of the TX</param>
        /// <param name="rx_site_criteria">Siting criteria of the RX</param>
        /// <param name="d__km">Path distance, in km</param>
        /// <param name="delta_h__meter">Terrain irregularity parameter</param>
        /// <param name="climate">Radio climate</param>
        /// <param name="N_0">Refractivity, in N-Units</param>
        /// <param name="f__mhz">Frequency, in MHz</param>
        /// <param name="pol">Polarization</param>
        /// <param name="epsilon">Relative permittivity</param>
        /// <param name="sigma">Conductivity</param>
        /// <param name="mdvar">Mode of variability</param>
        /// <param name="confidence">Confidence percentage</param>
        /// <param name="reliability">Reliability percentage</param>
        /// <param name="A__db">Basic transmission loss, in dB</param>
        /// <param name="warnings">Warning flags</param>
        /// <returns>Error code</returns>
        public static int ITM_AREA_CR(double h_tx__meter, double h_rx__meter, SitingCriteria tx_site_criteria,
                                      SitingCriteria rx_site_criteria, double d__km, double delta_h__meter, Climate climate, double N_0,
                                      double f__mhz, Polarization pol, double epsilon, double sigma, int mdvar, double confidence, double reliability,
                                      out double A__db, out Warnings warnings)
        {
            int rtn = ITM_AREA_CR(h_tx__meter, h_rx__meter, (int)tx_site_criteria, (int)rx_site_criteria, d__km, delta_h__meter,
                                  (int)climate, N_0, f__mhz, (int)pol, epsilon, sigma, mdvar, confidence, reliability, out A__db, out long warns);

            warnings = (Warnings)warns;
            return(rtn);
        }
Beispiel #7
0
        /// <summary>
        /// Area mode functionality
        /// </summary>
        /// <param name="h_tx__meter">Structural height of the TX, in meters</param>
        /// <param name="h_rx__meter">Structural height of the RX, in meters</param>
        /// <param name="tx_site_criteria">Siting criteria of the TX</param>
        /// <param name="rx_site_criteria">Siting criteria of the RX</param>
        /// <param name="d__km">Path distance, in km</param>
        /// <param name="delta_h__meter">Terrain irregularity parameter</param>
        /// <param name="climate">Radio climate</param>
        /// <param name="N_0">Refractivity, in N-Units</param>
        /// <param name="f__mhz">Frequency, in MHz</param>
        /// <param name="pol">Polarization</param>
        /// <param name="epsilon">Relative permittivity</param>
        /// <param name="sigma">Conductivity</param>
        /// <param name="mdvar">Mode of variability</param>
        /// <param name="time">Time percentage</param>
        /// <param name="location">Location percentage</param>
        /// <param name="situation">Situation percentage</param>
        /// <param name="A__db">Basic transmission loss, in dB</param>
        /// <param name="warnings">Warning flags</param>
        /// <param name="interValues">Struct of intermediate values</param>
        /// <returns>Error code</returns>
        public static int ITM_AREA_TLS_Ex(double h_tx__meter, double h_rx__meter, SitingCriteria tx_site_criteria,
                                          SitingCriteria rx_site_criteria, double d__km, double delta_h__meter, Climate climate, double N_0,
                                          double f__mhz, Polarization pol, double epsilon, double sigma, int mdvar, double time, double location,
                                          double situation, out double A__db, out Warnings warnings, out IntermediateValues interValues)
        {
            int rtn = ITM_AREA_TLS_Ex(h_tx__meter, h_rx__meter, (int)tx_site_criteria, (int)rx_site_criteria, d__km,
                                      delta_h__meter, (int)climate, N_0, f__mhz, (int)pol, epsilon, sigma, mdvar, time, location, situation,
                                      out A__db, out long warns, out interValues);

            warnings = (Warnings)warns;
            return(rtn);
        }
Beispiel #8
0
        public void Solve(AnomalyCurrent chiX, AnomalyCurrent chiY)
        {
            Logger.WriteStatus("Starting Cartesian MT Forward solver...");

            Logger.WriteStatus("\n\nStarting Polarization X\n\n");
            CurrentSource = Polarization.X;
            CalculateOnObservationsForGivenChi(chiX);

            Logger.WriteStatus("\n\nStarting Polarization Y\n\n");
            CurrentSource = Polarization.Y;
            CalculateOnObservationsForGivenChi(chiY);
        }
Beispiel #9
0
        private void qlrps(double fmhz, double zsys, double en0, Polarization ipol, double eps, double sgm)
        {
            const double gma = 157e-9;

            _wn  = fmhz / 47.7;
            _ens = en0;
            if (zsys != 0)
            {
                _ens *= Math.Exp(-zsys / 9460.0);
            }
            _gme = gma * (1 - 0.04665 * Math.Exp(_ens / 179.3));
            var zq        = new Complex(eps, 376.62 * sgm / _wn);
            var prop_zgnd = Complex.Sqrt(zq - 1);

            if (ipol != Polarization.Horizontal)
            {
                prop_zgnd = prop_zgnd / zq;
            }

            _zgnd = prop_zgnd;
        }
Beispiel #10
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();
        }
Beispiel #11
0
 public PolarizationCompleteEventArs(Polarization polarization)
 {
     Polarization = polarization;
 }
Beispiel #12
0
 /// <summary>
 /// Recommendation ITU-R P.528-5
 /// </summary>
 /// <param name="d__km">Path distance, in km</param>
 /// <param name="h_1__meter">Height of the low terminal, in meters</param>
 /// <param name="h_2__meter">Height of the high terminal, in meters</param>
 /// <param name="f__mhz">Frequency, in MHz</param>
 /// <param name="T_pol">Polarization</param>
 /// <param name="p">Time percentage</param>
 /// <param name="result">Result data structure</param>
 /// <param name="terminal_1">Intermediate values for terminal 1 geometry</param>
 /// <param name="terminal_2">Intermediate values for terminal 2 geometry</param>
 /// <param name="tropo">Intermediate values for troposcatter calculations</param>
 /// <param name="path">Intermediate values for propagation path</param>
 /// <param name="los_params">Intermediate values for Line-of-Sight calculations</param>
 /// <returns>Return code</returns>
 public static int InvokeEx(double d__km, double h_1__meter, double h_2__meter, double f__mhz, Polarization T_pol, double p, out Result result,
                            out Terminal terminal_1, out Terminal terminal_2, out TroposcatterParams tropo, out Path path, out LineOfSightParams los_params)
 {
     return(P528Ex_Invoke(d__km, h_1__meter, h_2__meter, f__mhz, (int)T_pol, p, out result, out terminal_1,
                          out terminal_2, out tropo, out path, out los_params));
 }
Beispiel #13
0
 public MtFieldsAtSiteCalculatedEventArgs(Polarization polarization, ObservationSite observationSite,
                                          ComplexVector normalField, ComplexVector anomalyField)
     : base(observationSite, normalField, anomalyField)
 {
     Polarization = polarization;
 }
Beispiel #14
0
            public Site(string puid, string siteid)
            {
                Settings settings = new Settings(puid);

                Puid               = "";
                Siteid             = "";
                SiteName           = "";
                Latitude           = "";
                Longitude          = "";
                HBA                = "";
                Frequency          = "";
                Polarization       = "";
                PolarizationNumber = "";
                EIRP               = "";
                AntennaType        = "";
                AntennaModel       = "";
                AntennaGain        = 0;
                FeederLoss         = 0;
                RfPower            = 0;
                Azimuth            = "";
                DownTilt           = "";
                Bandwidth          = 0;
                SnrFactor          = "";
                Technology         = "";
                Height             = "";
                Location           = new Coords(0, 0);
                foreach (DataRow row in GetDataTableFromQuery("SELECT " +
                                                              "siteid, sitename, latitude, longitude*-1, " +
                                                              "hba, dlfrequency, polarization, rfpower, " +
                                                              "antennatype, azimuth, downtilt, antennamodel, " +
                                                              "antennagain, feederloss, bandwidth, technology, height " +
                                                              "FROM pusersnetwork WHERE uid = '" + puid + "' AND " +
                                                              "siteid = '" + siteid + "';").Rows)
                {
                    Puid         = puid;
                    Siteid       = row[0].ToString();
                    SiteName     = row[1].ToString();
                    Latitude     = row[2].ToString();
                    Longitude    = row[3].ToString();
                    HBA          = row[4].ToString() + " m ";
                    Frequency    = row[5].ToString();
                    Polarization = row[6].ToString();
                    RfPower      = row[7].ToString().ToDouble();
                    AntennaType  = row[8].ToString().ToLower();
                    Azimuth      = row[9].ToString();
                    DownTilt     = row[10].ToString();
                    AntennaModel = row[11].ToString();
                    AntennaGain  = row[12].ToString().ToDouble();
                    FeederLoss   = row[13].ToString().ToDouble();
                    Bandwidth    = row[14].ToString().ToDouble() * 1000000; // unit hertz
                    Technology   = row[15].ToString();
                    Height       = row[16].ToString();
                    // dependent variables , calculated
                    PolarizationNumber =
                        Polarization.ToLower() == "vertical" ? "1" : "0";
                    // rfpower (W) + antennagain (dBi) - feederloss (dB) + recievergain (dBi)
                    EIRP = DbmToWatt(WattToDbm(RfPower) + AntennaGain - FeederLoss +
                                     settings.Pl_ReceiverGain.ToDouble()).ToString();
                    double eirpdbW  = WattToDbm(EIRP.ToDouble()) - 30;
                    double noisedbW = -174 + (10 * Math.Log10(Bandwidth)) - 30;
                    SnrFactor = (eirpdbW - noisedbW).ToString();
                    Location  = new Coords(Longitude.ToDouble() * -1, Latitude.ToDouble());
                }
            }
 public MtFieldsAtLevelCalculatedEventArgs(Polarization polarization, ObservationLevel level, AnomalyCurrent normalField, AnomalyCurrent anomalyField)
     : base(level, normalField, anomalyField)
 {
     Polarization = polarization;
 }
Beispiel #16
0
 private void OnPolarizationComplete(Polarization polarization)
 => PolarizationComplete?.Invoke(this, new PolarizationCompleteEventArs(polarization));
Beispiel #17
0
 /// <summary>
 /// Compute the LFMF propagation prediction
 /// </summary>
 /// <param name="h_tx__meter">Transmitter height, in meters</param>
 /// <param name="h_rx__meter">Receiver height, in meters</param>
 /// <param name="f__mhz">Frequency, in MHz</param>
 /// <param name="P_tx__watt">Transmit power, in Watts</param>
 /// <param name="N_s">Surface refractivity, in N-Units</param>
 /// <param name="d__km">Path distance, in km</param>
 /// <param name="epsilon">Relative permittivity</param>
 /// <param name="sigma">Conductivity</param>
 /// <param name="pol">Polarization</param>
 /// <param name="result">Prediction result</param>
 /// <returns>Error code</returns>
 public static int Invoke(double h_tx__meter, double h_rx__meter, double f__mhz, double P_tx__watt,
                          double N_s, double d__km, double epsilon, double sigma, Polarization pol, out Result result)
 {
     return(LFMF_Invoke(h_tx__meter, h_rx__meter, f__mhz, P_tx__watt, N_s,
                        d__km, epsilon, sigma, (int)pol, out result));
 }
Beispiel #18
0
 /// <summary>
 /// Recommendation ITU-R P.528-5
 /// </summary>
 /// <param name="d__km">Path distance, in km</param>
 /// <param name="h_1__meter">Height of the low terminal, in meters</param>
 /// <param name="h_2__meter">Height of the high terminal, in meters</param>
 /// <param name="f__mhz">Frequency, in MHz</param>
 /// <param name="T_pol">Polarization</param>
 /// <param name="p">Time percentage</param>
 /// <param name="result">Result data structure</param>
 /// <returns>Return code</returns>
 public static int Invoke(double d__km, double h_1__meter, double h_2__meter, double f__mhz, Polarization T_pol,
                          double p, out Result result)
 {
     return(P528_Invoke(d__km, h_1__meter, h_2__meter, f__mhz, (int)T_pol, p, out result));
 }