Commit Graph
7046 Commits
Author SHA1 Message Date
francescomani dcf7e4ddcd Merge remote-tracking branch 'origin/issue_907' into integration_2025_w11 2025-03-17 16:50:56 +01:00
Jaroslava Fiedlerova 830ceac0ab Merge remote-tracking branch 'origin/fix_numIter' into integration_2025_w11 (!3296)
fix(nrLDPC_decoder): fix numIter increment

The logs of ./nr_ulsim -n100 -m19 -s12 -S12 -z2 -L4 were showing that sometimes
the decoding of one segment was failing while the CRC check succeeded. This was
happening because the iteration counter numIter was not properly managed so that
when the last iteration was successful to decode the segment still numIter at
the exit was equal to numMaxIter plus 1 so that decoding was considered to have
failed. In other words the last iteration if it occured was always wasted.

This commit offers to solve this problem by simply moving the iteration counter
increment at the end of the iteration loop while remaining careful at fixing the
tests relying on this counter.

Post-Scriptum:
After a first review, we decided to make the counter more standard from a C code
perspective. The counter now counts from 0 to numMaxIter minus 1. If it reaches
numMaxIter, it means that decoding was unsuccessful.
2025-03-14 15:50:12 +01:00
Romain Beurdouche 6b660e4091 fix(nrLDPC_decoder): Cleaning LDPC iteration accounting in NR
The idea is to make LDPC iteration accounting more standard from a C coding perspective by making two changes:
1. Now the iteration counter starts at 0 for the first iteration and goes up to max_ldpc_iterations - 1 for the last iteration.
   If it is equal to max_ldpc_iterations, it means that decoding failed.
2. A chain of useless returns in the UE DLSCH decoding call chain was removed.
2025-03-10 15:11:19 +00:00
Bartosz Podrygajlo 75f04874d1 Handle changing N_TA_offset on the UE correctly in higher layers
Send new N_TA_offset in config_request to PHY. Remove N_TA_offset update
from ta_command.
2025-03-10 16:00:54 +01:00
Bartosz Podrygajlo 99e67dc599 Ensure clean exit of NR UE
- Shutdown DL/UL actors
 - Join the main/stat UE threads
2025-03-07 06:19:15 +01:00
Romain Beurdouche b6bedf1216 fix(nrLDPC_decoder): fix numIter increment
The logs of `./nr_ulsim -n100 -m19 -s12 -S12 -z2 -L4` were showing that sometimes the decoding of one segment was failing while the CRC check succeeded.
This was happening because the iteration counter `numIter` was not properly managed so that when the last iteration was successful to decode the segment
still `numIter` at the exit was equal to `numMaxIter` plus 1 so that decoding was considered to have failed.
In other words the last iteration if it occured was always wasted.

This commit offers to solve this problem by simply moving the iteration counter increment at the end of the iteration loop
while remaining careful at fixing the tests relying on this counter.
2025-03-06 13:03:14 +00:00
francescomani 302c39fa71 Merge remote-tracking branch 'origin/limit-amp-param' into integration_2025_w09 2025-03-02 15:31:18 +01:00
francescomani 10060982c0 Merge remote-tracking branch 'origin/ue-long-prach' into integration_2025_w09 2025-03-01 16:34:48 +01:00
Robert Schmidt 4901467e6f Limit amp_dmrs to 16 bit signed max
amp_dmrs is used to scale individual 16bit samples. hence, limit it to
the signed maximum of 16 bits.
2025-02-28 11:39:30 +01:00
Sakthivel Velumani 591e009326 Fix prach K,kbar for mu 0 2025-02-25 11:58:41 -05:00
Sakthivel Velumani a3ba41b234 Don't do OFDM mod on PRACH slots
set number of prach slots in prach_vars in first slot and set as
inactive in last slot so we can skip OFDM modulation in slots that
already has prach.
2025-02-25 11:58:41 -05:00
Sakthivel Velumani a635b4b441 UE PRACH signal generation optimization
Use memcpy in nr_prach.c to fill txdata buffer.

Remove global tables related to PRACH generation.

Add new function to compute modulo multiplicative inverse and use it
directly to get inverse instead of LUT.

Removed nr_ru table and compute the values in-place.

In UE, added new flag root_seq_computed in nrUE_config to only compute
the sequence once after new nrUE_config is received.
2025-02-25 11:58:41 -05:00
Sakthivel Velumani 424b4f4daa Add processing time stats for PRACH 2025-02-25 11:58:41 -05:00
Sakthivel Velumani 611bbb5265 Use tx power from prach PDU instead of constant 2025-02-25 11:58:41 -05:00
Sakthivel Velumani cf0206e7c6 Fix scheduler for long prach
Long PRACH extends beyond a slot. Changes necessary to mark future slots
that may contain prach in ru, phy and mac functions.

