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 |
3. BER(Bit - Error Rate,误码率) and SNR(Signal - to - Noise Ratio,信噪比)
误码率:我们传输1000个bit,有1个错误,误码率为1/1000。
信噪比=信号的能量/噪声的能量
4. SNR在连续和离散系统中的计算
假设连续时间高斯信道:
signal power=P;Noise PSD(噪声功率谱密度)= (单边普的密度为
,双边谱密度为
);Bandwidth=2W
可以推出:
Noise power=Noise PSD×Bandwidth=
SNR=
每个符号持续的时间:1/2W
假设离散时间高斯信道:
每个符号的能量:
噪声方差:
5. 计算BPSK的BER和SNR
信道的高斯噪声:
所以:
我们知道信道的噪声服从高斯分布,下图:

现在我们需要了解在什么情况下,我们译码得不到正确的结果:因为BPSK的映射方式为0——+1 1——-1,所以,当我们附加的信道噪声在(-1,+1),都可以译码出正确的结果,误码率的计算公式可以表示为:
在一串二进制码流中,+1和-1的数值随机出现,所以 :
假设Q函数:
对照 分布函数:
得出BER:
(因为
)
上面讲解了计算BPSK调制的BER和SNR的计算方法,但是可以看到,我们译码如果出现错误是无法纠错的,所以需要一种纠错码(堪称ECC——Error-Correction Coding,通过加冗余的方式来进行纠错,降低误码率),因此我们需要采用一种纠错码先编码,再调制,来达到纠错的目的。
1. 相关参数说明
编码后每个bit信息的能量(能量一定需要增加,因为编码之后的信息增加了冗余,相当于多个bit只代表一个bit的信息):
(码率=待编码的bit数/编码后的bit数)
所以可以推出
由4可以得出:
所以可以推出:
所以对于BPSK调制来讲,
所以可以得出新的BER的计算公式:
下图展示未经过编码的BPSK调制,纵坐标是BER(在对数域),横坐标是 (在对数域且为dB形式——
,用来衡量信噪比的,因为
),函数为

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