如何基于损耗因子计算通信范围及对应实现代码解析
代码功能说明
这段是INET网络仿真框架中MediumLimitCache类的核心方法,作用是根据给定的发射功率、接收灵敏度计算当前无线介质下的理论最大通信距离。
逐行逻辑解释
- 函数定义:
m MediumLimitCache::computeMaxRange(W maxTransmissionPower, W minReceptionPower) const
输入参数maxTransmissionPower是发射端最大发射功率(单位瓦W),minReceptionPower是接收端可正常解码的最低接收功率(即接收灵敏度,单位瓦W),返回值单位为米(m),对应计算得到的最大通信距离。 - 第一行逻辑:
Hz centerFrequency = Hz(par("centerFrequency"));
从仿真模块的NED配置参数中读取当前通信使用的中心频率,转换为赫兹(Hz)单位存储。 - 第二行核心损耗计算:
double loss = unit(minReceptionPower / maxTransmissionPower).get() / maxAntennaGain / maxAntennaGain;
你已知的自由空间路径损耗公式为FSPL = Pt/Pr = (4*pi*d*f/c)^2,其中Pt为发射功率,Pr为接收功率,d为通信距离,f为中心频率,c为电磁波传播速度。
这里计算的loss参数是允许的路径损耗倒数:- 先计算
minReceptionPower / maxTransmissionPower即Pr/Pt,对应无天线增益时的路径损耗倒数 - 除以两次
maxAntennaGain,是因为收发两端的全向天线各有增益,会分别放大发射功率和接收功率,最终等效于可承受的路径损耗更大,所以要把双向天线增益的影响纳入损耗因子计算
- 先计算
- 第三行距离计算:
return radioMedium->getPathLoss()->computeRange(radioMedium->getPropagation()->getPropagationSpeed(), centerFrequency, loss);
调用当前仿真配置的路径损耗模型的距离计算接口,传入三个参数:电磁波传播速度(空气环境下默认接近光速)、通信中心频率、上一步计算得到的损耗因子。
如果你配置的是自由空间路径损耗模型,该接口内部会把你已知的FSPL公式反解求d:d = c/(4πf) * sqrt(Pt*Gt*Gr/Pr),最终返回得到的最大通信距离。如果配置的是其他路径损耗模型(比如对数距离模型、两径模型),则会调用对应模型的公式计算距离,这段代码是通用上层逻辑,不绑定特定路径损耗模型。
内容的提问来源于stack exchange,提问作者128933
相关产品推荐
相关产品推荐