In RU, the PRACH IDFT is done only after receiving last slot and marks
for L1 to start processing. The L1 processes at the last prach slot and
reports to MAC with the first slot index.

In MAC scheduler, the VRB for future slots are also marked as used.
PRACH scheduler is called in advance one frame minus num prach slots.
2025-02-25 11:58:41 -05:00
Jaroslava Fiedlerova 01431a0e3f Merge remote-tracking branch 'origin/nrLDPC_coding_improvements_3' into integration_2025_w08 (!3227)
fix(nrLDPC_coding): timers in DL encoding, fix(ldpctest): Confusion in sizes

Main improvements:

1. fix(ldpctest): Confusion in sizes
   IMPORTANT: This fix makes that ldpctest now works with BG2 and K' != K!
   (Worth double checking with more cases than I did check with though)
   The variable block_length had an ambiguous role and was used as both K and
   Kprime. This was leading to arrays with wrong sizes and functions with wrong
   arguments. Now there is not anymore block_length but K and Kprime.
   Kprime can be set with the command line argument -l.
   There was also some problems with array allocation for segments with length
   not divisible by 8. A proper sizing with ((size_in_bits + 7) & ~7) / 8 was
   used.
   A proper masking of the last byte containing payload bits was also added to
   keep filler bits to 0 after random initialization.

2. fix(nrLDPC_coding): timers in DL encoding
   While timers were available for rate matching and interleaving in the new
   interface, these timers were not merged to rate matching and interleaving
   timers in nr_dlsch_coding.
2025-02-21 14:23:24 +01:00
Robert Schmidt 651ef3daee Merge remote-tracking branch 'origin/resource_mapping_optim' into integration_2025_w07 (!3127)
Optimizations of PDSCH Resource Mapping in nr_dlsch.c/nr_modulation.c

These changes add SIMD optimizations for Neon/AVX2/AVX512 in the PDSCH
transmit path. The timing improvements are listed here based on the

    nr_dlsim -e25 -R273 -b273 -s30 -x "layers" -y 4 -z 4 -P

benchmark with "layers" 2,3,4 and comparing "PHY proc tx":

273 PRBS, mcs25, 64QAM

peafowl (gcc11,AMD EPYC 9374F)

    2-layer, 4 TX : 431 us (develop 565 us)
    3-layer, 4 TX : 692 us (develop 849 us)
    4-layer, 4 TX : 963 us (develop 1172 us)

stupix (gcc10, Xeon Gold 6354)

    2-layer, 4 TX : 568 us (develop 652 us)
    3-layer, 4 TX : 901 us (develop 1030 us)
    4-layer, 4 TX : 1250 us (develop 1396 us)

matix (gcc14, Ryzen 9 PRO 7945)

    2-layer, 4 TX : 317 us (develop 505 us)
    3-layer, 4 TX : 538 us (develop 779 us)
    4-layer, 4 TX : 767 us (develop 1233 us)
2025-02-17 22:09:26 +01:00
Laurent THOMAS 8a63b01387 merge 2 functions that do the same in one and set better naming 2025-02-17 18:51:21 +01:00
Laurent THOMAS ce7bdf71e9 fix simde lacking refix 2025-02-17 11:06:08 +01:00
Jaroslava Fiedlerova 34970d38ef fix in nr_dlsch.c, dmrs_case2b 2025-02-17 10:22:17 +01:00
Raymond Knopp fa38798521 bugfix in nr_dlsch.c 2025-02-16 23:26:51 +01:00
Robert Schmidt 590850b03d Merge remote-tracking branch 'origin/issue_904' into integration_2025_w07 (!3257)
Bugfix in gNB modulated DCI buffer size

Closes #904
2025-02-14 15:15:40 +01:00
Bartosz Podrygajlo 16f028dba5 Dynamic PDCCH aggregation level
The aggregation level search order for PDCCH candidates is modified:
 - the search starts from desired_agg_level_index, which is a value from 0 to 4
   proportial to pdcch_cl_adjust.
 - pdcch_cl_adjust is a value between 0 and 1 that indicates PDCCH channel quality
   by averaging HARQ DTX rate. A value of 0 means perfect channel, a value o 1 means
   impaired channel.
