- 3GPP
- 3rd Generation Partnership Project
- 5G
- 5th Generation
- Rx
- receive
- FFT
- fast Fourier transform
- IQ
- in-phase and quadrature
- LO
- local oscillator
- USB
- universal serial bus
- DMRS
- demodulation reference signal
- OFDM
- orthogonal frequency division multiplexing
- FPGA
- field programmable gate array
- HHI
- Heinrich Hertz Institute
- UE
- user equipment
- MIMO
- Multiple-Input Multiple-Output
- MU-MIMO
- Multi-User MIMO
- O-RAN
- Open Radio Access Network
- OAI
- OpenAirInterface
- SRS-RAN
- Software Radio Systems - Radio Access Network
- PUSCH
- Physical Uplink Shared Channel
- PUCCH
- Physical Uplink Control Channel
- SRS
- Sounding Reference Signal
- MRC
- Maximum Ratio Combining
- RZF
- Regularized Zero Forcing
- PRB
- Physical Resource Block
- RU
- Radio Unit
- DU
- Distributed Unit
- CU
- Central Unit
- GPS
- Global Positioning System
- QPSK
- quadrature phase shift keying
- PHY
- physical layer
- MAC
- medium access control layer
- USRP
- Universal Software Radio Peripheral
- DSP
- digital signal processing
- RRC
- radio resource control
- PC
- personal computer
- gNB
- next-Generation Node-B
- TDD
- time domain duplexing
- SFP
- small form-factor pluggable
- SDR
- software defined radio
- MCS
- modulation and coding scheme
Uplink Multi-User MIMO Testbed Implementation in OpenAirInterface ††thanks: The authors acknowledge the financial support by the Federal Ministry for Research, Technology and Space (BMFTR) in Germany in the programme of “Souverän. Digital. Vernetzt.,” joint project xG-RIC, project identification numbers: 16KIS2429K and 16KIS243, and by the 6G-MIRAI project, which has received funding from the Smart Networks and Services Joint Undertaking (SNS JU) under the European Union’s Horizon Europe research and innovation program under Grant Agreement No 10119236. Views and opinions expressed are however those of the author(s) only, and they do not necessarily reflect those of the European Union or the SNS JU (granting authority). Neither the European Union nor the granting authority can be held responsible for them. The authors thank Ralf Lindstedt, Angelo Athanassopoulos, and Andreas Schiller of Fraunhofer Heinrich Hertz Institute (HHI) for their valuable technical assistance during the building and testing of this system.
Abstract
Cell-Free Multiple-Input Multiple-Output (MIMO) and Open Radio Access Network (O-RAN) have been active research topics in the wireless communication community in recent years. As an open-source software implementation of the 3rd Generation Partnership Project (3GPP) 5th Generation (5G) protocol stack, OpenAirInterface (OAI) has become a valuable tool for deploying and testing new ideas in wireless communication systems. In this paper, we present our OAI-based real-time uplink Multi-User MIMO (MU-MIMO) testbed developed at Fraunhofer HHI. As a part of our Cell-Free MIMO testbed development, we built a 2x2 MU-MIMO system using general purpose computers and commercially available software defined radios. Using a modified OAI next-Generation Node-B (gNB) and two unmodified OAI user equipment (UE), we show that it is feasible to use Sounding Reference Signal (SRS) channel estimates to compute uplink combiners. Our results verify that this method can be used to separate and decode signals from two users transmitting in non-orthogonal time-frequency resources. This work serves as an important verification step to build a complete Cell-Free MU-MIMO system that leverages time domain duplexing (TDD) reciprocity to perform downlink beamforming over multiple cells.
I Introduction
The idea of using multiple antennas to exploit spatial diversity brought about the MIMO revolution. Enabling multiple cells to dynamically cooperate to serve locations that would otherwise be at the cell edge led to the concept of cell-free networks. Meanwhile, the effort to reduce vendor lock-in by developing network equipment with open specifications and interfaces, led to the emergence of O-RAN. Thanks to open-source software projects that implement the 3GPP RAN protocol stack, it is becoming possible to build wireless networks for research and deployment, using general-purpose computers and SDRs, controlled by open-source firmware.
In the last two decades, many MIMO demos and proof-of-concept systems have been published in the literature. Some of the first real-time demonstrators were built at the Fraunhofer HHI [hausteinMIMOOFDMCellularDeployment2007]. These systems used field programmable gate arrays and digital signal processing (DSP) boards to handle strict computational requirements. Massive MIMO systems with up to 100 antennas were reported in [shepardArgosPracticalManyantenna2012, malkowskyWorldsFirstRealTime2017, vieiraFlexible100antennaTestbed2014]. Those systems also required custom boards and high-performance FPGAs to handle stringent signal processing tasks. Testbeds and demonstrators using MIMO in mmWave frequencies were built in [blandinoMultiUserFrequencySelectiveHybrid2018, haqueM3MIMO8x8MmWave2024]. Although these systems proved the feasibility of MIMO hardware, they focused on physical layer (PHY) with a custom waveform and protocol, as scalability and interoperability were not their focus.
Two main open-source projects that implement the 3GPP protocol stack for research and deployment are OAI [oai2014] and Software Radio Systems - Radio Access Network (SRS-RAN) [srsrandevelopmentteamSrsRAN2025]. An O-RAN cell-free demonstrator was recently implemented using SRS-RAN [chuTestbedDevelopmentIntelligent2025]. OAI supports basic O-RAN functionality like Distributed Unit (DU)- Central Unit (CU) split, Split 7.2 [ORANWG4CUS0v1601] with commercial Radio Units, and Split 8 [ORANWG7IPCHRDOpt8v0100] to stream time-domain in-phase and quadrature (IQ) samples to a Universal Software Radio Peripheral (USRP). OAI also supports single-user MIMO as described in [saaifanNRMIMOFeature2021]. In [buiImplementationMultiUserMIMO2025], the authors implemented downlink MU-MIMO in OAI; however, to our knowledge, there is no project that adds uplink MU-MIMO functionality or cell-free support to OAI. We identified this feature as an essential capability for demonstrating the full potential of cell-free O-RAN systems. The defining capabilities of cell-free networks such as cooperative, phase-coherent multi-antenna transmission and reception from distributed locations, and beamforming using only uplink pilots by exploiting the TDD channel reciprocity require MU-MIMO as a prerequisite feature. To close this gap, we describe our real-time uplink MU-MIMO implementation on OAI in this paper. This system is a key component of the cell-free testbed we are developing at Fraunhofer HHI.
The remainder of the paper is organized as follows. Section II gives a general overview of the system parameters and functions. In Section III, we review the relevant theoretical concepts. Sections IV and V detail the PHY and medium access control layer (MAC) implementation, respectively. In Section VI we elaborate on the hardware we used, and in Section VII we discuss our results.
II System Description
As shown in the block diagram in Fig. 1, our system consists of a monolithic gNB with two antennas and two users, each with a single antenna, so we have a 2x2 MU-MIMO system. The complex baseband signal is based on 3GPP’s Release 15 specification, which is an orthogonal frequency division multiplexing (OFDM) signal with cyclic prefix. The total system bandwidth is (24 Physical Resource Blocks). As 3GPP defines a PRB as 12 consecutive subcarriers, there are 288 subcarriers to encode symbols in each OFDM symbol, which requires a 512-point fast Fourier transform (FFT) for OFDM processing.
The waveform uses the numerology 1 defined in [3GPPTS38211v1620], which corresponds to subcarrier spacing. Given the FFT size, the overall system sampling rate is equal to . We operated the system at a carrier frequency of , which belongs to band n78. These parameters are summarized in Table I.
The uplink physical layer signal processing loop with nonorthogonal data scheduling can be summarized as follows: Following the cell search and random access procedures, the network configures each user to periodically transmit pilot symbols. These orthogonal pilots span the bandwidth used for nonorthogonal data transmission. The gNB uses the received pilots to estimate the MIMO channel and compute a linear combiner matrix.
When users need to transmit data, the scheduler assigns time and frequency resources in a separate layer to each user. This means that two users are given permission to transmit in the same time-frequency resources in a nonorthogonal fashion, causing interference to the other user. Once the gNB receives the uplink signal with multi-user interference using two antennas, it applies the MU-MIMO combiner to the received signal vector. This operation has the objective of separating the symbols of both users. From this point, the recovered data symbols are processed in the same way as the received symbols from a single antenna system with orthogonal scheduling.
III Theoretical Background
In this section, we briefly review the essential theory behind the linear MIMO detection and the effect of residual frequency offset to the detection process.
III-A MU-MIMO and Linear Detection
The MIMO system model with a flat-fading channel with transmit and receive antennas is given by
where is the signal received from the receive (Rx) array, is the transmit signal vector, is the MIMO channel matrix, and is the additive white Gaussian noise vector. Each variable corresponds to one OFDM subcarrier. The subcarrier indices are dropped for the sake of brevity. For the case of MU-MIMO, is a column vector where each element is the transmit symbol of a separate user. The receiver needs to estimate by applying a linear operation to as
| (1) |
where is the estimated transmit vector and is the MIMO combiner matrix. We consider two common MIMO detection algorithms; namely, Maximum Ratio Combining (MRC) and Regularized Zero Forcing (RZF), , and , where is the identity matrix and , a nonnegative real number, is the regularization parameter.
III-B Two Step Channel Equalization
The model in (1) assumes that the receiver has perfect channel state information. The residual carrier frequency offset between the transmitter and the receiver becomes an important factor when periodic pilots independent of the user data are used to calculate . Due to the time difference between the periodic pilot transmission of the user and the data symbol transmission, the channel vector of each user undergoes a phase rotation , proportional to the frequency offset and . Here we assume that the channel has a coherence time longer than the maximum , and the channel has not changed much except the phase rotation. We can represent the phase rotation with the diagonal matrix from the individual phases. As represents the channel state in the instance of channel estimation, the model during data transmission becomes
Applying RZF gives us
which is the user signal vector with canceled interference, but with additional phase rotation. The noise vector is transformed as . The remaining phase rotation can be estimated using a single-layer channel estimation from the demodulation reference signal (DMRS) pilots embedded inside the data symbols and equalized by rotating the symbols back accordingly.
IV Physical Layer Implementation
Most of the modification necessary to implement uplink MU-MIMO in OAI was in gNB’s PHY Rx function. In this section, we explain the features that were necessary to implement uplink MU-MIMO.
IV-A Open Source RAN Stack: Open Air Interface
The software implementation of this project is built as a private feature branch of the Open Air Interface [oai2014] project. Our implementation is based on the 2024.w45 version of the official repository. Before detailing the PHY implementation of the MU-MIMO processing, we will provide details on how OAI handles PHY Rx processing. As summarized in Algorithm 1, PHY functions for the gNB receiver run in their own thread. The main worker function of this thread, phy_procedures_gNB_uespec_RX is called for each uplink slot and processes every physical channel scheduled to that slot. It is implemented as three consecutive for-loops. The first loop iterates over all Physical Uplink Control Channel (PUCCH) instances expected to arrive in that slot. The same operation is performed for Physical Uplink Shared Channel (PUSCH), which carries the user data. Lastly, SRS is processed, whose function will be detailed in the next section.
The DecodePUSCH procedure performs channel estimation and equalization using PUSCH DMRS, soft quadrature-amplitude-demodulation, descrambling, and channel decoding to recover MAC data payload. Similar operations are performed for the control channel in DecodePUCCH routine. As the name suggests, the SRSChannelEstimation routine estimates the wireless channel from SRS pilots.
IV-B Sounding Reference Signal
The SRS is a physical channel designed to transmit pilot symbols from users to the base station to perform uplink channel measurements. It can be configured to be sent periodically from each user in a wide bandwidth. SRS plays an important role for our system because we use it to estimate channel state information to compute the MU-MIMO combiner ( and from Section III).
There are several options to multiplex SRS from multiple users. In this project, we use a purely TDD approach for simplicity of implementation. Each user is scheduled to transmit a wideband pilot sequence for one OFDM symbol in a different slot. The pilots are transmitted twice per radio frame (every ) and each user transmits their pilots in adjacent slots. Thi results in a time offset of approximately between the channel measurement instances of the first and second user.
As we now use SRS channel estimates for data decoding, it is important to use fresh channel state information as soon as it is available. To achieve this, we reversed the order of the PUSCH and SRS loops in the receiver function. As soon as new channel information arrives, the RZF combiner matrix is recomputed with up-to-date channel state information.
IV-C PUSCH Processing
We implemented the multi-user interference suppression as a pre-processing step to the regular PUSCH decoding routine. Once the MU-MIMO combiner is applied to the receive vector, the rest of the processing can be performed as if the signal were coming from a single antenna without interference. The modified PHY Rx algorithm is given in Algorithm 2. With this approach, the OAI codebase for PUSCH processing remains mostly unmodified, while adding MU-MIMO interference cancellation capability. As DMRS channel estimation and equalization are part of this process, the phase rotation explained in Section III-B is corrected.
IV-D Why SRS Instead of DMRS?
The design choice of using SRS channel estimates for computing the combiner instead of PUSCH-DMRS can be explained as follows: The next milestone for this system is to perform downlink MU-MIMO precoding by leveraging the uplink-downlink channel reciprocity in a TDD system. A parallel project is underway to develop a calibration step to equalize the mismatch between the transmit and receive radio-frequency frontends. In order to achieve this, periodic updates on the channel state information are necessary to keep the downlink precoder matrix up-to-date. This would not be possible if the uplink pilots were only sent when there is uplink data to transmit. Our work shows that SRS can be configured and used to decode data symbols on the uplink. This was a necessary validation step before using SRS-based channel estimates to compute the downlink precoders.
IV-E Fixed vs Floating Point Arithmetic
The DSP operations of OAI’s PHY use fixed-point arithmetic. The reason for this design choice is real-time performance, as processors perform integer operations faster than floating-point operations. Fixed-point operations can also be parallelized more efficiently with single-input-multiple-data operations. However, implementing complex algorithms with integer arithmetic is cumbersome. The designer must ensure that all the signal levels are appropriately scaled to minimize overflows and underflows. Inverting a matrix is especially challenging in this case, as division by a small determinant might easily cause an overflow. Because of that, we implemented our functions using floating point arithmetic. After converting the SRS channel estimates and the received IQ samples to floating point representation, we computed the RZF combiner matrix and applied it to the received signal. We finally converted the equalized signal back to integers as OAI’s PUSCH processing function expects an integer signal as input.
Our experiments with network benchmarking tools showed that this approach was fast enough to keep up with the real-time processing constraints. However, it is possible to further optimize this routine to balance speed and numerical accuracy. The idea behind this strategy lies in the following observation: The combiner is computed only when new channel state information arrives, while every received data symbol must be equalized before it can be decoded. This means that the combiner matrix is used much more often than it is computed. The strategy is to keep the combiner computation in float, but to perform matrix vector multiplication between the combiner matrix and the receive vector using integers. In this way, the step that is prone to errors with integers remains float, but the step that uses most of the computer cycles is optimized with integers. We leave this idea for the next step of development in future work.
IV-F User Equipment and Frequency Synchronization
In this project, we experimented with commercial UE as well as OAI software UE with USRPs. MU-MIMO scheduling and the processing done by the gNB is transparent to UEs. From a UE’s perspective, a radio resource control (RRC) command configures SRS transmission and when the user has uplink data to transmit, a PUSCH grant is issued to them in a certain time and frequency resource. The UE does not know if another user is also transmitting in the same set of resources. As a result, there is no need to modify the UE to enable uplink MU-MIMO.
The main difference between a commercial UE and OAI UE was the possibility of using a reference signal for frequency stability. We observed that OAI software UEs are more stable when their local oscillators were conditioned with an external reference signal or with Global Positioning System (GPS). Commercial UEs do not have the possibility to accept an external reference signal for frequency synthesis. Although they could also connect to the cell, they lost synchronization and disconnected when high traffic was sent.
V MAC Implementation
V-A SRS Scheduling
SRS is usually used to measure long-term channel statistics. Because of that, its period is typically configured to be relatively long. In OAI, the default period of SRS is 8 radio frames (). To track the channel for multi-user interference management, we modified the SRS scheduler so that it configures UEs to transmit SRS pilots twice per radio frame ( period).
There are several options to multiplex SRS from multiple users; such as TDD, frequency interlacing with a comb pattern, and a mixture of these two approaches. For simplicity, we choose a TDD approach where each user transmits SRS in neighboring slots.
The bandwidth of SRS is represented in terms of PRBs. Due to the way RRC signaling for SRS configuration is standardized by 3GPP, it is usually not possible to configure SRS to the exact system bandwidth. For example, 20 PRBs is the maximum SRS bandwidth in a 24 PRB system. The missing PRBs at the edge do not get pilots to compute MU-MIMO combiners. We deactivated the PRBs without SRS during PUSCH scheduling, so no data is scheduled for those PRBs. A simplified representation of the uplink OFDM scheduling can be seen in Fig. 2.
V-B Nonorthogonal PUSCH Scheduling
To enable nonorthogonal scheduling of PUSCH to multiple users, we modified OAI’s PUSCH scheduler, which is implemented in the pf_ul function inside gNB_scheduler_ulsch.c file. Instead of marking a PRB as occupied when one user is scheduled to it, PRB allocation is tracked separately for both MU-MIMO layers. This leads to reusing time-frequency resources when scheduling both users and increasing the link capacity.
VI Hardware Setup
Our MU-MIMO system is made up of a gNB, a core network, and two UEs. We used commercially available SDRs, general-purpose computers, and free open-source software to build this system. A modified version of OAI gNB, as detailed in Sections IV and V runs on a high-performance personal computer (PC) with an Intel i9 processor. We deployed a containerized Open5Gs instance on the same PC as the core network. We used a USRP N320 with two antennas as the RU. The PC and the USRP exchange time domain IQ samples over a Ethernet over fiber ( small form-factor pluggable (SFP)) link. A reference signal is connected to the USRP to stabilize its local oscillator (LO). A picture of our over-the-air setup can be seen in Fig. 3.
As UE, we used two USRP B210s with a single antenna controlled by OAI UE software running on a PC. We controlled two USRPs using a single PC running two separate OAI UE instances in Docker containers. To stabilize UE LOs, we experimented with three methods: a reference signal, GPS disciplined oscillators, and relying on the frequency offset compensation mechanism inside OAI UE. The first two methods worked well and resulted in a stable connection, while allowing the LOs to free-run while correcting only the baseband frequency in software caused frequent disconnections. We also experimented with Quectel RM510 as a commercial UE. They showed a similar behavior to USRPs with a free-running LO, suggesting that frequency synchronization is a critical factor to build stable uplink MU-MIMO systems to preserve the orthogonality between subcarriers in the uplink signal.
VII Results & Discussion
To validate our system, we visualized several PHY signals and user throughput in real time as the system is running. We are particularly interested in the SRS channel estimates in frequency domain and PUSCH symbols as they were received, MRC, and RZF equalized. By changing the number of MU-MIMO layers in the PUSCH scheduler between one and two, we can enable and disable the MU-MIMO functionality and observe the change in PUSCH constellation and user throughput in real time.
In Fig. 4 the magnitude frequency response of the MIMO channel is visualized. These measurements come from SRS and are used to compute the MU-MIMO combiner. With a bandwidth and a line-of-sight channel in our lab, we have a relatively flat channel.
As shown in Fig. 5, when MU-MIMO scheduling is disabled, the received signal constellation is a circle. This is the result of residual impairments, such as frequency offset. Applying the MRC combiner to this signal is sufficient to recover the quadrature phase shift keying (QPSK) constellation. In contrast, enabling MU-MIMO scheduling (Fig. 6) introduces strong inter-user interference, which distorts the received symbols and prevents MRC from producing a separable QPSK pattern; and full channel inversion provided by the RZF combiner is necessary to recover the constellation.
In Fig. 7, the effect on user throughput is clearly visible in the time series graph collected from throughput tests. When the MU-MIMO scheduler is enabled, the rate of each user is roughly doubled. The increased rate is maintained as long as the MU-MIMO scheduler remains enabled. Both rates drop to their previous levels when the MU-MIMO scheduler is switched off.
VIII Conclusion & Future Work
In this paper, we introduced our real-time uplink MU-MIMO system demo as a building block for our cell-free testbed. Our results show that it is possible to build a MU-MIMO system using general-purpose computers, commercial SDRs, and open source software. In future work, we plan to extend this system with downlink MU-MIMO capability using TDD channel reciprocity with a hardware calibration step. We also plan to scale the testbed by adding additional RUs in geographically separated locations, enabling a user-centric cell-free architecture.