========= Antennas ========= The simulation module extends the core module's antenna descriptions by modeling radio-frequency chains connected to antenna arrays and directive polarization / gain characteristics of individual antennna elements within the array. Simulated antenna arrays are described by the :class:`SimulatedAntennaArray<hermespy.simulation.antennas.SimulatedAntennaArray>` class. On the surface, this description contains a combination of a set of available :class:`SimulatedAntennaPorts<hermespy.simulation.antennas.SimulatedAntennaPort>`, to which :class:`RfChains<hermespy.simulation.rf_chain.rf_chain.RfChain>` feeding one or multiple :class:`SimulatedAntenna<hermespy.simulation.antennas.SimulatedAntenna>` elements are connected. In a fully digitally controlled antenna array, each port feeds a single antenna element over a dedicated RF-chain: .. mermaid:: :align: center %%{init: {"flowchart":{"useMaxWidth": false}}}%% flowchart LR porta[Antenna Port] --> rfa[RF-Chain] --> anta[Antenna] portb[Antenna Port] --> rfb[RF-Chain] --> antb[Antenna] x[⋮]:::invis ~~~ b[⋮]:::invis ~~~ c[⋮]:::invis portc[Antenna Port] --> rfc[RF-Chain] --> antc[Antenna] classDef invis fill-opacity:0,stroke-opacity:0,font-weight:bold; click porta "antennas.SimulatedAntennaPort.html" "Simulated Antenna Port" click portb "antennas.SimulatedAntennaPort.html" "Simulated Antenna Port" click portc "antennas.SimulatedAntennaPort.html" "Simulated Antenna Port" click rfa "rf_chain.html" "RF-Chain" click rfb "rf_chain.html" "RF-Chain" click rfc "rf_chain.html" "RF-Chain" click anta "antennas.SimulatedAntenna.html" "Simulated Antenna" click antb "antennas.SimulatedAntenna.html" "Simulated Antenna" click antc "antennas.SimulatedAntenna.html" "Simulated Antenna" Manually defining an antenna array this way can be achieved by instantiating the :class:`SimulatedCustomArray<hermespy.simulation.antennas.SimulatedCustomArray>` class and individually adding the desired antenna elements, which will automatically be connected to a new RF-chain and antenna port: .. literalinclude:: ../../scripts/examples/simulation_antennas.py :language: python :linenos: :lines: 13-17 In this example, :class:`SimulatedPatchAntennas<hermespy.simulation.antennas.SimulatedPatchAntenna>` are uniformly distributed along the array's x-axis, with a spacing of 0.5 wavelengths, effectively creating a uniform linear array. The antenna elements are connected to a :class:`RfChain<hermespy.simulation.rf_chain.rf_chain.RfChain>`, respectively. Since this is a rather common antenna configuration, the shorthand :class:`SimulatedUniformArray<hermespy.simulation.antennas.SimulatedUniformArray>` class can be used to create the same antenna array: .. literalinclude:: ../../scripts/examples/simulation_antennas.py :language: python :linenos: :lines: 22 In this case, instead of patch antennas, the array is populated with ideal isotropic antennas. When simulating analog or hybrid antenna arrays, a single RF-chain can feed multiple antenna elements. .. mermaid:: :align: center %%{init: {"flowchart":{"useMaxWidth": false}}}%% flowchart LR porta[Antenna Port] --> rfa[RF-Chain] --> antaa[Antenna] & antab[⋮]:::invis & antac[Antenna] classDef invis fill-opacity:0,stroke-opacity:0,font-weight:bold; click porta "antennas.SimulatedAntennaPort.html" "Simulated Antenna Port" click rfa "rf_chain.html" "RF-Chain" click antaa "antennas.SimulatedAntenna.html" "Simulated Antenna" click antac "antennas.SimulatedAntenna.html" "Simulated Antenna" This can be modeled by assigning multiple antenna elements to the same antenna port: .. literalinclude:: ../../scripts/examples/simulation_antennas.py :language: python :linenos: :lines: 26-35 The snippet initializes a antenna array featuring 10 antenna ports, each feeding 5 antenna elements, so that the array is populated with 50 antenna elements in total. Within the context of a full simulation, antenna arrays are assigned as a configuration property to :class:`SimulatedDevices<hermespy.simulation.simulated_device.SimulatedDevice>`: .. literalinclude:: ../../scripts/examples/simulation_antennas.py :language: python :linenos: :lines: 39-41 .. toctree:: :hidden: :maxdepth: 2 antennas.SimulatedAntennaArray antennas.SimulatedAntenna antennas.SimulatedAntennaPort .. footbibliography::