Exemplo n.º 1
0
        /// <summary>
        /// 计算发射机互调
        /// </summary>
        internal IMCompareResult TransmitterIM()
        {
            this.imResult = new IMCompareResult();
            int length = this.stationtransmitters.Length;

            for (int i = 0; i < length; i++)
            {
                //int start = this.BiSearchTransmitter(this.transmitters[i].TuningFreqFrom, 0, length - 1);
                //int end = this.BiSearchTransmitter(this.transmitters[i].TuningRangeTo, start, length - 1);
                int    start = 0;
                int    end   = length - 1;
                double freqA = 2 * this.stationtransmitters[i].Freq;
                for (int j = start; j <= end; j++)
                {
                    if (i == j || this.stationtransmitters[i].EquipID == this.stationtransmitters[j].EquipID)
                    {
                        continue;
                    }
                    double generateFreq = freqA - this.stationtransmitters[j].Freq;
                    foreach (Receiver receiver in this.stationreceivers)
                    {
                        if (receiver.EquipID == this.stationtransmitters[i].EquipID || receiver.EquipID == this.stationtransmitters[j].EquipID)
                        {
                            continue;
                        }
                        if (receiver.IsValidatingFreq(generateFreq))
                        {
                            double distancef1Toreceiver = DistanceCalculator.GetKmDistance(this.stationtransmitters[i].Coordinate, receiver.Coordinate);
                            //double attenuation = 0;
                            //按照垂直计算AC
                            //double vAttenuation = 37.5 * Math.Log10() + 40.3 * Math.Log10(f2.Freq) - 63.87;
                            //按照水平计算AC
                            double attenuation = 20 * Math.Log10(distancef1Toreceiver * 1000) + 21 * Math.Log10(this.stationtransmitters[j].Freq) - 23.9;

                            //f2在f1发信机输入端的功率;
                            //Pin’(B)=ERPB-AC+GA-Lta
                            //Pin’(B)为TXB在TXA发信机输入端的功率;
                            double powerB    = this.stationtransmitters[j].Erp - attenuation + this.stationtransmitters[i].AntGain - this.stationtransmitters[i].FeedLoss;
                            double deviation = Math.Round(Math.Abs(this.stationtransmitters[i].Freq - this.stationtransmitters[j].Freq), 4, MidpointRounding.AwayFromZero);
                            double refC      = 57 * Math.Log10(deviation + 1.5) - 9.6 - 9 * Math.Log10(deviation);
                            double lb        = GetTransLoss(this.stationtransmitters[i], distancef1Toreceiver);
                            //Pin’(B)+GA-LTA+GRX-LRX-Lb-C
                            double powerIn = powerB + this.stationtransmitters[i].AntGain - this.stationtransmitters[i].FeedLoss + receiver.AntGaindBi - receiver.FeedLoss - lb - refC;
                            if (receiver.IsValidatingSignal(powerIn))
                            {
                                //登记发射机互调
                                ThirdOrderIMItem item = new ThirdOrderIMItem(new ComparableFreq[] { this.stationtransmitters[i].ComparableFreq, this.stationtransmitters[j].ComparableFreq }, new int[] { 2, -1 });
                                item.DisturbedFreqs = new ComparableFreq[] { receiver.ComparableFreq };
                                this.imResult.RegisterIMItem(item);
                            }
                        }
                    }
                }
            }
            return(this.imResult);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 测试接收机互调
        /// </summary>
        /// <param name="receiver">被干扰接收机</param>
        /// <param name="order">互调阶数</param>
        /// <returns>互调结果</returns>
        public IMCompareResult TestReceiverIM(Receiver receiver, IMOrder order)
        {
            this.imResult = new IMCompareResult();
            this.InitializeImOrder(order);
            this.currentReceiver = receiver;
            int start = BiSearchTransmitter(receiver.TuningFreqFrom, 0, stationreceivers.Length - 1);
            int end   = BiSearchTransmitter(receiver.TuningRangeTo, start, stationreceivers.Length - 1);

            this.endPosition = end;
            for (int i = start; i < end; i++)
            {
                for (int j = i + 1; j <= end; j++)
                {
                    CalculateReceiverIM(this.stationtransmitters[i], j);
                }
            }
            return(imResult);
        }
Exemplo n.º 3
0
        /// <summary>
        /// 测试接收机互调
        /// </summary>
        /// <param name="transmitter">参与计算的发射机</param>
        /// <param name="order">互调阶数</param>
        /// <returns>接收机互调结果</returns>
        public IMCompareResult TestReceiverIM(Transmitter transmitter, IMOrder order)
        {
            this.imResult = new IMCompareResult();
            this.InitializeImOrder(order);

            foreach (Receiver receiver in this.stationreceivers)
            {
                if (receiver.ReceivableFreq(transmitter.Freq))
                {
                    this.currentReceiver = receiver;
                    int start = BiSearchTransmitter(receiver.TuningFreqFrom, 0, stationreceivers.Length - 1);
                    int end   = BiSearchTransmitter(receiver.TuningRangeTo, start, stationreceivers.Length - 1);
                    this.endPosition = end;
                    for (int i = start; i <= end; i++)
                    {
                        CalculateReceiverIM(transmitter, i);
                    }
                }
            }
            return(this.imResult);
        }
Exemplo n.º 4
0
        /// <summary>
        /// 获取参数指定频率参与的互调公式
        /// </summary>
        /// <param name="freq">参考频率</param>
        /// <returns>互调结果</returns>
        public IMCompareResult GetIMCompareResult(ComparableFreq freq)
        {
            IMCompareResult result  = new IMCompareResult(this.sameFreqMapping);
            ComparableFreq  keyFreq = freq;

            foreach (ComparableFreq key in sameFreqMapping.Keys)
            {
                if (freq.IsValueEquals(key))
                {
                    keyFreq = key;
                    break;
                }
            }
            foreach (IMItemBase item in this.imList)
            {
                if (item.ReferFreq(freq))
                {
                    result.RegisterIMItem(item);
                }
            }
            return(result);
        }
Exemplo n.º 5
0
 /// <summary>
 /// 计算接收机互调
 /// </summary>
 internal IMCompareResult ReceiverIM(IMOrder order)
 {
     this.imResult = new IMCompareResult();
     this.InitializeImOrder(order);
     foreach (Receiver receiver in this.stationreceivers)
     {
         this.currentReceiver = receiver;
         int start = BiSearchTransmitter(receiver.TuningFreqFrom, 0, stationtransmitters.Length - 1);
         int end   = BiSearchTransmitter(receiver.TuningRangeTo, start, stationtransmitters.Length - 1);
         this.endPosition = end;
         for (int i = start; i < end; i++)
         {
             for (int j = i + 1; j <= end; j++)
             {
                 if (this.currentReceiver.EquipID != this.stationtransmitters[i].EquipID &&
                     this.currentReceiver.EquipID != this.stationtransmitters[j].EquipID)
                 {
                     CalculateReceiverIM(stationtransmitters[i], j);
                 }
             }
         }
     }
     return(imResult);
 }
Exemplo n.º 6
0
        /// <summary>
        /// 互调干扰
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnIM_Click(object sender, RoutedEventArgs e)
        {
            imresult.Text = null;
            IMOrder          order      = IMOrder.Second | IMOrder.Third | IMOrder.Fifth;
            IMAnalysisResult result     = new IMAnalysisResult();
            IMCalculator     calculator = new IMCalculator(transmitters, receivers, transmitters, receivers);

            result.SetReceiverImResult(calculator.ReceiverIM(order));
            result.SetTransmitterImResult(calculator.TransmitterIM());

            StringBuilder strmsg = new StringBuilder();

            int index = 0;
            //接收互调
            IMCompareResult receiverResult = result.GetReceiverImResult();

            if (receiverResult != null)
            {
                strmsg.Append("接收机互调干扰: \r");
                IMItemBase imBase = null;

                for (int i = 0; i < receiverResult.Values.Length; i++)
                {
                    imBase = receiverResult.Values[i];
                    for (int j = 0; j < imBase.DisturbedFreqs.Length; j++)
                    {
                        index++;
                        ComparableFreq disfreq = imBase.DisturbedFreqs[j];
                        strmsg.AppendFormat("{0}:受干扰接收机: 频率ID:{1},频率:{2},带宽:{3} \r", index, disfreq.FreqID, disfreq.Freq, disfreq.Band);
                        strmsg.AppendFormat("干扰阶数:{0},干扰公式:{1} \r", GetIMOrder(imBase.Order), imBase.Formula);
                        for (int k = 0; k < imBase.IMFreqs.Length; k++)
                        {
                            strmsg.AppendFormat("干扰频率{0}:频率:{1},带宽:{2} \r", k + 1, imBase.IMFreqs[k].Freq, imBase.IMFreqs[k].Band);
                        }
                        strmsg.Append("\r");
                    }
                }
            }

            //发射机互调
            IMCompareResult transResult = result.GetTransmitterImResult();

            if (transResult != null && transResult.Values.Length > 0)
            {
                strmsg.Append("发射机互调干扰: \r");
                IMItemBase imBase = null;
                index = 0;
                for (int i = 0; i < transResult.Values.Length; i++)
                {
                    imBase = transResult.Values[i];
                    for (int j = 0; j < imBase.DisturbedFreqs.Length; j++)
                    {
                        index++;
                        ComparableFreq disfreq = imBase.DisturbedFreqs[j];
                        strmsg.AppendFormat("{0}:受干扰发射机: 频率ID:{1},频率:{2},带宽:{3} \r", index, disfreq.FreqID, disfreq.Freq, disfreq.Band);
                        strmsg.AppendFormat("干扰阶数:{0},干扰公式:{1} \r", GetIMOrder(imBase.Order), imBase.Formula);
                        for (int k = 0; k < imBase.IMFreqs.Length; k++)
                        {
                            strmsg.AppendFormat("干扰频率{0}:频率:{1},带宽:{2} \r", k + 1, imBase.IMFreqs[k].Freq, imBase.IMFreqs[k].Band);
                        }
                        strmsg.Append("\r");
                    }
                }
            }


            imresult.Text = strmsg.ToString();
        }
Exemplo n.º 7
0
 /// <summary>
 /// 设置发射机互调
 /// </summary>
 /// <param name="transmitterImResult">发射机互调结果</param>
 public void SetTransmitterImResult(IMCompareResult transmitterImResult)
 {
     this.transmitterImResult = transmitterImResult;
 }
Exemplo n.º 8
0
 /// <summary>
 /// 设置接收机互调
 /// </summary>
 /// <param name="receiverImResult">接收机互调结果</param>
 public void SetReceiverImResult(IMCompareResult receiverImResult)
 {
     this.receiverImResult = receiverImResult;
 }
Exemplo n.º 9
0
        /// <summary>
        /// 计算发射机互调
        /// </summary>
        internal IMCompareResult CalcTransmitterIMInterference()
        {
            this.imResult = new IMCompareResult();
            int length = this.stationtransmitters.Length;

            for (int i = 0; i < this.equtransmitters.Length; i++)
            {
                int    start = 0;
                int    end   = length - 1;
                double freqA = 2 * this.equtransmitters[i].Freq;

                for (int j = start; j <= end; j++)
                {
                    if (i == j || this.stationtransmitters[i].EquipID == this.stationtransmitters[j].EquipID)
                    {
                        continue;
                    }
                    double generateFreq = freqA - this.stationtransmitters[j].Freq;
                    foreach (Receiver receiver in this.stationreceivers)
                    {
                        if (receiver.EquipID == this.stationtransmitters[i].EquipID || receiver.EquipID == this.stationtransmitters[j].EquipID)
                        {
                            continue;
                        }
                        if (receiver.IsValidatingFreq(generateFreq))
                        {
                            double powerIn = CalcPowerIn(this.equtransmitters[i], this.equtransmitters[j], receiver);
                            if (receiver.IsValidatingSignal(powerIn))
                            {
                                //登记发射机互调
                                ThirdOrderIMItem item = new ThirdOrderIMItem(new ComparableFreq[] { this.stationtransmitters[i].ComparableFreq, this.stationtransmitters[j].ComparableFreq }, new int[] { 2, -1 });
                                item.DisturbedFreqs = new ComparableFreq[] { receiver.ComparableFreq };
                                this.imResult.RegisterIMItem(item);
                            }
                        }
                    }
                }
            }
            return(this.imResult);



            //this.imResult = new IMCompareResult();
            //int calclength = this.calctransmitters.Length;
            //for (int i = 0; i < calclength; i++)
            //{
            //    #region 在设备中计算互调

            //    int equstart = 0;
            //    int equend = calclength - 1;

            //    double freqA = 2 * this.calctransmitters[i].Freq;

            //    for (int j = equstart; j <= equend; j++)
            //    {
            //        if (i == j || this.calctransmitters[i].EquipID == this.calctransmitters[j].EquipID)
            //        {
            //            continue;
            //        }

            //        double generateFreq = freqA - this.calctransmitters[j].Freq;
            //        foreach (Receiver receiver in this.calcreceivers)
            //        {
            //            if (receiver.EquipID == this.calctransmitters[i].EquipID || receiver.EquipID == this.calctransmitters[j].EquipID)
            //                continue;
            //            if (receiver.IsValidatingFreq(generateFreq))
            //            {
            //                double powerIn = CalcPowerIn(this.calctransmitters[i], this.calctransmitters[j], receiver);
            //                if (receiver.IsValidatingSignal(powerIn))
            //                {
            //                    //登记发射机互调 将计算频率存在IMFreqs中
            //                    ThirdOrderIMItem item = new ThirdOrderIMItem(new ComparableFreq[] { this.calctransmitters[i].ComparableFreq, this.calctransmitters[j].ComparableFreq }, new int[] { 2, -1 });
            //                    item.DisturbedFreqs = new ComparableFreq[] { receiver.ComparableFreq }; //将另一个干扰频率存在DisturbedFreqs中
            //                    this.imResult.RegisterIMItem(item);
            //                }
            //            }
            //        }
            //    }
            //    #endregion

            //    #region 在周围台站中计算互调

            //    int complength = this.comptransmitters.Length;
            //    int statstart = 0;
            //    int statend = complength - 1;
            //    for (int j = statstart; j <= statend; j++)
            //    {
            //        if (i == j || this.calctransmitters[i].EquipID == this.comptransmitters[j].EquipID)
            //        {
            //            continue;
            //        }
            //        double generateFreq = freqA - this.comptransmitters[j].Freq;
            //        foreach (Receiver receiver in this.compreceivers)
            //        {
            //            if (receiver.EquipID == this.calctransmitters[i].EquipID || receiver.EquipID == this.comptransmitters[j].EquipID)
            //                continue;
            //            if (receiver.IsValidatingFreq(generateFreq))
            //            {
            //                double powerIn = CalcPowerIn(this.calctransmitters[i], this.comptransmitters[j], receiver);
            //                if (receiver.IsValidatingSignal(powerIn))
            //                {
            //                    //登记发射机互调 将计算频率存在IMFreqs中
            //                    ThirdOrderIMItem item = new ThirdOrderIMItem(new ComparableFreq[] { this.calctransmitters[i].ComparableFreq, this.comptransmitters[j].ComparableFreq }, new int[] { 2, -1 });
            //                    item.DisturbedFreqs = new ComparableFreq[] { receiver.ComparableFreq }; //将另一个干扰频率存在DisturbedFreqs中
            //                    this.imResult.RegisterIMItem(item);
            //                }
            //            }
            //        }
            //    }

            //    #endregion

            //}
            //return this.imResult;
        }
Exemplo n.º 10
0
        /// <summary>
        ///  计算接收机互调
        /// </summary>
        /// <param name="order"></param>
        /// <returns></returns>
        public IMCompareResult CalcReceiverIMInterference(IMOrder order)
        {
            this.imResult = new IMCompareResult();
            //this.InitializeImOrder(order);

            //遍历设备接收参数
            foreach (Receiver receiver in this.equreceivers)
            {
                this.currentReceiver = receiver;
                int equstart = 0;
                int equend   = equtransmitters.Length - 1;
                this.endPosition = equend;
                for (int e = equstart; e < equend; e++)
                {
                    for (int f = e + 1; f <= equend; f++)
                    {
                        if (this.currentReceiver.EquipID != this.equtransmitters[e].EquipID &&
                            this.currentReceiver.EquipID != this.equtransmitters[f].EquipID)
                        {
                            //CalculateReceiverIM(equtransmitters[e], f);

                            if ((order & IMOrder.Second) == IMOrder.Second)
                            {
                                CalcEquSecondOrderIM(equtransmitters[e], f);
                            }
                            if ((order & IMOrder.Third) == IMOrder.Third)
                            {
                                CalcEquThirdOrderIM(equtransmitters[e], f);
                            }
                            if ((order & IMOrder.Fifth) == IMOrder.Fifth)
                            {
                                CalcEquFifthOrderIM(equtransmitters[e], f);
                            }
                        }
                    }
                }

                int stationstart = 0;
                int stationend   = stationtransmitters.Length - 1;
                this.endPosition = stationend;
                for (int s = stationstart; s < stationend; s++)
                {
                    for (int k = s + 1; k <= stationend; k++)
                    {
                        if (this.currentReceiver.EquipID != this.stationtransmitters[s].EquipID &&
                            this.currentReceiver.EquipID != this.stationtransmitters[k].EquipID)
                        {
                            //CalculateReceiverIM(equtransmitters[s], k);

                            if ((order & IMOrder.Second) == IMOrder.Second)
                            {
                                CalcStationSecondOrderIM(stationtransmitters[s], k);
                            }
                            if ((order & IMOrder.Third) == IMOrder.Third)
                            {
                                CalcStationThirdOrderIM(stationtransmitters[s], k);
                            }
                            if ((order & IMOrder.Fifth) == IMOrder.Fifth)
                            {
                                CalcStationFifthOrderIM(stationtransmitters[s], k);
                            }
                        }
                    }
                }
            }
            return(imResult);
        }