Example #1
0
        /// <summary>
        /// 清理重复干扰结果
        /// </summary>
        public void CleanRepeatDisturbResult()
        {
            for (int i = 0; i < this.imList.Count; i++)
            {
                if (imList[i] != null && imList[i].DisturbedFreqs.Length == 1)
                {
                    IMOrder          order = this.imList[i].Order;
                    ComparableFreq[] freqs = this.GetCalcFreqs(imList[i]);
                    Array.Sort(freqs);
                    for (int j = i + 1; j < this.imList.Count; j++)
                    {
                        if (this.imList[j] != null && this.imList[j].Order == order &&
                            this.imList[j].DisturbedFreqs.Length == 1)
                        {
                            ComparableFreq[] refFreqs = this.GetCalcFreqs(imList[j]);
                            Array.Sort(refFreqs);
                            if (CompareFreqsArray(freqs, refFreqs))
                            {
                                this.imList[j] = null;
                            }
                        }
                    }
                }
            }
            List <IMItemBase> list = new List <IMItemBase>(imList.Count);

            foreach (IMItemBase item in imList)
            {
                if (item != null)
                {
                    list.Add(item);
                }
            }
            imList = list;
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="equs">设备集合</param>
        /// <param name="aroundstation">周围台站集合</param>
        /// <param name="analysisType">非法信息</param>
        /// <returns></returns>
        public static InterferenceAnalysisResult Calculator(List <ActivityEquipment> equs, List <ActivitySurroundStation> aroundstation,
                                                            AnalysisType analysisType)
        {
            ConvertToCalcCondition(equs, aroundstation);

            InterferenceAnalysisResult Interfresult = new InterferenceAnalysisResult();

            if ((analysisType & AnalysisType.SameFreq) == AnalysisType.SameFreq)
            {
                //同频干扰计算
                SameFreqCalculator      samefreqCalc     = new SameFreqCalculator(EquFreqs, StationFreqs);
                SameFreqCompareResult[] sameInterfResult = samefreqCalc.CalcSameFreqInterference();
                if (sameInterfResult != null && sameInterfResult.Length > 0)
                {
                    Interfresult.SameFreqInterfResult      = sameInterfResult;
                    Interfresult.SameFreqInterfResultCount = sameInterfResult.Length;
                }
            }

            if ((analysisType & AnalysisType.ADJFreq) == AnalysisType.ADJFreq)
            {
                //邻频干扰计算
                AdjFreqCalculator      adjfreqCalc     = new AdjFreqCalculator(EquFreqs, StationFreqs);
                AdjFreqCompareResult[] adjInterfResult = adjfreqCalc.CalcAdjFreqInterference();
                if (adjInterfResult != null && adjInterfResult.Length > 0)
                {
                    Interfresult.ADJFreqInterfResult      = adjInterfResult;
                    Interfresult.ADJFreqInterfResultCount = adjInterfResult.Length;
                }
            }

            if ((analysisType & AnalysisType.IM) == AnalysisType.IM)
            {
                //互调干扰计算
                IMOrder          order      = IMOrder.Second | IMOrder.Third | IMOrder.Fifth;
                IMAnalysisResult imresult   = new IMAnalysisResult();
                IMCalculator     calculator = new IMCalculator(EquTransmitters, EquReceivers, StationTransmitters, StationReceivers);
                imresult.SetReceiverImResult(calculator.CalcReceiverIMInterference(order));
                //imresult.SetTransmitterImResult(calculator.CalcTransmitterIMInterference());
                if (imresult != null)
                {
                    Interfresult.IMInterfResult = imresult;
                    int transcount  = 0;
                    int receivcount = 0;
                    if (imresult.GetReceiverImResult() != null && imresult.GetReceiverImResult().Values.Length > 0)
                    {
                        receivcount = imresult.GetReceiverImResult().Values.Length;
                    }
                    //if (imresult.GetTransmitterImResult() != null && imresult.GetTransmitterImResult().Values.Length > 0)
                    //{
                    //    transcount = imresult.GetTransmitterImResult().Values.Length;
                    //}
                    Interfresult.IMInterfResultCount = transcount + receivcount;
                }
            }
            return(Interfresult);
        }
        /// <summary>
        /// 获取互调干扰阶数
        /// </summary>
        /// <param name="order"></param>
        /// <returns></returns>
        private InterfereOrderEnum GetIMInterfOrder(IMOrder order)
        {
            switch (order)
            {
            case IMOrder.Second:
                return(InterfereOrderEnum.二阶互调);

            case IMOrder.Third:
                return(InterfereOrderEnum.阶互调);

            case IMOrder.Fifth:
                return(InterfereOrderEnum.五阶互调);
            }
            return(InterfereOrderEnum.干扰);
        }
Example #4
0
        private string GetIMOrder(IMOrder order)
        {
            switch (order)
            {
            case IMOrder.Second:
                return("二阶干扰");

            case IMOrder.Third:
                return("二阶干扰");

            case IMOrder.Fifth:
                return("二阶干扰");

            default: return(null);
            }
            return(null);
        }
Example #5
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);
        }
Example #6
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);
        }
