⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 path_loss.cpp

📁 RFID reader 语 tag 模拟器
💻 CPP
字号:
 #include "path_loss.hpp" #include "utility.hpp" #include "wireless_comm_signal.hpp" #include "physical_layer.hpp" const double FreeSpace::m_DEFAULT_LOSS_FACTOR = 1.0; const double TwoRay::m_DEFAULT_ANTENNA_HEIGHT = 1.5; PathLoss::PathLoss() { } PathLoss::~PathLoss() { } FreeSpace::FreeSpace()    : m_lossFactor(m_DEFAULT_LOSS_FACTOR) {    assert(m_lossFactor >= 1.0); } FreeSpace::FreeSpace(double lossFactor)    : m_lossFactor(lossFactor) {    if(m_lossFactor < 1.0)       m_lossFactor = m_DEFAULT_LOSS_FACTOR;    assert(m_lossFactor >= 1.0); } TwoRay::TwoRay()    : FreeSpace(), m_antennaHeight(m_DEFAULT_ANTENNA_HEIGHT) { } TwoRay::TwoRay(double lossFactor)    : FreeSpace(lossFactor), m_antennaHeight(m_DEFAULT_ANTENNA_HEIGHT) { } double FreeSpace::getRecvdStrength(const WirelessCommSignal& signal,    const PhysicalLayer& receiver) const {    double numerator = decibelsToPower(signal.getDbStrength()) *       signal.getTransmitterGain() * receiver.getGain() *       pow(signal.getWavelength(), 2);    double distance = Location::distance(       signal.getLocation(), receiver.getLocation());    double denominator = pow((4.0 * PI), 2) *       pow(distance, 2) * m_lossFactor;    assert(denominator > 0.0);    return (numerator / denominator); } double TwoRay::getRecvdStrength(const WirelessCommSignal& signal,    const PhysicalLayer& receiver) const {    // These equations are largely from ns-2.  If the distance    // is less than crossoverDistance, then use the FreeSpace    // model; otherwise use the TwoRay model.    double crossoverDistance = (4 * PI *       m_antennaHeight * m_antennaHeight) / signal.getWavelength();    double distance = Location::distance(       signal.getLocation(), receiver.getLocation());    double recvdStrength = FreeSpace::getRecvdStrength(signal, receiver);    if(m_DEBUG_SIGNAL_STRENGTH) {       ostringstream debugStream;       debugStream << __FUNCTION__ << " crossover: " <<          crossoverDistance << ", dist: " << distance <<          ", FS SS: " << recvdStrength;       LogStreamManager::instance()->logDebugItem(debugStream.str());    }    // If the distance is greater, use the Two Ray equation.    if(distance > crossoverDistance) {       double numerator = decibelsToPower(signal.getDbStrength()) *          signal.getTransmitterGain() * receiver.getGain() *          pow(m_antennaHeight, 2) * pow(m_antennaHeight, 2);       double denominator = pow(distance, 4) * m_lossFactor;       assert(denominator > 0.0);       recvdStrength = numerator / denominator;    }    return recvdStrength; }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -