我正在尝试制作从非系统到系统的奇偶校验矩阵。因此,我在下面附上我的代码。有些正确,但有一些问题。如果有人可以帮助我,那将是非常好的。 主题:信息理论和编码。我正在研究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
我应该有一个维度m
答案 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