Commit Graph
6982 Commits
Author SHA1 Message Date
Laurent THOMAS f272d7d1cc set correct type on qpsk modulation table 2025-01-28 09:50:29 +01:00
Laurent THOMAS c73353bed3 comprehensive dmrs reception and better cpu efficiency 2025-01-28 09:50:29 +01:00
Jaroslava Fiedlerova 7bd248e15d Merge remote-tracking branch 'origin/preamble-index-logs' into integration_2025_w04 (!3220)
Improve RA logs

Modify existing LOG entries to include preamble index, timing advance and
estimated distance from the gNB. This makes mapping RA attempts to
physical/simulated UEs easier via sent/received preamble index or physical
distance from the gNB in scenarios with >1 UE.
2025-01-27 16:15:10 +01:00
Jaroslava Fiedlerova 699f2e5d81 Merge remote-tracking branch 'origin/nfapi-fixes' into integration_2025_w04 (!2999)
Repair nFAPI in 5G

Add 5G nFAPI in OAI/Make it it work.

Many commits in this branch are basically bug fixes of things that don't work
properly, such as

- check for correct conditions (e.g. instance numbers in the RAN context)
- remove artificial limitation (e.g. only one PUCCH per TDD period in the PNF)
- improve performance (reduce big mallocs, make some static buffers such as a
  global ring buffer for nFAPI messages in the PNF)
- fix bugs in nFAPI (e.g., increase maximum message size to ~64kB instead of
  1500 bytes, because the latter is way too small for many TX_data.requests in
  5G, and it will delay message arrival unduly)
- fix bugs in message enc/dec (e.g., handle FDD in config.request)
- adjust the L1 such that the condition "we run monolithic" is not necessery
  (e.g., some message numbers in nFAPI struct where reset in MAC, instead of
  L1, and this breaks when running the PNF)

There are instructions that explain how to set it up. Two CI tests have been
added, one with COTS UE and MIMO in DL+UL in TDD numerology 1 (30kHz), and a
second test with FDD mu=0 (15kHZ) in RFsimulator.

These were some old to-dos that have been addressed.

- test with COTS UE - 4x4 pipeline works good in DL, UL now also work
- test in RFsim
- make PNF status message
- make FDD in u0 work
2025-01-27 15:46:19 +01:00
chenyi 17e36029fa Fix PMI condition: avoid division by zero 2025-01-27 10:59:19 +01:00
Robert Schmidt 3fcfef9006 L1 DLSCH: don't preallocate memory, improve log
The L1 receives a pointer to the L1 payload to use for PDSCH generation.
This would overwrite an existing pre-allocated pointer. Remove this
preallocation. Instead, allocate it in the simulator (the only place
that actively uses this buffer allocation; in nr-softmodem, it's lost by
assigning a pointer). Allocate with an extra byte, because the payload
(in bits) might not be a multiple of 8 bits/1 byte, so the CRC is in the
last 3 bytes.

Also, improve the log with frame/slot information if the PDSCH payload
pointer is NULL.
2025-01-27 10:59:19 +01:00
Robert Schmidt 6a630f4646 nr_schedule_response(): Separate dlsch_fill into DL_tti_req and TX_req part
FAPI sends those independently, so we cannot treat both on the arrival
of the first one.
2025-01-27 10:59:19 +01:00
Robert Schmidt 16ead1d001 nr_slot_select() and set_tdd_config_nr(): remove useless second frame
FAPI says these lists should be for MAX_TDD_PERIODICITY (which is maybe
a frame, or a TDD period? but likely not two frames). Reduce to one
frame.

Also, the nFAPI code assumes one entire frame, so use that (this commit
necessary to actually make the PNF work, otherwise, the
packing/unpacking of the FAPI message would need to do 2 frames).

Closes: #876
2025-01-27 10:59:19 +01:00
Robert Schmidt 1b44f6448b Allow to use multiple PUCCH at once
We are required to store multiple PUCCH (e.g., for multiple UEs).
However, nr_fill_pucch() automatically freed the previously active PUCCH
structure. Of course(!) this does not make sense.

