/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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="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(); }
/// <summary> /// 设置发射机互调 /// </summary> /// <param name="transmitterImResult">发射机互调结果</param> public void SetTransmitterImResult(IMCompareResult transmitterImResult) { this.transmitterImResult = transmitterImResult; }
/// <summary> /// 设置接收机互调 /// </summary> /// <param name="receiverImResult">接收机互调结果</param> public void SetReceiverImResult(IMCompareResult receiverImResult) { this.receiverImResult = receiverImResult; }
/// <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; }
/// <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); }