Fix nrLDPCEncode(algo="sionna") for valid BG2/K=640 inputs - #80
Open
ThereWasAYang wants to merge 4 commits into
Open
ThereWasAYang wants to merge 4 commits into
ThereWasAYang wants to merge 4 commits into
Conversation
…sition PDSCHDMRSSyms() appended an extra DMRS at symbol 7 for any 8- or 9-symbol PDSCH allocation, regardless of DMRSAdditionalPosition. When DMRSAdditionalPosition == 0 the type A single-symbol DMRS must contain only the front-loaded symbol l0, but the function returned two symbols. All other duration branches (10/11, 12, 13/14) already gate the additional DMRS on add_pos; the [8, 9] branch was missing that check. Add the `if add_pos >= 1` guard so the result matches 3GPP TS 38.211 Table 7.4.1.1.2-3. This also corrects the downstream APIs that rely on PDSCHDMRSSyms: nrPDSCHDMRSIndices, nrPDSCHDMRS, nrPDSCHIndices and nrPDSCHPTRS.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Related Issue
Fixes #78
Summary
This PR fixes a bug in
nrLDPCEncode(..., algo="sionna")for valid BG2 low-rate inputs such as:tbs = 552R = 120 / 1024BGN = 2K = 640Zc = 64Previously, this case failed with a matrix dimension mismatch during encoding.
Root cause
In the current implementation,
k_bis used for two different purposes:i_ls)_gen_submat(...)For BG2 and
K=640, the code correctly selects:k_b = 9but this value is only intended for lifting-size selection.
When constructing the encoding submatrices,
_gen_submat(...)should still use the base-graph systematic width:nsys = 10for BG2Using
k_b=9here causes the base graph to be sliced incorrectly, which leads to a dimension mismatch later in_encode(...).Fix
Keep
k_bfor lifting-size selection, but usensyswhen calling_gen_submat(...).Before
After
I also removed the unused
pcm = _lift_basegraph(bm, Zc)line from this branch.Regression test
This PR adds a regression test covering a valid BG2/K=640 case:
tbs = 552R = 120 / 1024The test verifies that
nrLDPCEncode(..., algo="sionna")no longer crashes and returns an output with the expected shape.Observed error before this fix
For the valid input above, the encoder failed with:
Why this is correct
For BG2, the reduced
k_bvalues (10/9/8/6) are part of the lifting-size selection procedure in 38.212. They do not change the actual number of systematic base-graph columns, which remains fixed by the base graph itself.So:
k_bshould affecti_lsselectionnsysshould affect_gen_submat(...)slicing