Как сделать матрицу проверки на четность из несистемной в систематическую в Matlab? Спасибо
Я пытаюсь сделать матрицу проверки на четность из несистематической в систематическую. Следовательно, я прилагаю свой код ниже. В некоторой степени это правильно, но есть некоторые проблемы. Было бы здорово, если бы кто-то мог помочь мне в этом. Предмет: Теория информации и кодирование. Я работаю над кодированием и декодированием LDPC. Пожалуйста, проверьте код ниже
MATLAB CODE
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 здесь равна (mxn), которая равна (4x5).
Обычно мы используем метод исключения Гаусса, чтобы сделать матрицу Identity. Поэтому мы выполняем операции между строками. Вот как мы делаем это систематически. Я должен иметь матрицу, как это в результате:
Hsys =
0 1 0 0 0
0 0 1 0 0
1 0 0 1 0
0 0 0 0 1
У меня должна быть единичная матрица измерения m
1 ответ
Вот как я это сделаю (используя исключение Гаусса-Джордана):
% 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