Radio-Frequency Hardware Modeling¶
HermesPy’s simulation module includes a block-based modeling framework for arbitrary radio-frequency front-ends. It provides a flexible and extensible platform to design, simulate and analyze the effects of radio-frequency design choices on the overall system performance.
Individual radio-frequency blocks exchange RFSignal models in a feed-forward fashion.
Loops are currently not supported.
The DSP layer is fed from, and fed by, the RF layer through DSPInputBlock and DSPOutputBlock, respectively.
Signals not feed to blocks are considered inputs to the antennas during transmission, while unused block input ports are exposed as antenna ports during reception.
An example of a simple front-end chain is illustrated below:
flowchart LR
dsp_in[DSPInputBlock] --> sig_a{{RFSignal}} --> rf_a[RFBlock] --> sig_b{{RFSignal}} --> rf_b[RFBlock] --> sig_c{{RFSignal}};
rf_in[RFBlock] --> sig_d{{RFSignal}} --> rf_b;
sig_e{{RFSignal}} --> rf_c[RFBlock] --> sig_f{{RFSignal}} --> dsp_out[DSPOutputBlock];
sig_d --> rf_c;
click dsp_in "block.html#hermespy.simulation.rf.block.DSPInputBlock";
click dsp_out "block.html#hermespy.simulation.rf.block.DSPOutputBlock";
click rf_in,rf_a,rf_b,rf_c "block.html#hermespy.simulation.rf.block.RFBlock";
click sig_a,sig_b,sig_c,sig_d,sig_e,sig_f "signal.html#hermespy.simulation.rf.signal.RFSignal";
It can be configured by interacting with instances of RFChain,
which provides a high-level interface to manage the blocks and their interconnections:
1# Initialize the RF chain
2chain = RFChain()
3
4# Generate unconnected block references
5input_ref = chain.add_block(DSPInputBlock())
6output_ref = chain.add_block(DSPOutputBlock())
7tx_feed_ref = chain.add_block(RFBlock_A())
8tx_combiner_ref = chain.add_block(RFBlock_B(Type.UP))
9rx_combiner_ref = chain.add_block(RFBlock_B(Type.DOWN))
10source_ref = chain.add_block(RFBlock_C())
11
12# Connect blocks
13chain.connect(output_ref.port('o'), tx_feed_ref.port('i'))
14chain.connect(tx_feed_ref.port('o'), tx_combiner_ref.port('i'))
15chain.connect(source_ref.port('o'), tx_combiner_ref.port('lo'))
16chain.connect(source_ref.port('o'), rx_combiner_ref.port('lo'))
17chain.connect(rx_combiner_ref.port('o'), input_ref.port('i'))
Afterwards the radio-frequency chain model can be assigend to devices by setting the rf property.
Note that changing the chain model might require updating the antenna array configuration to ensure that the number of antenna ports matches the number of signal inputs and outputs.
1# Initialize a device and assigne the RF chain to it
2device = SimulatedDevice(carrier_frequency=1e9)
3device.rf = chain
The following presets modeling commercially availabe hardware are currently available:
Preset |
Description |
|---|---|
4x4 MIMO software-defined radio with integrated RF front-end |
|
FMCW radar SoC for automotive and industrial applications |