%function [H]=genH(rows,cols)
%************设置参数***************
rows=8;
cols=24;
u=[1 1 0 1 0 0 0 1 1 1 0 0 1 1 0 1 1];
%**********创建一个1*12的全为零的数组row_flag*******
%**********创建一个24*12的全为零的矩阵parity_check**
row_flag(1:rows)=0;
parity_check=zeros(rows,cols);
%*******填充矩阵**按LDPC码校验矩阵满足条件的要求:(n,j,k)LDPC码
%通过循环,为每一列随机分配 3 个 1,确保每个 1 位于不同的行中
%j=3
bits_per_col=2;
for i=1:cols
a=randperm(rows);
for j=1:bits_per_col
parity_check(a(j),i)=1;
row_flag(a(j))=row_flag(a(j))+1;
end
end
%计算每行1的最多个数??????????????i=1:rows;
i=1:rows;
max_ones_per_row=ceil(cols*bits_per_col/rows);
% i=1:rows;
% max_ones_per_row=max(row_flag(i));
%%******************************************************************%%
%找出全是零元素的行和只有一个非零元素的行进行填充保证每一行最小有两个元素为1
for i=1:rows
if row_flag(i)==0 %如果该行没有1,则随机添加两个1
for k=1:2
j=unidrnd(cols);%unidrnd 函数用于生成一个均匀分布的随机整数
while parity_check(i,j)==1%判断这个位置元素是否是1
j=unidrnd(cols);
end
parity_check(i,j)=1; %在找到的新位置上置1
row_flag(i)=row_flag(i)+1; %行重加1
end
end
if row_flag(i)==1 %如果该行只有1个1,则随机再添加1个1
j=unidrnd(cols);
while parity_check(i,j)==1
j=unidrnd(cols);
end
parity_check(i,j)=1;
row_flag(i)=row_flag(i)+1;
end
end
%**********************************
% for i=1:rows
%
% if ismember(row_flag(i),0:max_ones_per_row) %如果该行小于max_ones_per_row个的1,则随机再添加1个1
% j=unidrnd(cols);
% while parity_check(i,j)==1
% j=unidrnd(cols);
% end
% parity_check(i,j)=1;
% row_flag(i)=row_flag(i)+1;
% end
% end
%%*********************************************************************************%%
%检查每一行,每一行的1元素个数超过max_ones_per_row,
标签:编码,rows,end,parity,cols,flag,随机,LDPC,row From: https://blog.csdn.net/weixin_56805160/article/details/143863281