Skip to main content

The Heterogeneous Radio Mobile Simulator

Project description

HermesPy

HermesPy (Heterogeneous Radio Mobile Simulator - Python) is a semi-static link-level simulator based on time-driven mechanisms.

It provides a framework for the link-level simulation of multi-RAT wireless sensing and communication links, consisting of multiple transmit and receive devices, which may operate at different carrier frequencies and bandwidths. Digital signal processing algorithms implemented in HermesPy's API can be investigated within full-scale Monte-Carlo simulation campaigns deployable to high-performance computing clusters or applied directly within software defined radio testbeds.

For detailed a full API documentation, please consult the official documentation website.

The project is completely open-source and published under the GNU AGPL License on GitHub. Please cite Adler et al for any results obtained with the help of HermesPy. Contributions are highly welcome and can be made by means of GitHub pull requests. For issue reports and feature requests please open a new GitHub issue or directly contact the current maintainer.

Installation

The recommended installation method for end-users of HermesPy is pulling the pre-built wheels from PyPI by executing

python -m pip install hermespy

in a Python environment of version 3.10 to 3.12. The current development version can be cloned from GitHub and installed as an editable by executing

git clone --recursive git@github.com:Barkhausen-Institut/hermespy.git
cd hermespy
python -m pip install -v -e .

Detailed installation instructions as well as a list of optional feature flags can be found in the respective documentation section.

Quick Start

The following examples provide a starting point for understanding HermesPy's high-level API. There are three modules providing digital signal processing algorithms: Modem for communications, radar for sensing and jcas for joint applications.

from hermespy.modem import ReceivingModem, RRCWaveform, BitErrorEvaluator
from hermespy.radar import Radar, FMCW
from hermespy.jcas import MatchedFilterJcas

# Initialize a DSP algorithm from each module
com = ReceivingModem(waveform=RRCWaveform())
sense = Radar(waveform=FMCW(num_chirps=100, pulse_rep_interval=3e-6))
joint = MatchedFilterJcas(10.0, waveform=RRCWaveform())

# Initialize an exemplary KPI evaluation routine
ber = BitErrorEvaluator(joint, com, plot_surface=False)

Digital signal processing algorithms and their respective evaluation routines may be deployed to simulation campaigns by assigning them to device models initialized from the simulation module. API users can configure sweeps over parameters of interest during simulation runtime by assigning multiple values to any object property via the new dimension interface.

import matplotlib.pyplot as plt
from hermespy.core import dB
from hermespy.simulation import Simulation

# Initialize a simulation running each DSP algorithm on a dedicated device
sim = Simulation(seed=42)
sim.new_device(carrier_frequency=1e9).add_dsp(com)
sim.new_device(carrier_frequency=26e9).add_dsp(sense)
sim.new_device(carrier_frequency=1e9).add_dsp(joint)

# Configure the simulation to run the KPI evaluation routine
sim.add_evaluator(ber)

# Configure the simulation to sweep over two parameter dimensions
sim.new_dimension('noise_level', dB(-20, -10, 0, 10, 20, 30), *sim.devices)
sim.new_dimension('carrier_frequency', [1e9, 13e9, 26e9], sim.devices[0], title="CF")

# Run the simulation and plot the results
sim.num_samples = 200
sim.run().plot()
plt.show()

The same evaluations carried out within distributed simulation campaigns can be deployed within real hardware testbeds by assigning digital signal processing algorithms and evaluation routines to devices initialized from the hardware loop module instead.

import matplotlib.pyplot as plt
from hermespy.hardware_loop import HardwareLoop, PhysicalScenarioDummy, ReceivedConstellationPlot

# Initialize a hardware loop running each DSP algorithm on a dedicated device
loop = HardwareLoop(PhysicalScenarioDummy(seed=42))
loop.new_device(carrier_frequency=1e9).add_dsp(sense)
loop.new_device(carrier_frequency=1e9).add_dsp(com)
loop.new_device(carrier_frequency=1e9).add_dsp(joint)

