/// <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="one">计算互调用发射机</param> /// <param name="other">另一个计算互调用发射机</param> private void RegisterThirdOrderIMItem(Transmitter one, Transmitter other) { double freqValue = one.Freq * 2 - other.Freq; if (freqValue > 0 && this.currentReceiver.IsValidatingFreq(freqValue)) { double pinA = PowerIn(one, this.currentReceiver); double pinB = PowerIn(other, this.currentReceiver); double deviation = Math.Round((Math.Abs(one.Freq - this.currentReceiver.Freq) + Math.Abs(other.Freq - this.currentReceiver.Freq)) / 2, 4, MidpointRounding.AwayFromZero); double powerIn = 2 * pinA + pinB + 10 - 60 * Math.Log10(deviation); if (this.currentReceiver.IsValidatingSignal(powerIn)) { ThirdOrderIMItem item = new ThirdOrderIMItem(new ComparableFreq[] { one.ComparableFreq, other.ComparableFreq }, new int[] { 2, -1 }); item.DisturbedFreqs = new ComparableFreq[] { this.currentReceiver.ComparableFreq }; this.imResult.RegisterIMItem(item); } } }
/// <summary> /// 登记三阶互调 /// </summary> ///<param name="one">第一个发射机</param> ///<param name="two">第二个发射机</param> ///<param name="three">第三个发射机</param> private void RegisterThirdOrderIMItem(Transmitter one, Transmitter two, Transmitter three) { double freqValue = one.Freq + two.Freq - three.Freq; if (this.currentReceiver.IsValidatingFreq(freqValue)) { double deviation = Math.Round((Math.Abs(one.Freq - this.currentReceiver.Freq) + Math.Abs(two.Freq - this.currentReceiver.Freq)) + Math.Abs(three.Freq - this.currentReceiver.Freq) / 3, 4, MidpointRounding.AwayFromZero); double pinA = PowerIn(one, this.currentReceiver); double pinB = PowerIn(two, this.currentReceiver); double pinC = PowerIn(three, this.currentReceiver); double powerIn = 2 * pinA + pinB + pinC - 81 * Math.Log10(deviation); if (this.currentReceiver.IsValidatingSignal(powerIn)) { ThirdOrderIMItem item = new ThirdOrderIMItem(new ComparableFreq[] { one.ComparableFreq, two.ComparableFreq, three.ComparableFreq }, new int[] { 1, 1, -1 }); item.DisturbedFreqs = new ComparableFreq[] { this.currentReceiver.ComparableFreq }; this.imResult.RegisterIMItem(item); } } }
/// <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; }