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=26e9).add_dsp(sense)
sim.new_device(carrier_frequency=1e9).add_dsp(com)
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.5.0.tar.gz (5.5 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.5.0-cp312-cp312-win_amd64.whl (16.0 MB view details)

Uploaded CPython 3.12Windows x86-64

hermespy-1.5.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (15.8 MB view details)

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

hermespy-1.5.0-cp311-cp311-win_amd64.whl (16.0 MB view details)

Uploaded CPython 3.11Windows x86-64

hermespy-1.5.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (15.8 MB view details)

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

hermespy-1.5.0-cp310-cp310-win_amd64.whl (16.0 MB view details)

Uploaded CPython 3.10Windows x86-64

hermespy-1.5.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (15.8 MB view details)

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

File details

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

File metadata

  • Download URL: hermespy-1.5.0.tar.gz
  • Upload date:
  • Size: 5.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.11

File hashes

Hashes for hermespy-1.5.0.tar.gz
Algorithm Hash digest
SHA256 5b33a71cf24e9eaa5838e1746e1fef899f5665d4fcd499d059a3b9334ea252f3
MD5 b28fe70928d93b43fbed463c95c89198
BLAKE2b-256 ebf59aeab5695cec01f716b69bde54b05e88a424bb1fa829210903cfdfe2ef72

See more details on using hashes here.

File details

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

File metadata

  • Download URL: hermespy-1.5.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 16.0 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.11

File hashes

Hashes for hermespy-1.5.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ad26aff709145c9ea504f4b20db3f2791e27dc4584e30535c026ab12bbab0735
MD5 9adb989d157312555efaa7a2f4459dc9
BLAKE2b-256 fa8902d6c50da55411feec6b7a3ae7b4afce624591636ccfebc0998d5393ca3f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for hermespy-1.5.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bf8fb6a3eac40b5defee6c7bb6b282ee771c06351e276dbdfed7929b4b35077d
MD5 9c9f46c296cf5aa8602a0e08871d3437
BLAKE2b-256 9dd2aed25bd267a2202a2b5f66b4c3f104b25ea338c836f44cd2a8008bbec294

See more details on using hashes here.

File details

Details for the file hermespy-1.5.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: hermespy-1.5.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 16.0 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.11

File hashes

Hashes for hermespy-1.5.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 2d8e212ef523a91905a84d5da7df25ed18fc34d58ead422d891075edc2d36e8b
MD5 9121642138e8755bc194d0574708615c
BLAKE2b-256 729c9e748e5fdcda7d02475242dba525a26e9c4039eb58f743b18059c8af1076

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for hermespy-1.5.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 407ececfbeedb5f56354e925ae76ffb592b897872e4993add10d78c17c5a8ac5
MD5 e912f279b3a3f83013f3a39bdcaafe4d
BLAKE2b-256 7d2c80a34738e715b6e4c998aaa9719f2c6f87fcf40a0c2650d96ce6bd3fe6fe

See more details on using hashes here.

File details

Details for the file hermespy-1.5.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: hermespy-1.5.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 16.0 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.11

File hashes

Hashes for hermespy-1.5.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 9477e1d71f4e9db142ccafc399e955d68ed52e46992e0053f0595228462b0658
MD5 f42a14d89d845d1a729467ec24f34ec7
BLAKE2b-256 2bb81d8abc39328e568241aa1c3d5a759a3aebb6aa19835543793dfca50a9591

See more details on using hashes here.

File details

Details for the file hermespy-1.5.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for hermespy-1.5.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 732d8694f33c0fd7c6f6348f152b26ceb24b7609131b6ef54934ff48f0d79461
MD5 658f745b7824c1bd6691f93bbc6bb854
BLAKE2b-256 a56ffcde6a66121266d34cd76a95ee3a2caffd02b66e51755cccb88e360b56bb

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