这两天看LDPC得代码,刚开头,看到H矩阵的高斯变换部分,即得到H=[I P],输出P。
按自己的想法写了段matlab代码(注释那句matlab里应该是%):
for k = 1:rows if ( H(k,k) == 0 ) ind = find( H(k+1:rows,k)~=0 ); if ~isempty(ind) x = k+ind(unidrnd(length(ind))); H(k,:) = rem( H(k,:) + H(x,:), 2 ); end end for i = [k+1:rows] if ( H(i,k) == 1) H(i,:) = rem( H(i,:)+H(k,:), 2 ); end endend//查找有无不符合的行需要进行列变换的for k = 1:rows if H(k,k) == 0 x = rows; cnd = find( H(k,rows+1:cols) ~= 0 ); if ~isempty(cnd) temp = H(:,k); H(:,k) = H(:,x+cnd(1)); H(:,x+cnd(1)) = temp; rearranged_cols(k) = x + cnd(1); end endend
上面实现了上三角阵,继续下面的代码就能完成要求的操作:
//将上三角矩阵变为前半部分单位矩阵for k = 1:rows x = k; ind = find( H(k,k+1:rows) ~= 0 ); while ( ~isempty(ind) ) x = ind(1)+x; H(k,:) = rem( H(k,:) + H(x,:), 2 ); ind = find( H(k,x+1:rows) ~= 0 ); endend
虽然比较满意能够编出来,因为前几天看了但没理解,但还是网上给的方法编出来更简单些,而且用的循环少些。不管怎么说,是一个小节点的完成吧~~继续继续!!