Commit Graph
15 Commits
Author SHA1 Message Date
Bartosz Podrygajlo ade7901fb2 RFSim: Add beamids list based user interface for beam domain simulation
Add CLI parameter rfsimulator.beam_ids which uses a list of beam ids instead of a
beam map. The beam map API is still present and can be used interchangably.

Add telnet command setbeamids which has similar semantics
2025-12-23 10:05:14 +01:00
Bartosz Podrygajlo ac97ba4e64 RFsim: Disable beam API if beam simulation is disabled 2025-12-23 10:05:14 +01:00
Bartosz Podrygajlo 8a36b9b85b rfsimulator: fix beam_ctrl_t leak. 2025-12-23 10:05:14 +01:00
Bartosz Podrygajlo 56970390f2 RFsim: handle additional channel offset from CLI
Handle extra channel offset coming from CLI parameter prop_delay.
2025-12-23 10:05:14 +01:00
Bartosz Podrygajlo b10617607a RFsim: Allow arbitrary order of beams.
Allow arbitrary order of beam ids in set_beams2 function. This
allows the application to select any arbitrary order of beam ids.
The underlying transport mechanism still uses beam_map so the beam_ids
are ordered before sending.

Also replaced tx_beam_map/rx_beam_map into beam_map.

Also fixed an issue where --rfsimulator.enable_beams required an argument.
2025-12-23 10:05:14 +01:00
Bartosz Podrygajlo 033aed736e Rfsim: Optimization for simple configurations
- Added first beam optimization to combine_tx_buffers.
 - Added first beam & first peer optimization to rfsimulator_read_internal

This results in significant speed up for the first rx beam, first tx
beam and first peer which is the base case with beam simulation disabled.
2025-12-23 10:05:14 +01:00
Bartosz Podrygajlo c587aab6b6 RFsim: Fix freeing packets in case of non-negative channel offset
In rfsim, received packets are dynamically allocated and freed when no longer
needed, which is dependent on the channel model, packet timestamp and packet
size (number of samples carried).

This commit fixes the packet age check for channels with nonzero channel offset
(most notalby NTN channels).

Also present:
 - extract the NTN satellite position update code to a separate function and
   call it once per trx_read call instead of once per rx beam.
2025-12-23 10:05:14 +01:00
Bartosz Podrygajlo 05de66d811 Make RFSIMULATOR_PARAMS_DESC C++ compatible.
Add a set of macros with designated initializers to simplify using
paramdef_t arrays in C++ source code. Fix clang error with
RFSIMULATOR_PARAMS_DESC using mixed designated and non-designated
initializers.
2025-12-23 10:05:14 +01:00
Bartosz Podrygajlo 435dfd57d8 RFsim: Optimization for operation without chanmod 2025-12-23 10:05:14 +01:00
Bartosz Podrygajlo 643be87832 RFsim: read_beams function
Added a new function for reading multiple beams concurrently.
The TX to RX beam combination is simplistic and based on beam gain.
2025-12-23 10:05:14 +01:00
Bartosz Podrygajlo 669be5b42e Rfsim: Process received packets on demand
- Received packets are dynamically allocated and kept in a
queue for as long as they are needed.

- The layout of the packets was changed from interleaved antennas
to non-interleaved antennas.

- Generate a contiguous buffer from saved packets as needed.

There is extra work caused by this change due to recv() call no
longer saving data directly into the circular buffer, however further
processing is easier due to contiguous nature of the tx antenna buffers
prepared. The impact on performance was not measured.
2025-12-23 10:05:12 +01:00
Bartosz Podrygajlo f0d4325cd7 rfsim: process received packet when its received completely
The simplifies some code in packet reception and is a prerequisite
for processing received without relying on circular buffer
2025-12-23 10:04:39 +01:00
Bartosz PodrygajloandLaurent Thomas 143c545928 Beam simulation for rfsimulator
A simplified beam switching simulation for rfsimulator. This works
mainly in 1 gNB - N UEs scenarios. This is not a real beamformer with
antenna, channel and propagation model. The way it works is that the
peers inform each other about the beams they transmit in, and on
reception before channel modelling, the beam data is combined based on
preconfigured rx_beam/tx_beam gain matrix.

Usage:
 - Add --rfsimulator.enable_beams to enable beam simulation
 - Add --rfsimulator.beam_gains <comma separated Toepliz form matrix of gains in dB>.

   Example list: 0,-5,-10

   Resulting matrix:

   [[0, -5, -10]
    [-5, 0, -5]]
    [-10, -5, 0]]

 - Add --telnetsrv if you want to control the beams manually. The command in telnet
   is "rfsimu setbeam <beam_map>", where beam_map is a uint64_t controling the
   reception beam and transmission beam. If the application is switching the beams
   automatically the beams will be overwritten as soon as the application chooses to
   switch beams.

Co-authored-by: Laurent Thomas <laurent.thomas@open-cells.com>
2025-12-23 10:04:20 +01:00
Bartosz PodrygajloandLaurent Thomas c4b94cff4b Change trx_write_func to add beams definition over multiple tx antennas per beam
Co-authored-by: Laurent Thomas <laurent.thomas@open-cells.com>
2025-12-17 22:24:12 +01:00
Bartosz Podrygajlo 6bd3545a78 RFsimulator C++ conversion
Convert rfsimulator C source code to C++ to access to STL.
2025-12-17 22:24:12 +01:00