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:

  1. Storing the beam table from MAC in PHY
  2. Applying beam weights to transmit and receive samples
  3. Storing beam IDs and allocation information for CSI-RS, which requires functionality similar to reMask in the O-RAN C-plane
  4. PRACH beamforming support
Edited by Sakthivel Velumani

Merge request reports

Loading