在 Ruby 和 SciRuby 的 NMatrix 模块的帮助下,我正在生成一个符合 CCSDS 标准的 LDPC 奇偶校验矩阵。生成矩阵涉及创建子矩阵,将它们连接在一起以形成最终的奇偶校验矩阵。但是连接的最终结果是不正确的。
这是我现在为连接所做的:
def pi_K(k, m)
mat = NMatrix.zeros(m, dtype: :int8, stype: :yale)
mat.each_with_indices { |elem, col, row|
if col == pi(k, row, m)
mat[col, row] = 1
end
}
return mat
end
def xor_mul(a, b)
return (a.dot(b)).map { |e| e % 2 }
end
# Some code not shown here
m = $submatrix_m[code_rate][block_len]
z_m = NMatrix.zeros(m, dtype: :int8, stype: :yale)
i_m = NMatrix.eye(m, dtype: :int8, stype: :yale)
i_m_pi_1 = xor_mul(i_m, pi_K(1, m))
pi_2_3_4 = xor_mul(xor_mul(pi_K(2, m), pi_K(3, m)), pi_K(4, m))
pi_5_6 = xor_mul(pi_K(5, m), pi_K(6, m))
pi_7_8 = xor_mul(pi_K(7, m), pi_K(8, m))
h = z_m.hconcat(z_m, i_m, z_m, i_m_pi_1).vconcat( \
i_m.hconcat(i_m, z_m, i_m, pi_2_3_4)).vconcat( \
i_m.hconcat(pi_5_6, z_m, pi_7_8, i_m))
# Save h matrix...
这是我在 Octave 中绘制最终的h矩阵时得到的结果:
如您所见,第二个块列是空的,但这不是预期的。这个块列应该有一个身份子矩阵和另一个子矩阵pi_5_6。我觉得在子矩阵的连接过程中出现了问题,但是我没有发现任何问题。