However, the problem is that init_nr_transport() allocated only one
PUCCH structure. Also this does not make sense to me. The problem was
that slot_ahead was 0, which logically cannot happen in this function
(because slot_ahead is illogical, we must give the radio some time). The
reason is that it uses if_inst->sl_ahead, which, prior to this commit,
was not set.

The init_nr_transport() function is called normally from main() through
init_eNB_afterRU(). In this case, we initialize if_inst->sl_ahead to
what is set in main(). In the PNF case, however, we call
init_nr_transport() from the PNF thread, when receiving the start
request. In the main(), we wait for this to happen, before setting
if_inst->sl_ahead. Hence, initializing this variable (which we should
safely be able to do) before solves the problem.
2025-01-27 10:59:15 +01:00
Jaroslava Fiedlerova f3e5ab1060 Merge remote-tracking branch 'origin/remove-most-of-m64-type-usage' into integration_2025_w04 (!3209)
Remove most of m64 type usage

MMX instructions were first SIMD version, the registers management is complex
(_mm_empty()) so, it is better to remove it now and use more recent instructions

anyway, gcc/clang should replace it automatically as long as we enable sse2,
that should always be the case but for code understanding and for ARM porting
for example, it is better to explicitly remove it
2025-01-27 10:35:20 +01:00
Jaroslava Fiedlerova 5512a48fbd Demote error logs to debug for "PUCCH not processed"
As per https://gitlab.eurecom.fr/oai/openairinterface5g/-/issues/896#note_148540,
these logs can be ignored.

Closes: #896
2025-01-27 09:32:49 +01:00
Laurent THOMAS b999177810 remove MMX instruction usage in polar decode 2025-01-24 15:29:28 +01:00
Jaroslava Fiedlerova 266076897c Merge remote-tracking branch 'origin/qam64_mimo_ML' into integration_2025_w04 (!3020)
use ML receiver for 64 QAM UL-MIMO

Change condition on MMSE/ML selection to include 64QAM for ML UL-MIMO receiver.
Only 256QAM will now use MMSE UL-MIMO receiver.
2025-01-24 11:32:37 +01:00
Jaroslava Fiedlerova 706aecf22b Merge remote-tracking branch 'origin/fix_t2_harq_combined_offset' into integration_2025_w04 (!3214)
fix(nrLDPC_coding_t2): Miscellaneous fixes related to T2

1. HARQ combined offset:
The offset provided for each code block in the HARQ combined input and output
buffer shall not be above 512. A modulus was performed on the offset of the TB
in the buffer to avoid this situation. But the offset of the code block was
added afterward so that the total offset was sometimes going above 512.This
commit performs the modulus after adding the code block offset. Usually this
issue was triggering a segfault after less than 2 minutes of an iperf test on
some setup using T2. The same iperf test was successfully performed during 10
minutes on the same setup with this change.

