Digital beamforming support in L1
This provides a common beamforming interface for split 8 and 7.2 radios. The following changes have been implemented:
Refactored txdataF buffer in PHY: The buffer for one OFDM symbol is now flat, starting from the first RB and ending at the last. This simplifies resource mapping and sample transmission over xRAN due to the unified buffer format. For split 8, the buffer undergoes FFT shifting before OFDM modulation.
Removed beam ID table from PHY struct: Instead, beam IDs for UL slots are now stored directly in the RU struct from MAC after the scheduler returns. When samples are received, these beam IDs are used for receive beamforming. For DL slots, the beam ID is passed along with the txdataF buffer to RU, where transmit beamforming occurs before OFDM modulation. A key distinction is that the RU struct stores UL slots' beam and allocation information in a list, as the scheduler schedules UL slots in advance and must retain this information until the corresponding slot arrives.
Removed beam ID index from rxdataF buffer: The PHY layer functions operate on logical ports, eliminating the need for beam association. In the current implementation the RU struct contains baseband port buffers, the gNB struct contains logical ports, and beamforming functions bridge the gap by transferring data between them.
Fixed beam ID indication in FAPI: The MSB of beam ID is set according to the beamforming method as per FAPI specs. The default beam ID has been changed from -1 to 0 which as per O-RAN spec signifies no beamforming.
Created ORAN library function for UL beam indication: A new function has been added to send beam information for UL slots to xRAN. This function is called immediately after the scheduler returns, eliminating the need to invoke the entire TX procedures for this purpose. xRAN changes to set the correct PRACH beam ID has been taken from !3605 (merged).
Refactored beam related config parameter: Earlier, a single parameter called beam_mode was used to set no beamforming or predefined beamforming or lowphy beamforming. This is not correct because the gNB can be configured to do predefined and lowphy beamforming. So, an additional parameter is introduced. Now there is beamforming_type which tells predefined or weight based beamforming and beamforming_mode which tells HiPHY or LoPHY beamforming.
The following sequence diagram shows the new workflow
sequenceDiagram
box O-RU
participant Radio as Radio Unit
end
box O-DU
participant RU as RU Entity
participant PHY
participant MAC
end
Radio-->>RU: Send samples of slot n
Note over RU: FFT<br>PRACH RU Proc<br>Rx beamforming
RU-->>PHY: Send notification to start L1 proc
PHY-->>MAC: Scheduler slot indication n + sl_ahead
Note over MAC: Run scheduler
MAC-->>RU: Save UL slot beam info to RU
opt Send UL slot beam info to xran
RU-->>Radio: C Plane packet for UL slot n + sl_ahead
end
MAC-->>PHY: Scheduler response
par L1 Processing
Note over PHY: L1 Rx processing
PHY-->>MAC: Send data indication
and PHY to RU
Note over PHY: L1 Tx processing
PHY-->>RU: Send txdataF with beam info
Note over RU: Tx beamforming<br>IFFT
end
RU-->>Radio: Send txdataF or txdata samples
The following items are planned for implementation in subsequent merge requests:
- Storing the beam table from MAC in PHY
- Applying beam weights to transmit and receive samples
- Storing beam IDs and allocation information for CSI-RS, which requires functionality similar to reMask in the O-RAN C-plane
- PRACH beamforming support