当前位置:网站首页>【GF(q)+LDPC】基于二值图GF(q)域的规则LDPC编译码设计与matlab仿真
【GF(q)+LDPC】基于二值图GF(q)域的规则LDPC编译码设计与matlab仿真
2022-07-04 06:40:00 【fpga和matlab】
1.软件版本
matlab2017b
2.系统原理
首先假设环长l,如果二进制矩阵的秩是满秩,那么这个环没有包含于二进制最小距离中,假设g=lmin为校验矩阵的环长。那么每一个二进制矩阵(其环长在lmin和lmax)之间,那么就可以降低误码率,提高性能。这里论文中给出的满秩条件FRC的描述如下所示:
给出一个方块矩阵Cd,其环长为d=l/2;通过行列变换,可以得到如下的式子:
那么其满秩条件为det(Cd)不等于0。这个等效于如下的条件:
所以,我们在进行消环的时候,我们将通过循环的方法,通过不断的进行行列变换,满足上述条件,从而得到消环效果。
再介绍停止集:
系统的性能,除了和环相关,还和停止集相关,在实际中,没有具体的方法去消除停止集所带来的影响,通常的做法是:
假设ds是一个给定的停止集的权值,那么对应的规则图形(矩阵)其最小的停止集的权值为dsmin=3g/4.,这里g为环长。在实际中,为了提供系统的性能,需要最大化停止集的最小距离。
然后使用论文最后给出的四个步骤进行循环优化。
整个二进制图像算法的大概步骤为:
第一步:初始化,初始化的步骤就是从初始的H校验矩阵中随机的选择几行,这些行主要来及行集合R以及他们的排列组合中。通过步骤一,我们将得到不同排列组合的几个R的行数据构造的矩阵H。
第二步:这个步骤的主要目的就是删除环长在g和LM之间的环。包括集合S中的停止集,从而获得较好性能的环和停止集状态。设置矩阵H的一组行的标号集合I,然后开始迭代计算,直接矩阵的最大环长大于LM。即消除了整个矩阵中的小环。
具体步骤为:
2.1:初始化随机选择I,这里I 是H矩阵中的所有的行标号的集合的子集合或者全集,这里我们选择所有的行标号作为被优化目标。
2.2:从I中随机的选择一个行标号。
2.3:从矩阵R中随机一个n个随机排列的集合
2.4:选择一个组合,保证一些小的环长的环尽可能的被删除,对于每个循环下的l,搜索比l小的围长,然后删除。
2.5:将集合I中去除本次循环所被删除的环的所在行的标号,然后再循环,直接I变为空集合。
第三步:消环和停止集处理:
这个步骤,主要是针对一些围长大于LM的情况,进行删除,以及对S中的停止集的选择满足最小距离的最大化处理。
第四步:如果没有可以消除的环或者没有S中的停止集的选择满足最小距离的最大化处理发生改变的情况,那么完成这四个步骤的优化过程,否则继续开始上面四个步骤的循环。
关于2,4性能较好的分析
这个只能从相对的角度来分析,因为行重为2的时候,如果系统中存在一个4环,那么这个矩形的两个点分别是对应的行重的两个非0元素,另外两个点是另外一列重的两个非零元素,当列重为4的时候,出现4环的概率要小于2,6,28,210出现四环的概率,
当然,既然能构造出H矩阵,那么一般都是没有四环的,这个时候,就需要考虑六环的结构,六环存在如下几种情况:
同样道理,在列上出现当列重为4的时候,其出现六环的概率远小于列重大于4的情况。如果都没有六环,那么考虑八环的情况。一次类推。
但是2,4的性能又会比2,3性能差些。
从仿真角度考虑,你可以产生不同行重,列重的矩阵,进行仿真对比一下。上面的是从理论角度进行分析的。
3.核心源码
function H = func_good_Hgf32(H0,N);
H = zeros(size(H0));
H = func_randomly(H0,N);
H0 = H;
%%
%Initialization
%The rows values in H are chosen at random from the rows in R and their random permutations
%产生random permutations构成的H矩阵
R = H0;
%随机排列组合
[M,N] = size(H0);
indcol= randperm(M);%行的随机排列
indrow= randperm(N);%列的随机排列
%行排列
for i = 1:M
H(i,:) = R(indcol(i),:);
end
for i = 1:N
H(:,i) = R(:,indrow(i));
end
%产生不同排列组合的R
NUM = N;%设置一个集合
for j = 1:NUM
indcol= randperm(M);%行的随机排列
indrow= randperm(N);%列的随机排列
%行排列
for i = 1:M
Hj(i,:) = R(indcol(i),:);
end
for i = 1:N
Hj(:,i) = R(:,indrow(i));
end
RR{j} = Hj;
end
%%
%Initial cycle cancellation:
ROW_SET = [1:M];
I = ROW_SET;
n = floor(M/2);
g = 1;
LM = 6;
l = g;
MM = length(I);
while(MM > 0)%当为1的时候,则为1,停止循环
for l = g:1:LM
%2.2:从I中随机的选择一个行标号。
tmps = randperm(M);
Index = tmps(1);
%2.3:从R中随机选择n个组合;
for i = 1:n
R_tmps{i} = RR{Index+i-1};
end
%2.4:最大化围长值,然后删除这个集合
for i = 1:n
R_tmps{i} = RR{Index+i-1};
if rank(R_tmps{i}) == M
R_tmps{i} = [];
RR{Index+i-1} = zeros(size(RR{Index+i-1}));
end
end
end
%2.5:本次循环结束,去掉随机的Index
MM = MM-1;
end
%去除被排除的组合方法
Index2 = 0;
for i = 1:NUM
if sum(RR{i}) > 0;
Index2 = Index2 + 1;
RR2{Index2} = RR{i};
end
end
%%
%Cycle cancellation and stopping set mitigation
%先进行消环
Index3 = 0;
RR3 = RR2;
for i = 1:Index2
%检测是否存在大于LM的环长,如果存在,则删除,否则不删除
cycle4num = check4cycle(RR3{i});
cycle6num = check6cycle(RR3{i});
cycle8num = check8cycle(RR3{i});
if cycle4num == 0 & cycle6num == 0 & cycle8num == 0
Index3 = Index3 + 1;
RR3{Index3} = RR2{Index3};
elseif cycle4num == 0 & cycle6num == 0 & cycle8num > 0
RR3{Index3} = zeros(size(RR2{Index3}));
end
end
%去除被排除的组合方法
Index4 = 0;
for i = 1:Index3
if sum(RR3{i}) > 0;
Index4 = Index4 + 1;
RR4{Index4} = RR3{i};
end
end
%在剩下的集合中,任意选择一个。
SEL = randperm(Index4);
H = RR4{SEL(1)};
4.测试结果
5.参考文献
[1] Poulliat C , Fossorier M , Declercq D . Design of regular (2,dc)-LDPC codes over GF(q) using their binary images[J]. IEEE Transactions on Communications, 2008, 56(10):1626-1635.A14-14(error)
边栏推荐
- C语言中的排序,实现从小到大的数字排序法
- Displaying currency in Indian numbering format
- STC8H开发(十二): I2C驱动AT24C08,AT24C32系列EEPROM存储
- Code rant: from hard coding to configurable, rule engine, low code DSL complexity clock
- 2022 wechat enterprise mailbox login entry introduction, how to open and register enterprise wechat enterprise mailbox?
- 2022 is probably the best year for the economy in the next 10 years. Did you graduate in 2022? What is the plan after graduation?
- 测试用例的设计
- Option (024) - do all objects have prototypes?
- Mysql 45讲学习笔记(十二)MySQL会“抖”一下
- What is tweeman's law?
猜你喜欢
图的底部问题
[problem record] 03 connect to MySQL database prompt: 1040 too many connections
R统计绘图-随机森林分类分析及物种丰度差异检验组合图
SQL join, left join, right join usage
[MySQL] introduction, function, creation, view, deletion and modification of database view (with exercises)
《ClickHouse原理解析与应用实践》读书笔记(4)
[backpack DP] backpack problem
selenium IDE插件下载安装使用教程
【MySQL】数据库视图的介绍、作用、创建、查看、删除和修改(附练习题)
Cloud native - SSH article that must be read on the cloud (commonly used for remote login to ECS)
随机推荐
MySQL installation and configuration
[MySQL] introduction, function, creation, view, deletion and modification of database view (with exercises)
MySQL 45 lecture learning notes (12) MySQL will "shake" for a while
ABAP:OOALV实现增删改查功能
selenium IDE插件下载安装使用教程
C réaliser des jeux de serpents gourmands
Can the out of sequence message complete TCP three handshakes
Mysql 45讲学习笔记(十)force index
CORS is not intended to protect API endpoints - nikofischer
2022 is probably the best year for the economy in the next 10 years. Did you graduate in 2022? What is the plan after graduation?
tars源码分析之6
Is the insurance annuity product worth buying? Is there a hole?
uniapp 自定義環境變量
《ClickHouse原理解析与应用实践》读书笔记(4)
P26-P34 third_ template
Displaying currency in Indian numbering format
手动对list进行分页(参数list ,当前页,页面大小)
Cloud native - SSH article that must be read on the cloud (commonly used for remote login to ECS)
Analysis of tars source code 5
MySQL 45 lecture learning notes (XIV) count (*)