2025-02-13 10:57:14 +01:00
francescomani 2bdb1826c9 fix in gnb mod_dci buffer size 2025-02-13 09:34:12 +01:00
Raymond Knopp 1d538592fe fixed compilation warnings and minor errors for aarch64 2025-02-12 11:59:52 +01:00
Laurent THOMAS 3edd989aff simplify nr_layer_mapping(), and use all simd sizes for the tail 2025-02-12 11:59:52 +01:00
Laurent THOMAS 9004787171 group two symbol loops to make one with smaller tsack size and smaller variables 2025-02-12 11:59:52 +01:00
Laurent THOMAS f73afa393e group similar functions in one version, split one too large function in two functions 2025-02-12 11:59:52 +01:00
Laurent THOMAS eb0dda59ac remove intermediate buffer and memory copy, continue to simplify nr pdsch computation 2025-02-12 11:51:28 +01:00
Laurent THOMAS 2fad8796b1 clean no_ptrs_dmrs_case() 2025-02-12 11:51:28 +01:00
Laurent THOMAS 5ff5d01fb9 simplify and order sizes of SIMD vectors 2025-02-12 11:51:28 +01:00
Laurent THOMAS 9d844135b1 local dmrs_mux and unaligned mod_dmrs 2025-02-12 11:51:28 +01:00
Laurent THOMAS 3ddb2d0502 very coarse grain dlsch computation function break into smaller functions 2025-02-12 11:51:28 +01:00
Laurent THOMAS d928e68e12 create a separate function to process dlsch ptrs 2025-02-12 11:51:28 +01:00
Laurent THOMAS 5526244ad6 create a function per dlsch_id 2025-02-12 11:51:28 +01:00
Laurent THOMAS 889b4b00e3 SIMD optimizations for Neon/AVX2/AVX512 in the PDSCH transmit path 2025-02-12 11:51:28 +01:00
Robert Schmidt 976f210132 Merge remote-tracking branch 'origin/error-simd-intrinsic-name' into integration_2025_w06 (!3239)
Remove inexistant SIMD instruction

develop branch doesn't compile with AVX2 only. For instance,
mm_loadi_epi32() doesn't exist in SSE, only in the AVX512 family,
despite it being a 128 bit vector size instruction.

See also:
https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#_mm_loadi_epi32()

This was masked by using SIMDE.
2025-02-07 17:33:08 +01:00
Robert Schmidt 999877eaae Merge remote-tracking branch 'origin/issue_709' into integration_2025_w06 (!3000)
Improvements for NR dlsim and ulsim
2025-02-07 17:31:59 +01:00
Romain Beurdouche 6138e33f42 fix(nrLDPC_coding): Documentation 2025-02-05 11:22:54 +00:00
Romain Beurdouche 2d4d313b62 feat(nrLDPC_coding): Transform segment coding libraries into slot coding libraries by statically linking the adaptation layer and the segment coding libraries 2025-02-05 11:22:46 +00:00
Romain Beurdouche ad88beef10 fix(ldpctest): few improvements on top of clang-format changes 2025-02-04 13:30:43 +00:00
Romain Beurdouche 430f0081ea fix(ldpctest): apply clang-format to openair1/PHY/CODING/TESTBENCH/ldpctest.c 2025-02-04 13:30:43 +00:00
Romain Beurdouche aa2bebdeee fix(ldpctest): Confusion in sizes
The variable block_length had an ambiguous role and was used as both K and Kprime.
This was leading to arrays with wrong sizes and functions with wrong arguments.
Now there is not anymore block_length but K and Kprime.
Kprime can be set with the command line argument `-l`.

There was also some problems with array allocation for segments with length not divisible by 8.
A proper sizing with `((size_in_bits + 7) & ~7) / 8` was used.
A proper masking of the last byte containing payload bits was also added to keep filler bits to 0 after random initialization.
2025-02-04 13:30:38 +00:00
Romain Beurdouche e6c802176d fix(nrLDPC_coding): Rename ldpc8blocks_coding_segment into ldpc8blocks
The name ldpc8blocks_coding_segment was previously used to avoid any confusion with ldpc8blocks while both were coexisting.
They are not anymore coexisting so it can now be shortened.
2025-02-04 12:34:11 +00:00
Romain Beurdouche a5215ba047 fix(nrLDPC_coding): Apply clang-format to openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c 2025-02-04 12:34:11 +00:00
Romain Beurdouche 4384021938 fix(nrLDPC_coding): Apply clang-format to openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c 2025-02-04 12:34:11 +00:00
Romain Beurdouche c89cec2f0c fix(nrLDPC_coding): timers in DL encoding
While timers were available for rate matching and interleaving in the new interface,
these timers were not merged to rate matching and interleaving timers in nr_dlsch_coding.
2025-02-04 12:34:11 +00:00
Laurent THOMAS 43b981247e error-simd-intrinsic-name 2025-02-04 13:21:43 +01:00
francescomani 3bfb952989 rate matching formatting 2025-02-04 08:21:11 +01:00
Robert Schmidt 31c8ca9c53 Merge remote-tracking branch 'origin/process-slot-tx-in-order' into integration_2025_w05 (!3224)
Ensure execution of processSlotTX in order in NR UE

Make sure that processSlotTX is executed in slot order.

There is a bug that causes decoding error when processSlotTX is executed
out of order. The root cause is not known at this point, but this change
avoids the bug altogether.
2025-01-31 08:01:07 +01:00