Example #7
0
        /// <summary>
        /// 初始化互调阶数
        /// </summary>
        /// <param name="order">互调阶数</param>
        private void InitializeImOrder(IMOrder order)
        {
            if (order != this.imOrder)
            {
                this.CalculateReceiverIM -= CalcSecondOrderIM;
                this.CalculateReceiverIM -= this.CalcThirdOrderIM;
                this.CalculateReceiverIM -= CalcFifthOrderIM;

                if ((order & IMOrder.Second) == IMOrder.Second)
                {
                    //this.CalculateReceiverIM += CalcSecondOrderIM;
                }
                if ((order & IMOrder.Third) == IMOrder.Third)
                {
                    this.CalculateReceiverIM += this.CalcThirdOrderIM;
                }
                if ((order & IMOrder.Fifth) == IMOrder.Fifth)
                {
                    this.CalculateReceiverIM += CalcFifthOrderIM;
                }
                this.imOrder = order;
            }
        }
Example #8
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);
 }
        /// <summary>
        /// 计算的实现
        /// </summary>
        /// <param name="p_calculateAllFreqs"></param>
        /// <param name="p_calculateAllRCFreqs"></param>
        /// <param name="p_unKnowSignalFreqs"></param>
        private void CalculateRealize(List <ComparableFreq> p_calculateAllFreqs, List <ComparableFreq> p_calculateAllRCFreqs, List <ComparableFreq> p_unKnowSignalFreqs)
        {
            #region
            //if(p_unKnowSignalFreqs.Count > 15)
            //{
            //    //发 106.5 ,96.8 收 106 , 96.8
            //    p_unKnowSignalFreqs[0] = new ComparableFreq(106.4, 0, 0, 0.5, ""); //同频
            //    p_unKnowSignalFreqs[1] = new ComparableFreq(96.8, 0, 0, 0.200, "");  //同频

            //    p_unKnowSignalFreqs[2] = new ComparableFreq(105.5, 0, 0, 0.400, ""); //邻频
            //    p_unKnowSignalFreqs[3] = new ComparableFreq(107.5, 0, 0, 0.400, ""); //邻频
            //    p_unKnowSignalFreqs[4] = new ComparableFreq(95.8, 0, 0, 0.400, "");  //邻频
            //    p_unKnowSignalFreqs[5] = new ComparableFreq(97.8, 0, 0, 0.400, "");  //邻频

            //    p_unKnowSignalFreqs[6] = new ComparableFreq(206, 0, 0, 0.400, "");  //二阶互调
            //    p_unKnowSignalFreqs[7] = new ComparableFreq(100, 0, 0, 0.400, "");  //二阶互调
            //    p_unKnowSignalFreqs[8] = new ComparableFreq(50, 0, 0, 0.400, "");   //二阶互调
            //    p_unKnowSignalFreqs[9] = new ComparableFreq(56, 0, 0, 0.400, "");   //二阶互调

            //    p_unKnowSignalFreqs[10] = new ComparableFreq(90, 0, 0, 0.400, "");     //三阶互调
            //    p_unKnowSignalFreqs[11] = new ComparableFreq(106.8, 0, 0, 0.400, "");  //三阶互调
            //    p_unKnowSignalFreqs[12] = new ComparableFreq(100, 0, 0, 0.400, "");    //三阶互调

            //    p_unKnowSignalFreqs[13] = new ComparableFreq(95, 0, 0, 0.400, "");     //五阶互调
            //    p_unKnowSignalFreqs[14] = new ComparableFreq(94.1, 0, 0, 0.400, "");   //五阶互调
            //}
            #endregion



            CompareResultToBindingData bindingData = new CompareResultToBindingData(GetEquipment, GetSurroundStation);
            //同频干扰
            List <InterferedBindingData> gridSource   = new List <InterferedBindingData>();
            SameFreqCalculator           samefreqCalc = new SameFreqCalculator(p_calculateAllFreqs.ToArray(), p_unKnowSignalFreqs.ToArray());
            SameFreqCompareResult[]      sameResults  = samefreqCalc.CalcSameFreqInterference();
            if (sameResults != null && sameResults.Length > 0)
            {
                foreach (var sameResult in sameResults)
                {
                    List <InterferedBindingData> sameFreqlist = bindingData.GetBindingData(sameResult);
                    gridSource.AddRange(sameFreqlist);
                }
            }

            //邻频干扰
            AdjFreqCalculator      adjfreqCalc     = new AdjFreqCalculator(p_calculateAllFreqs.ToArray(), p_unKnowSignalFreqs.ToArray());
            AdjFreqCompareResult[] adjInterfResult = adjfreqCalc.CalcAdjFreqInterference();
            if (adjInterfResult != null && adjInterfResult.Length > 0)
            {
                List <InterferedBindingData> adjFreqlist = bindingData.GetBindingData(adjInterfResult);
                gridSource.AddRange(adjFreqlist);
            }
            //互调干扰
            IMCalculator    calculator     = new IMCalculator(GetTransmitter(p_unKnowSignalFreqs), new Receiver[0], GetTransmitter(p_calculateAllFreqs), GetReceivers(p_calculateAllRCFreqs));
            IMOrder         order          = IMOrder.Second | IMOrder.Third | IMOrder.Fifth;
            IMCompareResult imInterfResult = calculator.CalcReceiverIMInterference(order);
            if (imInterfResult != null)
            {
                List <InterferedBindingData> imFreqlist = bindingData.GetBindingData(imInterfResult);
                gridSource.AddRange(imFreqlist);
            }
            ItemsSourceBinding(gridSource);
        }
Example #10
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();
        }
Example #11
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);
        }