5G NR LDPC基础讲解信号通过高斯白噪声信道的传输流程

写在前面:

从本小节开始,正式讲解LDPC在5G NR中的应用,最近的半年学习5G NR LDPC相关规范,感触最深刻的是学习起来很不系统,而且学习起来比较困难,想学习的很系统需要整理相当多的资料,很耗精力,基于此,打算把5G NR LDPC系统的讲解一遍,但在讲解LDPC之前,会介绍很多基础知识,为后面的讲解做铺垫,希望对大家有帮助。


本文主要讲解信号在高斯信道传输流程,以及相关的概念。

1. 信号在高斯信道的传输

(1)连续时间信号,如下图所示:

信息a:输入调制器的二进制码流。

信息a1:接收端接收的信息(经过判决后输出的二进制码流)

s(t):调制后输入信道的波形。

n(t):高斯白噪声。

r(t)=s(t)+n(t):经过高斯信道后的信号。

r:经过滤波器的信号。

(2)离散时间信号,如下图所示:

s:经过数字调制器的调制符号。

r=n+s:

Demapper(解映射器):解调出调制的信号。

其它的连续信号类似。

2. 调制机制

5G NR主要采用BPSK、QPSK、64QAM、256、1024QAM调制方式,为了讲解方便,调制方式采用BPSK,下面讲解BPSK调制的原理(QAM调制后面补充):

a:输入待编码的bit。

BPSK mapper:符号的映射:0——+1 1——-1

Decision Device:接收到的信号和+1近还是和-1近,进行判决。

BPSK Demapper:+1——0 -1——1

a 0 0 1 0 1 1 0
s +1 +1 -1 +1 -1 -1 +1
r 0.8 0.2 -0.8 1.9 -0.6 0.2 1.3
s1 +1 +1 -1 +1 -1 +1 +1
a1 0 0 1 0 1 0 0
注:倒数第二列error。

3. BER(Bit - Error Rate,误码率) and SNR(Signal - to - Noise Ratio,信噪比)

误码率:我们传输1000个bit,有1个错误,误码率为1/1000。

信噪比=信号的能量/噪声的能量

用dB表示信噪比的方法:

4. SNR在连续和离散系统中的计算

假设连续时间高斯信道:

signal power=P;Noise PSD(噪声功率谱密度)= (单边普的密度为 ,双边谱密度为 );Bandwidth=2W

可以推出:

Noise power=Noise PSD×Bandwidth=

SNR=

每个符号持续的时间:1/2W


假设离散时间高斯信道:

每个符号的能量:

噪声方差:

SNR:

5. 计算BPSK的BER和SNR

信道的高斯噪声:

所以:

我们知道信道的噪声服从高斯分布,下图:

现在我们需要了解在什么情况下,我们译码得不到正确的结果:因为BPSK的映射方式为0——+1 1——-1,所以,当我们附加的信道噪声在(-1,+1),都可以译码出正确的结果,误码率的计算公式可以表示为:

在一串二进制码流中,+1和-1的数值随机出现,所以 :

假设Q函数:

对照 分布函数:

得出BER:

(因为



上面讲解了计算BPSK调制的BER和SNR的计算方法,但是可以看到,我们译码如果出现错误是无法纠错的,所以需要一种纠错码(堪称ECC——Error-Correction Coding,通过加冗余的方式来进行纠错,降低误码率),因此我们需要采用一种纠错码先编码,再调制,来达到纠错的目的。

下面会进行两组matlab仿真(不进行编码直接调制和采用(3,1)重复码进行编码后调制)。

1. 相关参数说明

编码后每个bit信息的能量(能量一定需要增加,因为编码之后的信息增加了冗余,相当于多个bit只代表一个bit的信息):

(码率=待编码的bit数/编码后的bit数)

所以可以推出

由4可以得出:

所以可以推出:

所以对于BPSK调制来讲,

所以可以得出新的BER的计算公式:

下图展示未经过编码的BPSK调制,纵坐标是BER(在对数域),横坐标是 (在对数域且为dB形式—— ,用来衡量信噪比的,因为 ),函数为

注:我们在设计信道传输过程时,一般会给出在dB下的 ,所以要做一定的转换, (上面有说明互相转换的公式),求右边的 ,可以得出


在这里、直接给出结论,相同的BER,采用编码方式传输信号只需要提供较少的能量。

2.未编码仿真

EbNodB = 5;
R = 1; %uncoded1BPSK (1 bit/symbol) 
EbNo = 10^(EbNodB/10) ;
sigma = sqrt(1/ (2*R*EbNo)) ; 
BER_th = 0.5*erfc(sqrt (EbNo)) ;

N = 1000; %number of bits of message per block 
Nerrs = 0; Nblocks = 10000;
for i = 1: Nblocks
	msg = randi([0 1],1,N); %generate random message 	
    
    s = 1 - 2 * msg; %BPSK bit to symbol conversion 	
    r = s + sigma * randn(1,N); %AWGN channel
	
    msg_cap = (r < 0); %threshold at zero 
    
	Nerrs = Nerrs + sum(msg ~= msg_cap);      
end

BER_sim = Nerrs/N/Nblocks; 

disp([EbNodB BER_th BER_sim Nerrs N*Nblocks])


3. (3,1)重复码介绍

编码规则:

if m=0, c=000, s=[+1, +1, +1]

if m=1, c=111, s=[-1, -1, -1]

Hard Decision:

if ri>0, bi=0

if ri<0, bi=1

b c1
000 000
001 000
010 000
100 000
011 111
101 111
110 111
111 111

(3,1)重复码的相关参数:

  • 码率:1/3

  • bi可能出现错误的概率:
  • 输出c1的误码率:
  • 译码方法:



    • c1=000 else c1=111

4. (3,1)重复码仿真

EbNodB = 6;
R = 1/3; %n=3 repetition (1/3 bits/symbol)
EbNo = 10^(EbNodB/10);
sigma = sqrt(1/(2*R*EbNo)); 

k = 1; %number of message bits 
n = 3; %number of codeword bits

Nerrs = 0; Nblocks = 100000;
for i = 1: Nblocks
   	msg = randi([0 1],1,k); %generate random k-bit message 
	%Encoding
    cword = [msg msg msg]; 
    
	s = 1 - 2 * cword; %BPSK bit to symbol conversion 
    r = s + sigma * randn(1,n); %AWGN channel

    %Hard-decision decoding
	b = (r < 0); %threshold at zero 
    if sum(b) > 1
        msg_cap1 = 1; 
    else
        msg_cap1 = 0; 
    end

	%Soft-decision decoding
    if sum(r) < 0
    	msg_cap2 = 1; 
    else
    	msg_cap2 = 0; 
    end

    Nerrs = Nerrs + sum(msg ~= msg_cap2);
end

BER_sim = Nerrs/k/Nblocks; 
disp( [EbNodB BER_sim Nerrs k*Nblocks] )

以上阐述的内容有问题可以评论或私信我,欢迎交流~本文原发于https://zhuanlan.zhihu.com/p/406626670

全部评论
现在科技发展太块了,前段时间看到6G的新闻了,哎
点赞 回复 分享
发布于 2022-06-26 10:16

相关推荐

半解316:内容充实,细节需要修改一下。 1,整体压缩为一页。所有内容顶格。 2,项目描述删除,直接写个人工作量 修改完之后还需要建议,可以私聊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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