/// <summary> /// 从参数指定的天线加载信息,选择行加载,保留当前对象已有的合法数据 /// </summary> /// <param name="ant">要加载的参考天线信息</param> public void FillFrom(Antenna ant) { if (!angle.DataInitialized) { this.angle.CopyFrom(ant.angle); } if (!this.antHeight.DataInitialized) { this.antHeight.CopyFrom(ant.antHeight); } if (!this.azimuth.DataInitialized) { this.azimuth.CopyFrom(ant.azimuth); } if (!this.feedLength.DataInitialized) { this.feedLength.CopyFrom(ant.feedLength); } if (!this.feedLoss.DataInitialized) { this.feedLoss.CopyFrom(ant.feedLoss); } if (!this.gain.DataInitialized) { this.gain.CopyFrom(ant.gain); } if (this.polar == EMCPolarisationEnum.None) { this.polar = ant.polar; } }
/// <summary> /// 从参数指定的天线加载信息,覆盖当前对象的数据 /// </summary> /// <param name="ant">要加载的参考天线信息</param> public void CopyFrom(Antenna ant) { this.angle.CopyFrom(ant.angle); this.antHeight.CopyFrom(ant.antHeight); this.azimuth.CopyFrom(ant.azimuth); this.feedLength.CopyFrom(ant.feedLength); this.feedLoss.CopyFrom(ant.feedLoss); this.gain.CopyFrom(ant.gain); this.polar = ant.polar; }
/// <summary> /// 获取当前发射机到目标天线的隔离衰减 /// </summary> /// <param name="antenna">目标天线</param> /// <param name="mDistance">距离目标天线距离</param> /// <returns>隔离衰减</returns> public double GetIsolationAttenuationToAntenna(Antenna antenna, double mDistance) { double attenuation = 0; if (this.Antenna.Polar == EMCPolarisationEnum.V && antenna.Polar == EMCPolarisationEnum.V) { //按照垂直计算AC attenuation = 37.5 * Math.Log10(Math.Abs(antenna.AntHeight.MValue - this.transmitterParams.Antenna.AntHeight.MValue)) + 40.3 * Math.Log10(this.Freq) - 63.87; } else { //按照水平计算AC attenuation = 20 * Math.Log10(mDistance) + 21 * Math.Log10(this.Freq) - 23.9; } return(attenuation); }
///// <summary> ///// 该发射机到参数发射机的垂直防止隔离衰减 ///// </summary> ///// <param name="disturbedTransmitter">被干扰发射机</param> ///// <returns></returns> //public double GetVerticalAc(Transmitter disturbedTransmitter) //{ // double diff = Math.Abs(this.transmitterParams.Antenna.AntHeight.m_Value - disturbedTransmitter.transmitterParams.Antenna.AntHeight.m_Value); // if (diff < 0.0001) // { // diff = 0.0001; // } // return 37.5 * Math.Log10(diff) + 40.3 * Math.Log10(this.Freq) - 63.87; //} //public double GetHorizontalAC(Transmitter disturbedTransmitter,EMCLengthValue distance) //{ // double diff = 0.1; // if (distance!=null && distance.m_Value>0.1) // { // diff = distance.m_Value; // } // return 20 * Math.Log10(diff) + 21 * Math.Log10(this.Freq) - 23.9; //} /// <summary> /// 获取发射机到目标天线的隔离衰减 /// </summary> /// <param name="destAnt">天线位置</param> /// <param name="distance">到目标天线距离</param> /// <returns>发射机到目标天线的隔离衰减</returns> public double GetAc(Antenna destAnt, EMCLengthValue distance) { if (this.transmitterParams.Antenna.Polar == EMCPolarisationEnum.V && destAnt.Polar == EMCPolarisationEnum.V) { double diff = Math.Abs(this.transmitterParams.Antenna.AntHeight.MValue - destAnt.AntHeight.MValue); if (diff < 0.0001) { diff = 0.0001; } return(37.5 * Math.Log10(diff) + 40.3 * Math.Log10(this.Freq) - 63.87); } else { double diff = 0.1; if (distance != null && distance.MValue > 0.1) { diff = distance.MValue; } return(20 * Math.Log10(diff) + 21 * Math.Log10(this.Freq) - 23.9); } }
/// <summary> /// 默认构造函数 /// </summary> public ReceiverParams() { receiverParamsID = Guid.NewGuid().ToString(); ant = new Antenna(); ant.AntennaKind = AntennaKindEnum.Receive; }
/// <summary> /// 默认构造函数 /// </summary> public TransmitterParams() { transmitterParamsID = Guid.NewGuid().ToString(); ant = new Antenna(); ant.AntennaKind = AntennaKindEnum.Send; }