2. Properly stop LDPC coding in gNB and UE:
LDPC coding was yet not properly stopped by using free_nrLDPC_coding_interface
in gNB and UE. This was not causing major issue until now. It was especially not
causing any issue with T2 LDPC coding using the PF. But using T2 VFs, if the
coding library is not properly stopped then the VF cannot be used anymore unless
the admin app is restarted. So this MR adds the missing free_nrLDPC_coding_interface.
2025-01-24 11:30:13 +01:00
Jaroslava Fiedlerova c0a0de3e63 Merge remote-tracking branch 'origin/remove-unused-code' into integration_2025_w04 (!3215)
Remove unused code
2025-01-24 09:31:14 +01:00
Laurent THOMAS ef3b99a263 remove MMX instruction usage in threegpplte_turbo_encoder_sse() 2025-01-23 21:18:26 +01:00
Laurent THOMAS e106ec6d91 remove m64 type and a very basic cleaning of LTE ulsch_decoding 2025-01-23 21:18:26 +01:00
Bartosz Podrygajlo ad04800b20 Add preamble_index to gNB and UE logs 2025-01-23 16:29:29 +01:00
Laurent THOMAS 536b5d8760 Clean up logging module debug flags
cleanup debug/dump flags by avoiding repetitions in the source code and
enable compiler checks. Add a help text if we set a wrong debug trace
option.
2025-01-23 14:12:29 +01:00
Laurent THOMAS d68a8b51e6 Remove unused PHY_MEX compile option 2025-01-23 14:11:13 +01:00
Laurent THOMAS 17bb19c7be Remove unused LOCALIZATION compile option 2025-01-23 14:10:33 +01:00
Laurent THOMAS fb2f893954 Remove unused static inline function 2025-01-23 13:57:36 +01:00
Laurent THOMAS e7e01f753a remove unsed LUT 2025-01-23 10:35:49 +01:00
Romain Beurdouche 38a38e0eaf fix(nrLDPC_coding_t2): Properly stop LDPC coding in gNB and UE
LDPC coding was yet not properly stopped by using free_nrLDPC_coding_interface in gNB and UE.
This was not causing major issue until now. It was especially not causing any issue with T2 LDPC coding using the PF.
But using T2 VFs, if the coding library is not properly stopped then the VF cannot be used anymore unless the admin app is restarted.
So this MR adds the missing free_nrLDPC_coding_interface.
2025-01-20 08:10:42 +00:00
Thomas Schlichter 0fd5130573 NR UE: remove unused elements tx_wait_for_dlsch and rx_offset from nr_rxtx_thread_data_t 2025-01-17 11:40:09 +00:00
Thomas Schlichter a2eaacf2bd remove unused element harq from LDPC encoder_implemparams_t 2025-01-17 11:40:09 +00:00
Thomas Schlichter 0b4b6b952d remove unused rt_profiling 2025-01-17 10:59:28 +00:00
Romain Beurdouche 0d3008c244 fix(nrLDPC_coding_t2): HARQ combined offset
The offset provided for each code block in the HARQ combined input and output buffer shall not be above 512.
A modulus was performed on the offset of the TB in the buffer to avoid this situation.
But the offset of the code block was added afterward so that the total offset was sometimes going above 512.
This commit performs the modulus after adding the code block offset.
2025-01-17 10:55:03 +00:00
Robert Schmidt 998d8c9480 Merge remote-tracking branch 'origin/pucch-rssi-fix' into integration_2025_w03 (!3205)
Fix calculation of RSSI in pucch_rx.c

Fix two issues with RSSI calculation in PUCCH:

- RSSI was calculated using partial sum instead of average of squared samples.
- There was a missing parentheses pair which causes the RSSI value to underflow.

The proper way to calculate power in dBFS is

    let signal_energy = average of squared samples of received signal over resource elements, antennas and symbols under measurement

then:

    rssi[dBFS] = -10log10(max_sample^2 / signal_energy),

or (to avoid division):

    rssi[dBFS] = -(10log10(max_sample^2) - 10log10(signal_energy))
2025-01-15 22:07:31 +01:00
Robert Schmidt a20d229b6b Merge remote-tracking branch 'origin/pucch2-delay-compensation' into integration_2025_w03 (!3034)
Delay compensation for PUCCH2

- Implementation of delay compensation for PUCCH2, which minimizes for
  exampe logs "reported RSRP index XXX invalid"
- Adding a test to the CI to perform the delay compensation in PUCCH2
- Refactor code to use c16_t data type in PUCCH decoder
2025-01-15 18:34:53 +01:00
Robert Schmidt 77ddc36236 Merge remote-tracking branch 'origin/tpool-nospinlock' into integration_2025_w03 (!3193)
Remove spinlock from threadpool task return

The idea to use atomic aligned to cache line for counting finished jobs
is reused, but instead of polling a semaphore was added.
2025-01-15 15:04:37 +01:00
Bartosz Podrygajlo 7bd048e6af Fix calculation of RSSI in pucch_rx.c
Fix two issues with RSSI calculation in PUCCH:
 - RSSI was calculated using partial sum instead of average of squared samples.
 - There was a missing parentheses pair which causes the RSSI value to underflow.
   The proper way to calculate power in dBFS is

    let signal_energy = average of squared samples of received signal over resource
     elements, antennas and symbols under measurement

    then:
     rssi[dBFS] = -10log10(max_sample^2 / signal_energy),
    or (to avoid division):
     rssi[dBFS] = -(10log10(max_sample^2) - 10log10(signal_energy))
