1

在 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矩阵时得到的结果:

Octave 中的矩阵图

如您所见,第二个块列是空的,但这不是预期的。这个块列应该有一个身份子矩阵和另一个子矩阵pi_5_6。我觉得在子矩阵的连接过程中出现了问题,但是我没有发现任何问题。

4

0 回答 0