feat: add normalized min-sum CN update mode
Add cn_mode ('offset'/'normalized') and alpha parameters to
min_sum_cn_update() in ldpc_sim.py and generic_decode() in
ldpc_analysis.py. Normalized mode scales magnitudes by alpha
(default 0.75) instead of subtracting a fixed offset, which
is better suited for low-rate codes.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -152,7 +152,8 @@ def ira_encode(info, H_base, H_full, z=32):
|
||||
return codeword
|
||||
|
||||
|
||||
def generic_decode(llr_q, H_base, z=32, max_iter=30, early_term=True, q_bits=6):
|
||||
def generic_decode(llr_q, H_base, z=32, max_iter=30, early_term=True, q_bits=6,
|
||||
cn_mode='offset', alpha=0.75):
|
||||
"""
|
||||
Parameterized layered min-sum decoder for any QC-LDPC base matrix.
|
||||
|
||||
@@ -166,6 +167,8 @@ def generic_decode(llr_q, H_base, z=32, max_iter=30, early_term=True, q_bits=6):
|
||||
max_iter: maximum iterations
|
||||
early_term: stop when syndrome is zero
|
||||
q_bits: quantization bits
|
||||
cn_mode: 'offset' or 'normalized'
|
||||
alpha: scaling factor for normalized mode (default 0.75)
|
||||
|
||||
Returns:
|
||||
(decoded_info_bits, converged, iterations, syndrome_weight)
|
||||
@@ -204,7 +207,10 @@ def generic_decode(llr_q, H_base, z=32, max_iter=30, early_term=True, q_bits=6):
|
||||
msgs_out = []
|
||||
for j in range(dc):
|
||||
mag = min2 if j == min1_idx else min1
|
||||
mag = max(0, mag - offset)
|
||||
if cn_mode == 'normalized':
|
||||
mag = int(mag * alpha)
|
||||
else:
|
||||
mag = max(0, mag - offset)
|
||||
sgn = sign_xor ^ signs[j]
|
||||
val = -mag if sgn else mag
|
||||
msgs_out.append(val)
|
||||
|
||||
Reference in New Issue
Block a user