Commit Graph
100 Commits
Author SHA1 Message Date
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
Thomas Schlichter 9b7e39b16f NR UE: fix writeTimestamp inconsistencies
The "writeTimestamp inconsistencies" are coming from the fact that during the actual processing we write `N_TA_offset` samples _and_ `NR_UE_CAPABILITY_SLOT_RX_TO_TX` slots ahead,
but both was not corrently considered in readFrame() and syncInFrame().
Therefore, there was always a warning about a gap in write timestamps as soon the actual processing starts.
2025-02-14 17:03:56 +00:00
Thomas Schlichter f1ca3066a0 NR UE: add command line parameter ntn-initial-time-drift to compensate time drift during initial sync
The value of ntn_init_time_drift is used at initial sync to compensate for the time drift during initial sync detection.

To perform the initial time and frequency sync, the OAI UE currently takes a snapshot of two frames and then performes PSS correlation, SSS detection and MIB decoding.
Doing this takes much time, several tens of ms. During that time, the DL timing drifts so much, that we immediatedly lose sync again.
Therefore the current OAI UE implementation needs to know the drift rate to compensate for this drift, as we are "blind" while performing the initial sync.

To my undestanding, commercial UEs simply have a faster initial sync, so the DL timing will not drift away too much while performing that initial sync.
2025-02-14 17:03:56 +00:00
Thomas Schlichter e7122ad789 NR UE: fix application of NTN TA information 2025-02-14 17:03:48 +00:00
Thomas Schlichter 6b8a59cb68 gNB: add support for NTN parameter ta-CommonDrift-r17 2025-02-03 16:04:09 +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 45dfcbe6cd remove unused global variable sl_ahead 2025-01-17 10:59:39 +00:00
Thomas Schlichter 0b4b6b952d remove unused rt_profiling 2025-01-17 10:59:28 +00:00
Thomas Schlichter 28656a1adf add test log2_approx.boundaries 2024-10-02 13:30:16 +02:00
Thomas Schlichter d6f9bcd1cc fix test log2_approx64.boundaries
The test was actually never executed correctly (unsigned -10 is never <= 10), and log2_approx64_ref() was not accurate enough.
Therefore replace it by directly comparing one value above and one value below each rounding boundary.
2024-10-02 13:30:16 +02:00
Thomas Schlichter 6bf68c81c8 skip the test log2_approx.complete when using ctest
To skip the test, we use the gtest command line parameter "--gtest_filter" to filter out the unwanted test.
This parameter is described as follows:

--gtest_filter=POSITIVE_PATTERNS[-NEGATIVE_PATTERNS]
      Run only the tests whose name matches one of the positive patterns but
      none of the negative patterns. '?' matches any single character; '*'
      matches any substring; ':' separates two patterns.