2025-01-15 13:49:05 +01:00
Bartosz Podrygajlo 0657ab2275 Remove spinlock from threadpool task return
The idea to use atomic aligned to cache line for counting finished jobs
is reused, but instead of polling a semaphore was added
2025-01-14 15:17:19 +01:00
rmagueta dc5f4bf868 Apply delay compensation only when delay is different from 0 2025-01-14 11:34:22 +01:00
Laurent THOMAS 6384517c01 Better code for PUCCH2 decoding 2025-01-14 11:34:22 +01:00
rmagueta 39a50faa6e Delay compensation for PUCCH2 2025-01-14 11:34:22 +01:00
Laurent THOMAS f919246121 remove part of code using _m64 type (so old mmx instructions) 2025-01-14 10:07:59 +01:00
Laurent THOMAS ba27aefe4e add some const and remove dead code 2025-01-14 10:07:31 +01:00
Laurent THOMAS 7d0c89185c gcc warning on #define duplicated 2025-01-14 10:07:31 +01:00
Laurent THOMAS d5c72cf843 remove a race condition in viberti_lte and a useless global table 2025-01-14 10:07:30 +01:00
Laurent THOMAS a0d6057294 remove calls to clear SIMD registers, that was a historical issue 2025-01-14 10:06:06 +01:00
Robert Schmidt 39d9d32eda Merge remote-tracking branch 'origin/local-UL_INFO' into integration_2025_w02 (!3076)
Move UL_INFO structure allocation local to a rx slot processing

UL_INFO is allocated a gNB, so require mutex and obscur information
passing function to function.  Instead, make a local UL_INFO per slot,
removing the mutex and making the code easier to understand.
2025-01-13 07:46:05 +01:00
Laurent THOMASandRobert Schmidt b4bc7c96ba Move UL_INFO structure allocation local to a rx slot processing
Use UL_INFO on the stack, to simplify the code.  move in the same struct
the associated rach, pdu, crc, srs arrays that where pointed from
directly in gNB structure Keep in nfapi the existing logic that make
malloc for theses rach, pdu, crc, srs array lists

Pass only relevant fields, where appropriate.

Co-authored-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2025-01-10 18:05:58 +01:00
Robert Schmidt 189396aac2 Merge remote-tracking branch 'origin/nrLDPC_coding_improvements_2' into integration_2025_w02 (!3187)
nrLDPC_coding: Fix naming, comments, superfluous variables and documentation typos in coding library interfaces

This MR is clarifying the interfaces to the LDPC coding libraries.  It
aims to improve the readability of the interfaces and compliance of
naming with specification 38.212.
2025-01-10 18:00:35 +01:00
Robert Schmidt d892732ff7 Merge remote-tracking branch 'origin/improve-pusch-per-symbol-processing' into integration_2025_w02 (!3175)
Improvements for PUSCH per symbol processing

- Improved the assert in task_ans.c
- Fixed and issue with PUSCH per-symbol processing that could cause an
  issue in case num_pusch_symbols_per_thread is not 1.
2025-01-10 11:45:50 +01:00
Romain Beurdouche f9c7057ed1 fix(nrLDPC_coding): Apply clang-format to segment coding code 2025-01-10 09:00:35 +00:00
Romain Beurdouche c54e7a7035 fix(nrLDPC_coding): in segment decoder, move useless memset on decoder output c to the oly case where it is useful 2025-01-10 09:00:35 +00:00
Romain Beurdouche 6eb0913de9 fix(documentation): typos and strengthen the explanation of the adaptation layer between slot coding and segment coding 2025-01-10 09:00:35 +00:00
Romain Beurdouche c959f41987 fix(nrLDPC_coding): remove T2 legacy setCombIn from segment decoder parameters 2025-01-10 09:00:35 +00:00
Romain Beurdouche 15fc29843c fix(nrLDPC_coding): cleanup the naming of the K, Kprime and Zc variables to comply with the standard 38.212-5.2.2 2025-01-10 09:00:32 +00:00