我正在为matlab中的LDPC信念传播解码器编写代码。 我遵循以下指定的算法: http://www.ece.umd.edu/~tta/resources/LDPC.pdf第6页。
我想对这个目标使用稀疏矩阵。 在此期间我想迭代只有很少的矩阵。 我的问题是我如何只迭代矩阵中的那些?
我将更具体一点:假设我有以下matlab代码:
for row_index = 1 : row_num
for coloum_index = 1 : col_num
if parity_check_matrix(row_index, coloum_index)
messages_llr_matrix(row_index, coloum_index) = ...
code_word_aprior_prob(coloum_index);
end
end
此代码采用向量'code_word_aprior_prob'并将其值分配给矩阵'messages_llr_matrix'中不为零的行。现在,我想使用稀疏矩阵执行此操作。
parity_check_matrix是一个稀疏矩阵。
答案 0 :(得分:7)
假设您有一个稀疏矩阵true || (1 === 1/3);
。您可以使用
S
虽然我不确定这会有多快。
在你的具体情况下,你可能会这样做
[ii,jj,ss] = find(S);
for k=length(ii)
%// A nonzero element of S: ss(k) = S(ii(k),jj(k))
end
当然,您可以将[ii,jj] = find(parity_check_matrix);
for k = 1 : length(ii)
messages_llr_matrix(ii(k), jj(k)) = ...
code_word_aprior_prob(jj(k));
end
和ii
重命名为jj
和row_index
。
答案 1 :(得分:0)
以下是您的代码段所做的事情,但并未完全迭代稀疏矩阵,就像问题标题所示。另外,我不确定我的其他答案中的方法是否比这更快或更慢。
请注意,我假设code_word_aprior_prob
是行向量。然后做
messages_llr_matrix = bsxfun(@times, parity_check_matrix, code_word_aprior_prob)
可能就足够了。
请测试一下这是否真正给出了正确的答案,如果您真的想要速度,请测试哪种方式更快。</ p>