Skip to content

UE: implement TRS processing in PHY#199

Open
sakthivelvelumani wants to merge 3 commits into
duranta-project:developfrom
sakthivelvelumani:ue-trs-support
Open

UE: implement TRS processing in PHY#199
sakthivelvelumani wants to merge 3 commits into
duranta-project:developfrom
sakthivelvelumani:ue-trs-support

Conversation

@sakthivelvelumani

Copy link
Copy Markdown
Collaborator

This PR implements PHY layer processing for CSI-RS tracking signal that estimates the CFO and sends a frequency correction command to the radio when CFO goes above a threshold of 500Hz.

A CI test is added with a GNU radio script between OCUDU gNB and the UE that simulates a continuous frequency offset. The test passes if the UE sends a frequency correction command.

@sakthivelvelumani sakthivelvelumani added the nrUE Run only 5G UE tests (physims included, LDPC tests excluded). label Jun 16, 2026
# -*- coding: utf-8 -*-

#
# SPDX-License-Identifier: GPL-3.0

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@arora-sagar please advise

@durantabot

Copy link
Copy Markdown
Collaborator

CI Build: #337 | Failed on the following stages:

Comment thread openair1/PHY/NR_UE_TRANSPORT/csi_rx.c
Comment thread openair1/PHY/NR_UE_TRANSPORT/csi_rx.c Outdated
@durantabot

Copy link
Copy Markdown
Collaborator

CI Build: #424 | Failed on the following stages:

@rorsc rorsc mentioned this pull request Jul 1, 2026
@sakthivelvelumani sakthivelvelumani force-pushed the ue-trs-support branch 2 times, most recently from 1b57d37 to ebb0d46 Compare July 4, 2026 17:27
@sakthivelvelumani

Copy link
Copy Markdown
Collaborator Author

I removed the CI test framework from this MR. We can add the CI test for TRS later on when its clean on how to add external scripts with GPL.

@durantabot

Copy link
Copy Markdown
Collaborator

CI Build: #656 | Failed on the following stages:

@durantabot

Copy link
Copy Markdown
Collaborator

CI Build: #657 | Failed on the following stages:

if (!slot_fep_map[symb]) {
nr_slot_fep(ue, &ue->frame_parms, proc->nr_slot_rx, symb, rxdataF, link_type_dl, 0, ue->common_vars.rxdata);
slot_fep_map[symb] = true;
{

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would remove this parenthesis that gives an unnecessary indentation

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added the parenthesis to minimize the scope of the buffer trs_estimates so that the following code would have more available stack to work with.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

adding a new scope does not change the stack size in anyway, could you please explain what you mean?

or is it to reduce the scope? this has nothing to do with the stack.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

my understanding is that when the program leaves a scope, it reclaims the stack. so in this case after leaving the scope, the physical memory used by trs_estimates[] could be reused by whatever comes next.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that is correct, thanks. it makes now sense to me. You could alternatively also create a function, but for me it's fine then.

Comment thread openair1/PHY/defs_nr_UE.h Outdated
Comment thread openair1/PHY/NR_UE_TRANSPORT/csi_rx.c Outdated
Comment thread nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
TRS resources if configured by gnb, is present in two consequtive slots
and two symbols per slot. LS estimates from the first symbol is saved
and in second symbol frequency offset and time offset is estimated. The
estimated FO is saved in UE global structure which is used in the last
TRS slot. If the FO is above a threshold, the radio's center frequency
is adjusted.

Time offset is estimated but not used because time is already tracked
using PBCH DMRS.

Signed-off-by: Sakthivel Velumani <s.velumani@northeastern.edu>
measurement bitmap for CSI-RS is 0 means CSI-RS for tracking. So don't
return and proceed with processing the CSI-RS.

Signed-off-by: Sakthivel Velumani <s.velumani@northeastern.edu>
Signed-off-by: Sakthivel Velumani <s.velumani@northeastern.edu>
@durantabot

Copy link
Copy Markdown
Collaborator

CI Build: #685 | Failed on the following stages:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

nrUE Run only 5G UE tests (physims included, LDPC tests excluded).

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants