EncodeLDPC校验矩阵H的高斯变换

    这两天看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
    end
end
//查找有无不符合的行需要进行列变换的
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
    end
end

    上面实现了上三角阵,继续下面的代码就能完成要求的操作:

//将上三角矩阵变为前半部分单位矩阵
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 );
    end
end

    虽然比较满意能够编出来,因为前几天看了但没理解,但还是网上给的方法编出来更简单些,而且用的循环少些。不管怎么说,是一个小节点的完成吧~~继续继续!!

原文地址:https://www.cnblogs.com/heyuheitong/p/2737949.html