5G NR LDPC基础讲解(2)——线性分组码的简要介绍
一、线性分组码的简要介绍
首先,给出一个简单的线性分组码的模型:

输入m bits代编码的bit,输出n bits编码后的码字,m为信息位,n为检验位。
码率的计算方法:
下面通过一个实际例子来说明线性分组码。
设线性分组码为(6,3)线性分组码(3个信息位,3个校验位)。给出校验方程:
<source> </source>
上面的加法为模二加。
把上述的公式用矩阵来表示:
<source> </source>
根据线性分组码的定义: ,很容易用生成矩阵G来表示编码后的码字:
<source> </source>
所以生成矩阵G: ,其中
,
根据校验矩阵H的定义:
<source> </source>
其实到这里大家应该对生成矩阵G和校验矩阵H有大概的理解了,更加详细的说明大家可以参考通原的书籍。
二、(7,4)汉明码
在正式讲解LDPC之前讲解这部分的主要目的是给大家传递一种编译码的思想。
硬译码
给出系统的框图:

r:接收到的信息。
Hard Decision:硬判决,转换为0 1 bit。
dmin:码距(两个码字不同位的个数,如101和010的码距为3)——和已知编码后的码字的最小距离,根据码距的大小进行译码,如(7,4)汉明码,下面是信息位置和编码后的码字表:

假设
我们在表中没有找到相同的,这时我们求码距发现译码的结果应该是:
。
软译码
考虑下上面的译码方法,如果我们采用BPSK调制,接收的r>0,判决为0;r<0,判决为1。这样做是不是过于草率了?如果接收到的r=0.001,其实我判决成0和1都问题不大吧!这个时候软译码来了,我们换一种方法来更加精准的译码,如下译码模型:
c:代表上图中的Codeword。
1-2c:BPSK调制后的Codeword。
整个公式其实也算是在求距离吧!这里就不做举例了,直接给出(7,4)汉明码的仿真。
EbNodB = 4; R = 4/7; %(7,4) Hamming (4/7 bits/symbol) EbNo = 10^(EbNodB/10); sigma = sqrt(1/(2*R*EbNo)); k = 4; %number of message bits n = 7; %number of codeword bits cwords = [0 0 0 0 0 0 0; 0 0 0 1 0 1 1; 0 0 1 0 1 1 0; 0 0 1 1 1 0 1; 0 1 0 0 1 1 1; 0 1 0 1 1 0 0; 0 1 1 0 0 0 1; 0 1 1 1 0 1 0; 1 0 0 0 1 0 1; 1 0 0 1 1 1 0; 1 0 1 0 0 1 1; 1 0 1 1 0 0 0; 1 1 0 0 0 1 0; 1 1 0 1 0 0 1; 1 1 1 0 1 0 0; 1 1 1 1 1 1 1]; Nbiterrs = 0; Nblkerrs = 0; Nblocks = 10000; for i = 1: Nblocks msg = randi([0 1],1,k); %generate random k-bit message %Encoding cword = [msg mod(msg(1)+msg(2)+msg(3) ,2) ... mod(msg(2)+msg(3)+msg(4) ,2) ... mod(msg(1)+msg(2)+msg(4) ,2)]; %(7,4) Hamming s = 1 - 2 * cword; %BPSK bit to symbol conversion r = s + sigma * randn(1,n); %AWGN channel I %Hard-decision decoding b = (r < 0); %threshold at zero dist = mod(repmat(b,16,1)+cwords,2)*ones(7,1); [mind1,pos] = min(dist); msg_cap1 = cwords(pos,1:4); %Soft-decision decoding corr = (1-2*cwords)*r'; [mind2,pos] = max(corr); msg_cap2 = cwords(pos,1:4); Nerrs = sum(msg ~= msg_cap2); if Nerrs > 0 Nbiterrs = Nbiterrs + Nerrs; Nblkerrs = Nblkerrs + 1; end end BER_sim = Nbiterrs/k/Nblocks; FER_sim = Nblkerrs/Nblocks; disp([EbNodB FER_sim BER_sim Nblkerrs Nbiterrs Nblocks])
软译码的思想对于理解LDPC概率译码会有很大的帮助,后面的文章,将正式讲解NR LDPC!!