Thomas Schlichter
a898c18ddc
Update NTN in Feature Set
2025-10-24 15:11:36 +02:00
Thomas Schlichter
ccad50daca
NR UE: do not consider suspended logical channels in nr_update_bsr()
...
While a logical channel is suspended, we should not consider it in the BSR,
as we cannot transmit any data from it.
2025-09-23 11:17:44 +02:00
Thomas Schlichter
5c16758386
gNB: when creating a ReconfigurationWithSync, make sure epochTime_r17 is present if there is a ntn_Config_r17
...
Fixes #995
2025-09-22 11:06:16 +02:00
Thomas Schlichter
272be719dd
NR UE: in nr_ue_scheduler.c set LCID_buffer_remain to 0 if RLC indicates not more bytes in buffer
...
If the RLC indicates that there is no more data in the buffer, also the scheduler's
LCID_buffer_remain should be set to 0. Else the UE sends BSR indicating it has data
to be transmitted. The gNB would then unnecessarily schedule UL for this UE, which
would not be used, as there is no actual data to be transmitted.
2025-09-19 12:11:58 +02:00
Thomas Schlichter
6b80fbf072
update doc/MAC/mac-usage.md
2025-09-09 11:17:43 +02:00
Thomas Schlichter
b3242490f1
enable SSB-SINR reporting for NTN GEO scenario
2025-09-09 11:17:43 +02:00
Thomas Schlichter
2944775952
nr_ulsim: fix computation of the scrambling errors
...
The array ul_harq_processes[harq_pid].f contains the data as bits, not bytes.
2025-09-09 11:17:43 +02:00
Thomas Schlichter
4e87ac46a1
nr_dlsim: several fixes for low SNR scenarios
...
If the DCI in PDCCH is not correctly received, no PDSCH would be decoded but counted as no error.
Also if the DCI was not correctly received, a TBS of 0 would be used in some computations and memory allocations.
Fix these not counting if there is no PDSCH decoding, and by using the known TBS instead of the one received from the DCI.
2025-09-09 11:17:43 +02:00
Thomas Schlichter
1c63d44afd
NR UE: make the power averaging IIR filter faster
...
Especially high initial noise levels would stay too long and negatively impact the accuracy of later S(I)NR computations.
2025-09-09 11:17:43 +02:00
Thomas Schlichter
e70bb45ebd
gNB: consider the measured PUSCH SNR when computing the UL MCS if only one round is used
2025-09-09 11:17:43 +02:00
Thomas Schlichter
9346b50eb3
gNB: consider also the min_mcs when computing the DL MCS if only one round is used
2025-09-09 11:17:43 +02:00
Thomas Schlichter
a9a9dfe297
gNB: adjust the dl_max_mcs based on the reported SSB-SINR
2025-09-09 11:17:33 +02:00
Thomas Schlichter
2b2e9563ff
gNB: add SSB-SINR measurement values to the MAC statistics output
2025-09-08 13:32:23 +02:00
Thomas Schlichter
afc13c264c
gNB: compute and store SSB-SINR in dB instead of just the SINR-index
2025-09-08 13:32:23 +02:00
Thomas Schlichter
e5b68fb6ee
NR UE: modify shift value in nr_dlsch_mmse() for improved performance
2025-08-25 09:29:38 +02:00
Thomas Schlichter
eb6c195c9b
NR UE NTN: consider acceleration on orbital path to calculate N_UE_TA_drift_variant
...
The acceleration magnitude on the orbital path can be calculated as:
t = 2 * pi * r / v
omega = 2 * pi / t = v / r
acceleration = omega² * r = v² / r
Where t is the orbital period, r is the orbital radius, v is the orbital velocity, omega is the angular velocity.
The acceleration direction is from the SAT position towards the earth center.
To calculate the acceleration towards the UE, this is projected on the direction from the SAT to the UE.
2025-08-09 07:37:35 +02:00
Thomas Schlichter
4de0e54a3a
NR UE: further simplify and optimize the usage of the PDCCH LLR array
...
The initial version of this patch was provided by "Laurent THOMAS <laurent.thomas@open-cells.com >"
2025-08-08 17:41:15 +02:00
Thomas Schlichter
a6ccdd1340
NR UE: fix pdcch llr_size calculation in nr_rx_pdcch()
2025-08-08 14:58:14 +02:00
Thomas Schlichter
506dc7da52
NR UE: invalidate SI window on successful SI reception to avoid wrongly reusing this old SI window for new SI reception
...
This fix was suggested by Francesco Mani
2025-08-04 10:52:08 +02:00
Thomas Schlichter
16fd1bb67c
gNB: fix case when multiple Rel-17 SIBs would be defined
...
The boolean value v17_sib was not set to true when allocating si_schedulingInfo_v17 and schedulingInfo2_r17.
So multiple Rel-17 SIBs would lead to multiple allocations and only the last SIB being actually configured.
Fix this by removing the redundant v17_sib variable and directly check if the memory was already allocated.
Also move the definition and allocation of si_schedulingInfo_v17 closer to its actual usage.
2025-08-04 10:52:08 +02:00
Thomas Schlichter
7827a40f19
NTN config: setting sib1_tda is not required anymore
2025-08-04 10:52:08 +02:00
Thomas Schlichter
d4f4cefd6b
set ntn-UlSyncValidityDuration-r17 to 5 seconds for LEO scenario
...
Now that we reliably receive SIB19, we can set the ntn-UlSyncValidityDuration-r17 to a sane value
and thus make sure that the UE always has up-to-date SIB19 information.
2025-08-04 10:52:08 +02:00
Thomas Schlichter
53208bd163
NR UE: fix calculation of SI window expiry
2025-08-04 10:52:08 +02:00
Thomas Schlichter
bbf4cd4a90
gNB: fix scheduling of rel-17 SIBs
2025-08-01 16:00:12 +02:00
Thomas Schlichter
5fb72906f3
gNB: fix NTN UL retransmissions
...
Re-add to consider the cellSpecificKoffset_r17 for UL retransmissions.
This got lost in commit c8387d706c
2025-07-01 07:48:21 +00:00
Thomas Schlichter
ed54e0bbd1
NR_UE: make lcids_bj_pos an array of nr_lcordered_info_t pointers instead of structure elements
...
This makes the array itself smaller and allows to store just a pointer in select_logical_channels() instead of copying the complete structure element.
2025-06-24 14:56:35 +00:00
Thomas Schlichter
5856c89741
NR UE: do not select a suspended LCID for scheduling
...
This fixes a lifelock in nr_ue_get_sdu(), because select_logical_channels() would select
a suspended LCID for scheduling, but fill_mac_sdu() would not provide data for it.
2025-06-24 14:42:20 +00:00
Thomas Schlichter
c3a11c4717
NR UE: fix condition when to print the error message in write_reorder_clear_context()
...
We should print the error message when the mutex cannot be locked because it is already locked.
Unfortunately, the if() condition was inverted...
2025-06-24 14:41:53 +00:00
Thomas Schlichter
7b991c4dbf
NR UE: exit from configure_ntn_ta() if ntn_Config_r17 is not provided
2025-06-20 13:58:55 +00:00
Thomas Schlichter
a3bb97b6b7
gNB: set invalid NTN parameters in prepare_scc(), so fix_scc() will free them when not used
2025-06-20 13:55:45 +00:00
Thomas Schlichter
ef416234d9
NR UE: enable logging of NTN RRC timer information
...
To verify the NTN epoch time and NTN timer calculations, enable the logging by default.
This only affects NTN configurations.
2025-06-20 11:43:59 +00:00
Thomas Schlichter
1bb781b08c
NR UE: trigger RRC timers based on RX frame and slot
...
For NTN Epoch time calculations, we need to know the RX frame number.
2025-06-20 11:24:06 +00:00
Thomas Schlichter
960f2e7101
NR UE: allow the epochTime-r17 in NTN-Config-r17 to be in the future
...
The implementation is limited to epoch times that are not more than 5.12 seconds in the future (allowed are up to 10.24 seconds)
and ntn-UlSyncValidityDuration < 5.12 seconds (allowed are up to 90 seconds).
To fix this limitation, the hyper frame number HFN has to be introduced at the OAI UE!
2025-06-20 11:24:06 +00:00
Thomas Schlichter
a9a6ab367b
NR UE: fix autonomous_ta to be applied only when we also adjust the DL sync
2025-06-20 11:24:06 +00:00
Thomas Schlichter
786f4877bc
rfsimulator: for LEO NTN, update SIB19 information once for each frame
2025-06-20 11:24:06 +00:00
Thomas Schlichter
e91fb33da3
NR UE: also use ta_CommonDriftVariant_r17 to calculate the initial timing advance
2025-06-20 11:24:06 +00:00
Thomas Schlichter
22866c3c1e
NR UE: for consistency, rename ntn_ta_commondrift to N_common_ta_drift
2025-06-20 11:21:01 +00:00
Thomas Schlichter
f7ab814a3c
NR UE: remove unused elements from struc fapi_nr_dl_ntn_config_command_pdu
2025-06-20 11:18:59 +00:00
Thomas Schlichter
7ba63a2052
rfsimulator: for LEO NTN, calculate SAT acceleration towards gNB to determine ta-CommonDriftVariant-r17
2025-06-20 11:18:59 +00:00
Thomas Schlichter
ece430b6c3
NR UE: use shorter member names for position_t structure
2025-06-20 11:18:59 +00:00
Thomas Schlichter
f1d612c01b
NR UE: improve initial timing advance calculation from SIB19
...
Before, we only considered ta_Common_r17 and the SAT position from SIB19 to compute the initial timing advance value.
This is good enough if the satellite does not move too fast (e.g. GEO satellite).
Now we also consider ta_CommonDrift_r17 and the SAT velocity together with the epoch time from SIB19.
This improves the accuracy of the initial TA computation, esp. for LEO satellite scenarios.
2025-06-20 11:18:48 +00:00
Thomas Schlichter
42bc0d4eb3
rfsimulator: update SIB19 contents every second for LEO channel simulations
2025-06-20 11:15:49 +00:00
Thomas Schlichter
99f3628569
gNB: add function nr_update_sib19() allowing to update SIB19 information
2025-06-20 11:15:49 +00:00
Thomas Schlichter
0ddba90874
ci: test reestablishment for NTN GEO
2025-06-20 08:33:52 +00:00
Thomas Schlichter
ffc0cd43a2
for NTN GEO scenario increase ul_AM_RLC.t_PollRetransmit timer to 2 seconds
2025-06-20 08:33:52 +00:00
Thomas Schlichter
400926115e
NR UE: fix reestablishment for NTN
...
During reestablishment the UE goes back to not synchronized state.
While the synchronizatin is running, we trash frames using the function readFrame().
And when we successfully synchronize, we skip samples to align with the start of the frame using syncInFrame().
In rfsimulator mode, both of these functions send dummy data using the function dummyWrite().
Unfortunately, the writeTimestamp provided to that function was always assuming a duration from RX to TX of NR_UE_CAPABILITY_SLOT_RX_TO_TX.
But in NTN mode, this value is changed when receiving SIB19.
Therefore we have to consider this changed value instead of the static one.
2025-06-20 08:33:52 +00:00
Thomas Schlichter
b264ddc1ec
nrLDPC_coding_t2 fix: convert the correct number of LLRs from 16 Bit to 8 Bit
2025-05-20 08:55:31 +00:00
Thomas Schlichter
073a705720
nrLDPC_coding_t2: minor cleanup
2025-05-20 08:55:30 +00:00
Thomas Schlichter
ffb8e8ff37
nrLDPC_coding_t2: nb_TBs is of type int
2025-05-20 08:53:57 +00:00
Thomas Schlichter
c3d0b2db5c
nrLDPC_coding_t2 fix: use rte_pktmbuf_mtod_offset() to consider offset when accessing output data
2025-05-20 08:51:37 +00:00
Thomas Schlichter
944ac15ab5
nrLDPC_coding_t2: allocate array of rte_bbdev_dec_op pointers on stack instead of heap
2025-05-20 08:00:36 +00:00
Thomas Schlichter
2df487fc8b
nrLDPC_coding_t2: use rte_bbdev_op_type_str() instead of hardcoded array of strings
2025-05-20 08:00:36 +00:00
Thomas Schlichter
af7054554b
nrLDPC_coding_t2: make parameters for set_ldpc_dec_op() more smilar to set_ldpc_enc_op()
2025-05-20 08:00:36 +00:00
Thomas Schlichter
d442461bd1
nrLDPC_coding_t2: remove unused start_idx from set_ldpc_enc_op() and set_ldpc_dec_op()
2025-05-20 08:00:35 +00:00
Thomas Schlichter
b5c9e13df3
nrLDPC_coding_t2: remove unused #define HARQ_INCR
2025-05-20 07:57:23 +00:00
Thomas Schlichter
07ff8a27c4
nrLDPC_coding_t2: remove unused functions mbuf_reset() and check_bit()
2025-05-20 07:57:23 +00:00
Thomas Schlichter
c1e057bc8b
nrLDPC_coding_t2: remove unused atomic variables nb_dequeued and processing_status
2025-05-20 07:57:23 +00:00
Thomas Schlichter
adbf056abb
nrLDPC_coding_t2: remove unused global variable m_head
2025-05-20 07:57:23 +00:00
Thomas Schlichter
4dde956e84
nrLDPC_coding_t2: remove unused vector_mask
2025-05-20 07:57:23 +00:00
Thomas Schlichter
b02e6e8ddd
nrLDPC_coding_t2: inline and remove now nearly empty init_test_op_params()
2025-05-20 07:57:23 +00:00
Thomas Schlichter
ea7e6ffb0b
nrLDPC_coding_t2: remove unused num_to_process
2025-05-20 07:57:23 +00:00
Thomas Schlichter
73c6d1fb62
nrLDPC_coding_t2: remove unused burst_sz
2025-05-20 07:57:23 +00:00
Thomas Schlichter
f47b549f41
nrLDPC_coding_t2: remove unused rte_bbdev_dec_op from test_op_params and thread_params
2025-05-20 07:57:23 +00:00
Thomas Schlichter
e45aff7763
nrLDPC_coding_t2: replace global mp_dec and mp_enc by bbdev_op_pool in thread_params
2025-05-20 07:57:23 +00:00
Thomas Schlichter
300346c43a
nrLDPC_coding_t2: replace global q_bufs by struct data_buffers on stack
2025-05-20 07:57:23 +00:00
Thomas Schlichter
48e78ff4b0
nrLDPC_coding_t2: fix q_bufs memory leak
2025-05-20 07:57:23 +00:00
Thomas Schlichter
ac9a8f017b
nrLDPC_coding_t2 fix: make sure to free allocated mbufs
...
The DPDK driver may directly provide the internal HW mbuf in the dequeued structure.
So don't try to free the mbufs from that dequeued structure, but the ones we allocated.
2025-05-20 07:57:21 +00:00
Thomas Schlichter
1612ba33a8
nrLDPC_coding_t2: remove unused soft_outputs, harq_inputs and harq_outputs elements
2025-05-20 07:56:26 +00:00
Thomas Schlichter
d8b3bfd17b
nrLDPC_coding_t2: use nb_segments_decoding() and nb_segments_encoding() to calculate num_segments
2025-05-20 07:56:24 +00:00
Thomas Schlichter
084bbb0363
nrLDPC_coding_t2: also support newer DPDK versions
2025-05-20 07:54:12 +00:00
Thomas Schlichter
8f93424e53
Adapt NTN-LEO config after integration branch runs
2025-04-22 15:47:41 +02:00
Thomas Schlichter
1aa6aab120
NR UE: in nr_slot_fep() perform FO compensation in local tmp_dft_in array instead of global rxdata array
...
This avoids problems if nr_slot_fep() is called more than once for an OFDM symbol.
2025-04-16 17:42:11 +00:00
Thomas Schlichter
5f8aeaacc9
fix CI files for NTN LEO scenario
2025-04-16 17:00:36 +00:00
Thomas Schlichter
5ac3f59d61
NR UE: fix and improve PHY layer debugging
2025-04-16 12:59:13 +00:00
Thomas Schlichter
67482f5d85
CI: add NR UE conf file including NTN LEO channel model
2025-04-10 14:36:01 +00:00
Thomas Schlichter
6e06c817f4
NR UE: remove now unnecessary local variable update_ntn_system_information
...
directly use `UE->ntn_config_message->update` instead
2025-04-10 13:56:20 +00:00
Thomas Schlichter
997790f656
NR UE: remove unused nr_slot_tx_offset
...
`nr_slot_tx_offset` is unused since commit f3e60a1417
2025-04-10 13:56:20 +00:00
Thomas Schlichter
a9132a2f79
NR UE: in nr_adjust_synch_ue() extend the peak search to +/- cyclic prefix size
...
esp. for LEO NTN scenarios the timing drifts during initial sync, which is mostly compensated with --ntn-initial-time-drift.
But there might be a residual time offset, and by extending the peak search window we make this more tolerant.
2025-04-10 13:56:20 +00:00
Thomas Schlichter
4e3a7ad56e
Extend NTN LEO example in RUNMODEM.md to include continuous Doppler compensation
2025-04-10 13:56:20 +00:00
Thomas Schlichter
29ed144764
use SIMD to speed up nr_fo_compensation()
2025-04-10 13:56:20 +00:00
Thomas Schlichter
d6585f3750
rfsimulator: enable and correct NTN LEO doppler simulation
2025-04-10 13:56:20 +00:00
Thomas Schlichter
18469302d8
NR UE: add PI controller to continuous frequency offset compensation
2025-04-10 13:56:20 +00:00
Thomas Schlichter
84712f5f92
NR UE: add support for continuous UL frequency offset pre-compensation
...
Depending on the main source of frequency offset, pre-compensate the UL frequency offset (FO) accordingly.
Therefore modify the flag `--cont-fo-comp` to accept an integer value, where
- `1` specifies, that the main FO contribution comes from the accuracy of the local oscillator (LO)
- `2` specifies, that the main FO contribution comes from Doppler shift
2025-04-10 13:56:13 +00:00
Thomas Schlichter
aac4642910
NR UE: add support for continuous DL frequency offset compensation (--cont-fo-comp)
2025-04-10 13:54:59 +00:00
Thomas Schlichter
616568a79d
NR UE: add command line parameter --initial-fo to specify known initial frequency offset
2025-04-10 13:54:50 +00:00
Thomas Schlichter
d16507055f
NR UE: continuously estimate the frequency offset using PBCH DMRS
2025-04-10 12:37:19 +00:00
Thomas Schlichter
dd827c7bd8
refactor (co)sinus calculation out of phase_noise() into openair1/PHY/TOOLS/get_sin_cos.c
2025-04-10 12:37:19 +00:00
Thomas Schlichter
9e4df97d84
move function add_noise() to file openair1/SIMULATION/TOOLS/phase_noise.c
2025-04-10 12:36:30 +00:00
Thomas Schlichter
0d01efa00b
NR UE: don't activate HARQ process for PUCCH transmission if feedback is disabled
...
Currently we still activated the DL HARQ process for PUCCH transmission,
and only at the time of the scheduled PUCCH transmission, we actually skip sending the ACK.
This is not only unnecessary, it is at least misleading and strange that
DL HARQ processes can be reused in the meantime, even though they are active...
Therefore simply don't activate the DL HARQ process by skipping the call to set_harq_status() if feedback for it is disabled.
2025-04-01 10:00:46 +00:00
Thomas Schlichter
cfde90dc85
rfsimulator: apply deadlock detection only if more than one client is connected
2025-03-27 09:54:20 +00:00
Thomas Schlichter
981ecb5dde
NR UE: fix nr_pbch_channel_estimation()
2025-03-27 09:50:17 +00:00
Thomas Schlichter
66485aeb1d
correctly set cellBarredNTN_r17 for NTN band again
...
fixes e73e04543a
2025-03-27 09:46:29 +00:00
Thomas Schlichter
0bc46a22c6
move NTN LEO config to band 254 and update doc/RUNMODEM.md
2025-02-14 17:04:47 +00:00
Thomas Schlichter
11b87d8744
NR UE: RRC layer now explicitly tells MAC layer when the RA procedure can be started
2025-02-14 17:04:47 +00:00
Thomas Schlichter
b3581ce1b8
NR UE: simplify calculation of next_tx_slot_and_frame by moving up assignment of duration_rx_to_tx
2025-02-14 17:04:46 +00:00
Thomas Schlichter
f1ae1025ad
fix: ta-Common is a round-trip-time, not a one-way delay
2025-02-14 17:03:56 +00:00
Thomas Schlichter
acac0b21bf
update description how to run NTN scenarios in RUNMODEM.md
2025-02-14 17:03:56 +00:00
Thomas Schlichter
cf0a1d6db4
update conf files for NTN LEO scenario
...
Also added a dedicated conf file for NTN LEO, that can be used for CI.
2025-02-14 17:03:56 +00:00
Thomas Schlichter
3fce7688aa
rfsimulator: update earth radius for LEO simulation to match UE position in ue.conf file
2025-02-14 17:03:56 +00:00
Thomas Schlichter
be2ed07911
NR UE: add MAC state UE_RECEIVING_SIB ensuring to start RA only after successfully receiving SIBs
2025-02-14 17:03:56 +00:00