Source code for pytwinnet.scheduling.association

from __future__ import annotations
from typing import Dict, List
from ..core.digital_twin import DigitalTwin
from ..physics.link_budget import rx_power_dbm
from ..physics.propagation import PropagationModel
from ..physics.environment import Environment

[docs] def max_rsrp_association(twin: DigitalTwin, tx_ids: List[str], ue_ids: List[str]) -> Dict[str, str]: """Associate each UE to the TX (gNB) with the strongest RSRP.""" pm: PropagationModel = twin.propagation_model env: Environment = twin.environment out: Dict[str, str] = {} for ue_id in ue_ids: ue = twin.network.get_node_by_id(ue_id) best_tx, best_p = None, float("-inf") for tx_id in tx_ids: tx = twin.network.get_node_by_id(tx_id) pl_db = pm.calculate_path_loss(tx, ue, env) prx_dbm = rx_power_dbm( tx.transceiver_properties.transmit_power_dbm, tx.transceiver_properties.antenna_gain_dbi, ue.transceiver_properties.antenna_gain_dbi, pl_db, ) if prx_dbm > best_p: best_p, best_tx = prx_dbm, tx_id if best_tx is not None: out[ue_id] = best_tx return out