如何在Matlab中从非系统到系统进行奇偶校验矩阵?感谢

时间:2016-06-09 13:34:43

标签: matlab

我正在尝试制作从非系统到系统的奇偶校验矩阵。因此,我在下面附上我的代码。有些正确,但有一些问题。如果有人可以帮助我,那将是非常好的。 主题:信息理论和编码。我正在研究LDPC编码和解码。请检查以下代码

MATLAB代码

H=[1 0 1 1 0; 0 0 1 0 1; 1 0 0 1 0; 1 0 1 1 1]

[m,n]=size(H);
k=n-m;
for i=k+1:n
%H(:,i)
ind=find(H(:,i),1,'last');
% exchanging (ind)th row and (i-k)th row
if ind<i-k
    continue;
end
if ind~=i-k
    temp=H(ind,:);
    H(ind,:)=H(i-k,:);
    H(i-k,:)=temp;
end
I=find(H(:,i));
% Guassian elimination
for j=1:length(I)
    if I(j)~=i-k
        H(I(j),:)=mod(H(I(j),:)+H(i-k,:),2);
    end
end
end
Hsys=H

例如

这是我的H矩阵

H =

 1     0     1     1     0
 0     0     1     0     1
 1     0     0     1     0
 1     0     1     1     1

我想在矩阵中有一个单位矩阵。这里H矩阵的维数是(m×n),即(4×5)。

通常我们使用高斯消元法来制作Identity矩阵。因此,我们在行之间进行操作。这就是我们如何使其系统化。 我应该在结果中使用矩阵:

Hsys =

 0     1     0     0     0
 0     0     1     0     0
 1     0     0     1     0
 0     0     0     0     1

enter image description here

我应该有一个维度m

的单位矩阵

1 个答案:

答案 0 :(得分:3)

以下是我如何做到这一点(使用Gauss-Jordan消除):

% Not your matrix since it does not have any ones in the second column.
H=[1 1 0 1 1 0 0 1 0 0;
   0 1 1 0 1 1 1 0 0 0;
   0 0 0 1 0 0 0 1 1 1;
   1 1 0 0 0 1 1 0 1 0;
   0 0 1 0 0 1 0 1 0 1];


rows = size(H, 1);
cols = size(H, 2);

r = 1;
for c = cols - rows + 1:cols
    if H(r,c) == 0
        % Swap needed
        for r2 = r + 1:rows
            if H(r2,c) ~= 0
                tmp = H(r, :);
                H(r, :) = H(r2, :);
                H(r2, :) = tmp;
            end
        end
    end

    % Ups...
    if H(r,c) == 0
        error('H is singular');
    end

    % Forward substitute
    for r2 = r + 1:rows
        if H(r2, c) == 1
            H(r2, :) = xor(H(r2, :), H(r, :));
        end
    end

    % Back Substitution
    for r2 = 1:r - 1
        if H(r2, c) == 1
            H(r2, :) = xor(H(r2, :), H(r, :));
        end
    end

    % Next row
    r = r + 1;
end