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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5b33a71cf24e9eaa5838e1746e1fef899f5665d4fcd499d059a3b9334ea252f3
|
|
| MD5 |
b28fe70928d93b43fbed463c95c89198
|
|
| BLAKE2b-256 |
ebf59aeab5695cec01f716b69bde54b05e88a424bb1fa829210903cfdfe2ef72
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ad26aff709145c9ea504f4b20db3f2791e27dc4584e30535c026ab12bbab0735
|
|
| MD5 |
9adb989d157312555efaa7a2f4459dc9
|
|
| BLAKE2b-256 |
fa8902d6c50da55411feec6b7a3ae7b4afce624591636ccfebc0998d5393ca3f
|
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
- Download URL: hermespy-1.5.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 15.8 MB
- Tags: CPython 3.12, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bf8fb6a3eac40b5defee6c7bb6b282ee771c06351e276dbdfed7929b4b35077d
|
|
| MD5 |
9c9f46c296cf5aa8602a0e08871d3437
|
|
| BLAKE2b-256 |
9dd2aed25bd267a2202a2b5f66b4c3f104b25ea338c836f44cd2a8008bbec294
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2d8e212ef523a91905a84d5da7df25ed18fc34d58ead422d891075edc2d36e8b
|
|
| MD5 |
9121642138e8755bc194d0574708615c
|
|
| BLAKE2b-256 |
729c9e748e5fdcda7d02475242dba525a26e9c4039eb58f743b18059c8af1076
|
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
- Download URL: hermespy-1.5.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 15.8 MB
- Tags: CPython 3.11, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
407ececfbeedb5f56354e925ae76ffb592b897872e4993add10d78c17c5a8ac5
|
|
| MD5 |
e912f279b3a3f83013f3a39bdcaafe4d
|
|
| BLAKE2b-256 |
7d2c80a34738e715b6e4c998aaa9719f2c6f87fcf40a0c2650d96ce6bd3fe6fe
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9477e1d71f4e9db142ccafc399e955d68ed52e46992e0053f0595228462b0658
|
|
| MD5 |
f42a14d89d845d1a729467ec24f34ec7
|
|
| BLAKE2b-256 |
2bb81d8abc39328e568241aa1c3d5a759a3aebb6aa19835543793dfca50a9591
|
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
- Download URL: hermespy-1.5.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 15.8 MB
- Tags: CPython 3.10, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
732d8694f33c0fd7c6f6348f152b26ceb24b7609131b6ef54934ff48f0d79461
|
|
| MD5 |
658f745b7824c1bd6691f93bbc6bb854
|
|
| BLAKE2b-256 |
a56ffcde6a66121266d34cd76a95ee3a2caffd02b66e51755cccb88e360b56bb
|