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!!

以上阐述的内容有问题可以评论或私信我,欢迎交流~ 本文原发于5G NR LDPC基础讲解(2)——线性分组码的简要介绍和(7,4)汉明码 - 知乎 (zhihu.com)

全部评论
这是通信人呀
点赞 回复 分享
发布于 2022-06-24 11:05

相关推荐

不愿透露姓名的神秘牛友
07-21 13:41
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务