# Configure the hardware loop to run the KPI evaluation routine
loop.add_evaluator(ber)

# Configure the hardware loop to sweep over a parameter dimension
loop.new_dimension('power', dB(-30, -20, -10, 0, 10), loop.scenario.devices[0], title="Interference Power")

# Configure the hardware loop to visualize a received signal
loop.add_plot(ReceivedConstellationPlot(com, 'Rx Constellation'))

# Run the hardware loop and plot the results
loop.num_drops = 10
loop.run().plot()
plt.show()

More examples like this can be found in the following locations:

Link Description
Getting Started Introductory examples for inexperienced users
Advanced Examples for advanced users
Notebooks Full Jupyter notebooks for advanced users and developers
Snippets Executable API snippets shown throughout the documentation

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hermespy-1.6.0.tar.gz (5.6 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

hermespy-1.6.0-cp313-cp313-win_amd64.whl (536.0 kB view details)

Uploaded CPython 3.13Windows x86-64

hermespy-1.6.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (15.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

hermespy-1.6.0-cp312-cp312-win_amd64.whl (536.1 kB view details)

Uploaded CPython 3.12Windows x86-64

hermespy-1.6.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (15.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

hermespy-1.6.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (15.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

File details

Details for the file hermespy-1.6.0.tar.gz.

File metadata

  • Download URL: hermespy-1.6.0.tar.gz
  • Upload date:
  • Size: 5.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for hermespy-1.6.0.tar.gz
Algorithm Hash digest
SHA256 81cfc456cf7b580326b34db818f818fbb2bcc8e7ed10d9ccc9d673a218d98fab
MD5 6dca9199be6055807e89489f70156268
BLAKE2b-256 cb63b4dc22428e76953bfcb79cba024173ac3b60c3a6f8abdc92771af0d856db

See more details on using hashes here.

File details

Details for the file hermespy-1.6.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: hermespy-1.6.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 536.0 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for hermespy-1.6.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 30ef1bfeee6f9fac980c366f1a2c696b824eb957ab54d38e65338b08521bf6e4
MD5 247c6c2c5357606c80d13e91acaa053a
BLAKE2b-256 744dbe60fbe08383b9af830dea5d72199aada619235c056ddef14dac6eb7d612

See more details on using hashes here.

File details

Details for the file hermespy-1.6.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for hermespy-1.6.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2ce932d935b5b1282b9f884e23678d0a097db70f88230cb01f7730c2ef9d6c5e
MD5 1e694deb66fabc4cf803cabf5268e9b4
BLAKE2b-256 04b678af5148132536c3c7cb8f13307600ff05ef758180ae60244fb6f5a47683

See more details on using hashes here.

File details

Details for the file hermespy-1.6.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: hermespy-1.6.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 536.1 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for hermespy-1.6.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 dcd175320032c476577fa8b5499817f0d2fbbbe78b84ea5e245f2770971b02bc
MD5 b71fa85c1c361ef321def33505b235c8
BLAKE2b-256 fa6cfc1a5868936c87f44aac039915e0a1ef0c0c1b3fd02be4c52025e6456139

See more details on using hashes here.

File details

Details for the file hermespy-1.6.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for hermespy-1.6.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 032f1df496b44cbfae8a1d9a0e9c6efb89e402537c55b373e2706ae67c8be3e2
MD5 cf457720026302eebc3025d340dc6519
BLAKE2b-256 567f400fe29eb460c43c42fbc4f5800df984dbf84f4e6d0128a0bb3e29bc3026

See more details on using hashes here.

File details

Details for the file hermespy-1.6.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for hermespy-1.6.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a4803c8b9865e6fedd59775e4b8d2b6a42745b8cc37e5677ecfbe1b11232d804
MD5 860b099f3f34abc3598b6d555e44e4c5
BLAKE2b-256 681eff5232ddd14b9e26620edde0e18f72d1622ec7d711b102b3fcda9f71a072

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page