clc;clear;
for loop = 1:1000
load PEGH_3_6_1024.mat
[m,n] = size(H);
% H_simple = zhu_rank(H); %H化为行最简阵
%***********************高斯消元开始****************************************
a = H;
for j = 1:m
for i = j:m-1
for k = i+1:m
if a(i,j)==0 && a(k,j)==1
a([i,k],:)=a([k,i],:);
end
end
end
for i = j+1:m
if a(i,j)==1 &&a(j,j)==1
a(i,:)=xor(a(i,:),a(j,:));
end
end
end
%F_F=a
%*********************调整顺序*****************
%********统计******
for i = 1:m
for j = i:n %最大值只能统计到n,不能统计到m+n,m为单位矩阵
if a(i,j)==1
order(i) = j;
break;
else
order(i) = m+1;%全零视为越界
end
end
end
order_1 = order;%读取顺序 %未整理前每行第一个不为0数字所在位置组成的向量
%*********第一次排序*****
for i = 1:m-1 %i,j是冒泡前后排序,不是行列排序
for j = i+1:m
if order_1(i)>order_1(j)
t = a(i,:);
a(i,:) = a(j,:);
a(j,:) = t;
t = order_1(i);
order_1(i) = order_1(j);
order_1(j) = t;
end
end
end
order_2 = order_1;
%调整顺序 % 整理后没行第一个不为0数字所在位置组成的向量
a_begin = a; %整理后的排序
%***************第一次行最简化简*******************************
for j = m:-1:1 %列元素排序,和上面行元素排序不同,不可替换
for i = j:-1:1 %****确定位置***
if a(i,j)~=0
countt(j) = i; %找到每一列最后一个非零元素所在的位置
break; %找到每一列从下至上第一个非零元素后,跳出本轮循环
else
countt(j) = m+1;
end
end
end
countt;
for j = m:-1:1
for i = countt(j)-1:-1:1 %全零列不影响
if a(i,j)~=0
a(i,:) = xor(a(i,:),a(countt(j),:));
end
end
end
a_simple = a;
%********************************************************
%********第二次统计&排序*******
for i = 1:m
for j = i:n %最大值只能统计到n,不能统计到m+n,m为单位矩阵
if a(i,j)==1
count = j;
break;
else
count = m+1;
end
end
order(i)= count;
end
order_3 = order; %读取顺序,便于行变换
for i = 1:m-1 %i,j是冒泡前后排序,不是行列排序
for j = i+1:m
if order_3(i)>order_3(j)
tt = a(i,:);
a(i,:) = a(j,:);
a(j,:) = tt;
t = order_3(i);
order_3(i) = order_3(j);
order_3(j) = t;
end
end
end
order_4 &#
項目一:LDPC在碼刪除信道下譯碼
最新推荐文章于 2022-11-01 09:39:51 发布