2024-10-02 13:30:16 +02:00
Thomas Schlichter 60c2b3fe00 nrscope: fix label on gNB scope - it is NR not LTE ;-) 2024-09-27 17:07:20 +02:00
Thomas Schlichter 9f8a2573ee gNB: update DL and UL bler_stats.mcs for logging also in case of harq_round_max == 1 2024-09-27 17:07:15 +02:00
Thomas Schlichter 60ca088e51 gNB: respect config value dl_max_mcs also in case of harq_round_max == 1 2024-09-27 17:07:11 +02:00
Thomas Schlichter d9940b1bc4 NR UE: fix logical error in nr_ue_process_dci_dl_10()
Fixing this avoids the theoretical possibility of dereferencing a NULL pointer.
2024-09-27 17:07:03 +02:00
Thomas Schlichter b0eedd3bbd gNB: fix a comment - current TA interval is 100 frames, not 10 2024-09-27 17:06:52 +02:00
Thomas Schlichter 791cc4f648 NR UE: set time sync PI controller integral weight to 0.0 by default
Experiments did show that the time sync is less stable in terrestrial mode if the integral part of the PI controller is used.
So set it to 0.0 by default. For NTN LEO use case we can still use it by providing the command line parameter --time-sync-I 0.2 .
fixes #846
2024-09-27 17:06:42 +02:00
Thomas Schlichter 64380eaca2 gNB: consider NTN_Koffset when scheduling PRACH 2024-09-27 17:03:36 +02:00
Thomas Schlichter 0ecf35de84 gNB: print error message if PRACH resources are already occupied in schedule_nr_prach() 2024-09-27 17:03:21 +02:00
Thomas Schlichter 656a87bb8a gNB: make sure not to write behind end of prach_pdu_indication_list in L1_nr_prach_procedures() 2024-09-27 16:59:48 +02:00
Thomas Schlichter ed7750aba2 fix debug output for DEBUG_DLSCH_MAPPING 2024-09-26 13:21:32 +02:00
Thomas Schlichter 1b97cdafcd improve LLR scaling for better performance 2024-09-23 17:58:05 +02:00
Thomas Schlichter 4b679c0793 add test for log2_approx64() 2024-09-23 17:58:05 +02:00
Thomas Schlichter 58a2966499 add test for log2_approx() 2024-09-23 17:58:05 +02:00
Thomas Schlichter 4e09353b43 use SIMDE intrinsic to count leading zeroes and make rounding exact 2024-09-23 17:58:03 +02:00
Thomas Schlichter 4b859a2eb8 fix sidelink UE issues found by sanitizer 2024-08-26 17:08:27 +02:00
Thomas Schlichter b17b44dffb add description how to run a LEO satellite rfsimulation to RUNMODEM.md 2024-08-23 14:57:48 +02:00
Thomas Schlichter ede6775ac3 fix for compilers that don't support the CMPLX() macro 2024-08-23 14:57:48 +02:00
Thomas Schlichter 0eb409f114 NR_UE: Perform autonomous timing advance to compensate for fast time drift with relatively large RTT
As we don't have SIB19 with continuously updated ta-Common and ta-CommonDrift values yet, the UE can only adapt it's UL timing according to it's DL drift.
This is required for the UE to keep UL sync with fast time drift and relatively long RTT (e.g. LEO satellite).
We should replace this with the standard compliant way as soon as we have SIB19 with continuously updated contents.
2024-08-23 14:57:48 +02:00
Thomas Schlichter e662721310 NR_UE: make NTN parameter ta_CommonDrift_r17 configurable via command line parameter --ntn-ta-commondrift
While we don't have SIB19 support yet, UE gets this parameter from command line, just like --ntn-koffset and --ntn-ta-common.
We use this value to initialize the UE's time-tracking PI controller accumulator.
This allows to correctly track the time even if the delay is changing significantly (e.g. due to LEO satellite movement).
We also use it to compensate for the time drift that happenes while performing the initial sync.
2024-08-23 10:26:18 +02:00
Thomas Schlichter fc4310cda7 fix multi-statement marco asn1cCallocOne() 2024-08-23 10:26:18 +02:00
Thomas Schlichter 4039473a70 NR_UE: add PI controller to time sync
this allows to compensate larger continuous time drift in DL (e.g. large Doppler from LEO satellite)
2024-08-23 10:26:18 +02:00
Thomas Schlichter 8ab7f1dd68 change returned value of UE_dl_preprocessing() in case no sampleShift change from 0 to INT_MAX
This now allows to indicate "there was a new sampleShift calculation, and the actual value is 0"
additionally to "there was no new sampleShift calculation".
2024-08-23 10:25:00 +02:00
Thomas Schlichter cfb6ed4d82 add example configuration using transparent LEO satellite model for rfsimulator 2024-08-20 16:46:25 +02:00
Thomas Schlichter 6a8edaf317 rfsimulator: add delay and Doppler simulation for circular orbit and add according channel models SAT_LEO_TRANS and SAT_LEO_REGEN
Delay and Doppler computation is done as in Matlab function dopplerShiftCircularOrbit:
https://de.mathworks.com/help/satcom/ref/dopplershiftcircularorbit.html
2024-08-20 16:46:25 +02:00
Thomas Schlichter 68b07d542c rfsimulator: correctly set center frequency 2024-08-20 16:46:25 +02:00
Thomas Schlichter fae529b384 add documentation for disable_harq flag in NTN section of doc/RUNMODEM.md 2024-07-23 10:42:10 +02:00
Thomas Schlichter b76eb19471 gNB: refactor code to handle end of using a specific HARQ process - finish_nr_dl_harq() and finish_nr_ul_harq() 2024-07-19 16:09:04 +02:00
Thomas Schlichter cd052951d5 gNB: do not schedule DLSCH ACK/NACK reporting in PUCCH for harq pid where feedback is disabled 2024-07-19 10:43:52 +02:00
Thomas Schlichter 3a014e199f NR UE: skip DLSCH ACK/NACK reporting for harq pid where feedback is disabled 2024-07-19 10:43:52 +02:00
Thomas Schlichter fe7be3f130 Make handle_nr_uci_pucch_2_3_4() more consistent regarding logs with handle_nr_uci_pucch_0_1() 2024-07-19 10:43:52 +02:00
Thomas Schlichter 44410df598 fix double reduction of sched_ul_bytes in case of failing 4th HARQ round
sched_ul_bytes is reduced already in case the last HARQ round fails through handle_nr_ul_harq() -> abort_nr_ul_harq().
Therefore, the reduction in nr_rx_sdu() is wrong, and btw. it wrongly assumes the max. UL HARQ rounds to 4.
So simply remove this peace of code in nr_rx_sdu().
2024-07-19 10:43:52 +02:00
Thomas Schlichter a6fb797477 improve tracking of sched_ul_bytes in nr_rx_sdu() by using sdu_lenP instead of sched_pusch.tb_size
sched_ul_bytes tracks the volume of in-flight data.
When data is successfully received, sched_ul_bytes is decreased in nr_rx_sdu().
In case of reusing HARQ processes, the tb_size stored there is not correct.
Therefore use the actual SDU size instead.
2024-07-19 10:43:52 +02:00
Thomas Schlichter b331ad21f4 in nr_rx_sdu() use HARQ ID from nfapi_nr_crc_t instead of feedback_ul_harq 2024-07-19 10:43:52 +02:00
Thomas Schlichter f7665357fc dont't print warning in handle_nr_ul_harq() if disable_harq == 1 2024-07-19 10:43:52 +02:00
Thomas Schlichter 9a0408a5c7 immediately reuse Msg4 HARQ ID and don't wait for Msg4 feedback if DL HARQ feedback is disabled 2024-07-19 10:43:52 +02:00
Thomas Schlichter 4baac21ec6 immediately reuse UL HARQ ID and don't wait for feedback if disable_harq == 1 2024-07-19 10:43:52 +02:00
Thomas Schlichter bf2baf2ffe immediately reuse DL HARQ ID and don't wait for feedback if DL HARQ feedback is disabled 2024-07-19 10:43:52 +02:00
Thomas Schlichter ae4cbcfb0c gNB: add config file option "disable_harq" and set pdsch_servingcellconfig->ext3->downlinkHARQ_FeedbackDisabled_r17 accordingly 2024-07-19 10:43:52 +02:00
Thomas Schlichter e6719d7718 remove superfluous semicolon from multi-line macros in oai_asn1.h 2024-07-15 10:46:05 +02:00
Thomas Schlichter 394431a594 remove nrqtscope 2024-07-13 11:22:36 +02:00
Thomas Schlichter 359880fa73 rfsimulator: use ceil() to calculate the integer number of chan_offset samples from the prop_delay_ms
The actual propagation delay should not be smaller than the one specified.
A too short propagation delay might result in too early reception of Msg1, and with that in a mis-detection of the RAPID.
2024-07-11 14:48:52 +02:00
Thomas Schlichter 9dc0dc5ffe NR UE: improve PSS detection by reducing the detection step size from 8 to 4
Until commit d74b2bd19f, the PSS detection step size was 4, anyways.
The PSS detection step size is a compromise between detection duration and accuracy.
The most accurate detection step size would be 1, but this would lead to even longer initial sync time.
2024-07-11 14:43:13 +02:00
Thomas Schlichter 4ddb2d3bac add section with NR UE NTN example to doc/RUNMODEM.md 2024-07-11 13:33:30 +02:00
Thomas Schlichter 1e47311259 NR UE: use sr_ProhibitTimer_v1700 if present 2024-07-11 13:33:30 +02:00
Thomas Schlichter 75efcf49b9 NR UE: add NTN specific parameter ta-Common and use it for initial timing advance, RA_contention_resolution_timer and RA_window_cnt
The value for this parameter can be set via UE command line parameter `--ntn-ta-common` in milliseconds.
2024-07-11 13:33:30 +02:00
Thomas Schlichter 021f97cf10 NR UE: increase DURATION_RX_TO_TX by cellSpecificKoffset_r17 2024-07-10 15:56:05 +02:00
Thomas Schlichter 26175c5413 NR UE: add NTN specific parameter cellSpecificKoffset_r17 and use it for UL scheduling
According to the RRC specification, cellSpecificKoffset is:
Scheduling offset used for the timing relationships that are modified for NTN (see TS 38.213 [13]).
The unit of the field K_offset is number of slots for a given subcarrier spacing of 15 kHz.
If the field is absent UE assumes value 0

