Как сделать матрицу проверки на четность из несистемной в систематическую в 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
Другие вопросы по тегам