Source code for sionna.rt.radio_devices.transmitter

#
# SPDX-FileCopyrightText: Copyright (c) 2021-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#

"""Class implementing a transmitter"""

import mitsuba as mi
from typing_extensions import Tuple, Self

from .radio_device import RadioDevice
from sionna.rt.utils import dbm_to_watt
from sionna.rt.constants import DEFAULT_TRANSMITTER_COLOR, \
                                DEFAULT_TRANSMIT_POWER_DBM


[docs] class Transmitter(RadioDevice): # pylint: disable=line-too-long r""" Class defining a transmitter :param name: Name :param position: Position :math:`(x,y,z)` [m] :param power_dbm: Transmit power [dBm] :param orientation: Orientation specified through three angles :math:`(\alpha, \beta, \gamma)` corresponding to a 3D rotation as defined in :eq:`rotation`. This parameter is ignored if ``look_at`` is not :py:class:`None`. :param look_at: A position or the instance of :class:`~sionna.rt.RadioDevices` to look at. If set to :py:class:`None`, then ``orientation`` is used to orientate the device. :param velocity: Velocity vector of the transmitter [m/s] :param color: Defines the RGB (red, green, blue) ``color`` parameter for the device as displayed in the previewer and renderer. Each RGB component must have a value within the range :math:`\in [0,1]`. :param display_radius: Defines the radius, in meters, of the sphere that will represent this device when displayed in the previewer and renderer. If not specified, the radius will be chosen automatically using a heuristic. """ def __init__(self, name: str, position: mi.Point3f, orientation: mi.Point3f | None = None, look_at: mi.Point3f | Self | None = None, velocity: mi.Vector3f | None = None, power_dbm=DEFAULT_TRANSMIT_POWER_DBM, color: Tuple[float, float, float] = DEFAULT_TRANSMITTER_COLOR, display_radius: float | None = None): super().__init__(name=name, position=position, orientation=orientation, look_at=look_at, velocity=velocity, color=color, display_radius=display_radius) self.power_dbm = power_dbm @property def power_dbm(self): """ Get/set transmit power [dBm] :type: :py:class:`mi.ScalarFloat` """ return self._power_dbm @power_dbm.setter def power_dbm(self, value): self._power_dbm = mi.Float(value) @property def power(self): """ Get the transmit power [W] :type: :py:class:`mi.Float` """ return dbm_to_watt(self._power_dbm)