This parameter `cellSpecificKoffset_r17` can be set via UE command line parameter `--ntn-koffset`.
2024-07-10 14:42:42 +02:00
Thomas Schlichter f7c2732899 add section with NTN example to doc/RUNMODEM.md 2024-06-03 11:54:55 +02:00
Thomas Schlichter 75f5215b22 add exemplary cellSpecificKoffset_r17, sr_ProhibitTimer_v1700, t300, t301 and t319 to conf files for 24 and 25 PRBs 2024-06-03 11:54:55 +02:00
Thomas Schlichter f1938acbab gNB: make ue_TimersAndConstants configurable via conf file 2024-06-03 11:54:55 +02:00
Thomas Schlichter 90fa3d5534 gNB: make SR timers configurable in CONF file 2024-06-03 11:54:55 +02:00
Thomas Schlichter 4cdf4d61f3 gNB: add sr_ProhibitTimer_v1700 2024-06-03 11:54:55 +02:00
Thomas Schlichter be41a4ea60 gNB: use 2 * K2 for contention_resolution_timer, as the timer starts with Msg2 transmission and ends with Msg4 ACK reception 2024-06-03 11:54:55 +02:00
Thomas Schlichter 0ce0282238 gNB: make checks for missed feedbacks more robust w.r.t. frame number warp-around in find_harq() 2024-06-03 11:54:55 +02:00
Thomas Schlichter 6b01cfb8e2 gNB: fix phytest scheduler in case no HARQ processes are available
In case no HARQ processes are available (because all are waiting for feedback), we skip scheduling...
2024-06-03 11:54:55 +02:00
Thomas Schlichter 8e4526e221 gNB: change TA update interval to 100 frames instead of 10
The RTT for GEO satellites is more than 500 ms.
And as the TA update interval must be greater than the RTT, we increase it to 1 second instead of 100 ms.
Should also do no harm for terrestrial networks.
2024-06-03 11:54:55 +02:00
Thomas Schlichter ccba7c875d gNB: add NTN specific parameter cellSpecificKoffset_r17 and use it for UL scheduling
According to the RRC specification, cellSpecificKoffset is:
Scheduling offset used for the timing relationships that are modified for NTN (see TS 38.213 [13]).
The unit of the field K_offset is number of slots for a given subcarrier spacing of 15 kHz.
If the field is absent UE assumes value 0

This parameter `cellSpecificKoffset_r17` can be set in the gNB conf file, in the section `servingCellConfigCommon`
2024-06-03 11:54:55 +02:00
Thomas Schlichter 2bb632a7fe fix 5G NR SA FDD configs for 25 and 25 PRBs
make sure the SSB is offset by 4 PRBs from the BW start.
Therefore, the ARFCN for the SSB center must be offset by 14 PRB from the ARFCN for the BW start.
2024-05-24 13:21:38 +02:00
Thomas Schlichter f969eddbe2 fix gNB to print correct --CO parameter for OAI UE in FDD case 2024-05-24 13:16:47 +02:00