In real 5G NR Signal demodulation, the constellation is correct, but the decoded bit sequence is wrong

I have recently been attempting to process a segment of PUCCH Format 4 signals collected from a 5G signal generator using the 5G Toolbox in MATLAB. The 5G signal generator is from the ROHDE & SCHWARZ SMW-K14x/-K17x series. The version of Matlab I used is 2025b.
The carrier and PUCCH configurations in the generator are fully consistent with those set in my MATLAB code. In the simulation results, a distinct DMRS symbol correlation peak can be observed (Figure 1). After performing time synchronization, carrier offset compensation, and channel equalization, the constellation diagram of the received PUCCH symbols obtained via the nrPUCCHDecode function shows a standard QPSK modulation pattern (Figure 2).
However, when I attempt to decode the soft bits using the nrUCIDecode function, the CRC check always fails, and the resulting bit sequence does not match the one configured on the signal generator. Later, I encountered the exact same issue when demodulating PUCCH Format 3 and PUCCH Format 4 signals collected from real 5G transmitting devices.
Has anyone encountered the same problem before? Could you kindly share your solutions? Thank you very much!!

2 Comments

I faced similar issue because of intra-slot frequecy hoping. It was enabled in the genrator but I was not handling in the code, making the the second hop's symbols at the wrong frequency, corrupting half the data.
You can also check if the nID, RNTI and slot index are matching in your code and signal generator. And before nrUCIDecode, examine the soft bit LLRs. They should show clear separation if everything upstream is correct.
As a last resort you can try both small (e.g., 11 bits) and large payloads to see if the issue is payload-size dependent.
Ok, thanks for your share and suggestions! I will do further examination with my code.

Sign in to comment.

 Accepted Answer

The CRC failure in "nrUCIDecode()" despite clean DMRS, correct synchronization, good equalization, and a clean QPSK constellation is caused by configuration mismatches, not by RF or demodulation errors. The decoding chain is working, but the UCI bits are being mapped or descrambled incorrectly.
First, the UCI payload configuration must match the transmitter exactly. For PUCCH Format 3/4, the payload can include HARQ-ACK, SR, CSI, or combinations of these. The values in "nrUCIConfig" must be set to the exact bit lengths used by the generator or device. Any mismatch here will always cause CRC failure.
Second, the scrambling parameters must be identical to the transmitter. "RNTI", "NID", and "NCellID" must match exactly. Group hopping and sequence hopping must also be set the same way. If any of these differ, descrambling is wrong, which produces valid-looking constellations but incorrect bits and a failed CRC.
Third, frequency hopping and resource mapping must match. For Format 4 in particular, "FrequencyHopping", "SecondHopStartPRB", "PRBSet", and "SymbolAllocation" must be identical to the transmitter configuration. Any mismatch breaks the bit mapping even if DMRS detection and equalization look correct.
Fourth, the PUCCH format must be correct (Format = 3 or Format = 4). A format mismatch between transmitter and MATLAB will always cause CRC failure.
Finally, the decode chain must use LLRs from "nrPUCCHDecode()" as input to "nrUCIDecode()". Symbols or incorrectly processed data must not be passed directly into "nrUCIDecode()".
Hope this helps!

1 Comment

thanks for your detailed answer and suggestions! I am testing my code with these aspects you mentioned. hope it works...

Sign in to comment.

More Answers (0)

Products

Release

R2025b

Asked:

on 22 Jan 2026

Commented:

on 3 Feb 2026

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!