Skip to main content

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

Metadata

Release files for hermespy 1.6.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for hermespy 1.6.0
File Size Uploaded
hermespy-1.6.0.tar.gz 5.6 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for hermespy 1.6.0
File
hermespy-1.6.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
hermespy-1.6.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
hermespy-1.6.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
hermespy-1.6.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
hermespy-1.6.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details

Total release size: 54.5 MB

Release files / hermespy-1.6.0.tar.gz

Download URL hermespy-1.6.0.tar.gz
Size 5.6 MB
Tags Source
SHA-256 checksum
How to use checksums
81cfc456cf7b580326b34db818f818fbb2bcc8e7ed10d9ccc9d673a218d98fab
BLAKE2b-256 checksum
How to use checksums
cb63b4dc22428e76953bfcb79cba024173ac3b60c3a6f8abdc92771af0d856db
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.12

Release files / hermespy-1.6.0-cp313-cp313-win_amd64.whl

Download URL hermespy-1.6.0-cp313-cp313-win_amd64.whl
Size 536.0 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
30ef1bfeee6f9fac980c366f1a2c696b824eb957ab54d38e65338b08521bf6e4
BLAKE2b-256 checksum
How to use checksums
744dbe60fbe08383b9af830dea5d72199aada619235c056ddef14dac6eb7d612
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.13

Release files / hermespy-1.6.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL hermespy-1.6.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 15.9 MB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
2ce932d935b5b1282b9f884e23678d0a097db70f88230cb01f7730c2ef9d6c5e
BLAKE2b-256 checksum
How to use checksums
04b678af5148132536c3c7cb8f13307600ff05ef758180ae60244fb6f5a47683
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.12

Release files / hermespy-1.6.0-cp312-cp312-win_amd64.whl

Download URL hermespy-1.6.0-cp312-cp312-win_amd64.whl
Size 536.1 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
dcd175320032c476577fa8b5499817f0d2fbbbe78b84ea5e245f2770971b02bc
BLAKE2b-256 checksum
How to use checksums
fa6cfc1a5868936c87f44aac039915e0a1ef0c0c1b3fd02be4c52025e6456139
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.10

Release files / hermespy-1.6.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL hermespy-1.6.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 15.9 MB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
032f1df496b44cbfae8a1d9a0e9c6efb89e402537c55b373e2706ae67c8be3e2
BLAKE2b-256 checksum
How to use checksums
567f400fe29eb460c43c42fbc4f5800df984dbf84f4e6d0128a0bb3e29bc3026
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.12

Release files / hermespy-1.6.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL hermespy-1.6.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 15.9 MB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
a4803c8b9865e6fedd59775e4b8d2b6a42745b8cc37e5677ecfbe1b11232d804
BLAKE2b-256 checksum
How to use checksums
681eff5232ddd14b9e26620edde0e18f72d1622ec7d711b102b3fcda9f71a072
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.12

Release history Release notifications | RSS feed

This release

1.6.0 This release

6 release files

1.5.0

7 release files

1.4.0

7 release files

1.3.0

7 release files

1.2.0

4 release files

1.1.0

5 release files

1.0.0

2 release files

0.3.0

2 release files

0.2.7

2 release files

0.2.5

2 release files

0.2.4

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page