LTE(长期演进)下行链路 PHY(物理)层处理链路可以认为是下行链路共享信道(DLSCH)和物理下行链路共享信道(PDSCH)处理的组合。DLSCH 即 下行链路传输信道 TrCH。
LTE下行链路物理模型描述,具体可参照之前文章:
LTE物理层概述(3)-- 下行链路物理模型概述https://blog.csdn.net/snowman898/article/details/124684077
本节主要学习 LTE物理信道的调制与解调功能,文末给出仿真代码。
LTE使用的调制方案包括:QPSK, QAM16 和 QAM64。图1所示为三个调制方案的星座图:
图1 LTE 三种调制方案星座图
载荷比特图形 | 调制符号 | |
同相(I) | 正交(Q) | |
00 | ||
01 | ||
10 | ||
11 |
载荷比特 图形 |
调制符号 | 载荷比特 图形 |
调制符号 | |||
同相(I) | 正交(Q) | 同相(I) | 正交(Q) | |||
0000 | 1000 | |||||
0001 | 1001 | |||||
0010 | 1010 | |||||
0011 | 1011 | |||||
0100 | 1100 | |||||
0101 | 1101 | |||||
0110 | 1110 | |||||
0111 | 1111 |
在实际实现中,尤其是matlab,我们可以调用以下代码:
QAM16 = comm.RectangularQAMModulator(16);
out = constellation(QAM16);
function y = lte_Modulator(u, Mode)
% Initialization
% Mode 1 -- QPSK 2--
%%
% 为避免每次调用函数时创建和释放系统对象的开销,函数内的系统对象为持久变量声明类型
% 持久变量声明类型可以支持只在函数第一次调用时创建系统对象,从而提高循环调用函数时的仿真速度
%%
persistent QPSK QAM16 QAM64
if isempty(QPSK)
QPSK = comm.PSKModulator(4, 'BitInput', true, 'PhaseOffset', pi/4,...
'SymbolMapping', 'Custom', 'CustomSymbolMapping', [0 2 3 1]);
QAM16 = comm.RectangularQAMModulator(16, 'BitInput', true, 'NormalizationMethod', 'Average power',...
'SymbolMapping', 'Custom', 'CustomSymbolMapping', [11 10 14 15 9 8 12 13 1 0 4 5 3 2 6 7]);
QAM64 = comm.RectangularQAMModulator(64, 'BitInput', true, 'NormalizationMethod', 'Average power',...
'SymbolMapping', 'Custom', 'CustomSymbolMapping',...
[47 46 42 43 59 58 62 63 45 44 40 41 57 56 60 61 37 36 32 33 49 ...
48 52 53 39 38 34 35 51 50 54 55 7 6 2 3 19 18 22 23 5 4 0 1 ...
17 16 20 21 13 12 8 9 25 24 28 29 15 14 10 11 27 26 30 31]);
end
% Processing
switch Mode
case 1
y = step(QPSK, u);
case 2
y = step(QAM16,u);
case 3
y = step(QAM64,u);
end
在QPSK调制情况下,我们可以调用 comm.PSKModulator 系统对象并将其调制阶数设置为4.参数属性描述如下:
1)' BitInput ' 属性:这里设置属性为 ' true' , 表示将调制器输入为 比特值向量。QPSK调制下, 每 2bit 映射到一个调制符号;
2) ' PhaseOffset ' 属性:这里设置为 pi / 4,表示调制符号对应复平面单位圆上4个点,角度依
次为 [ 3/4 pi, pi / 4, -pi / 4, -3 / 4 pi ];
3)' CustomSymbolMapping ' 属性 : 确保LTE中定义的比特图形产生相应的输出符号。
对于QAM16,QAM64调制实现,可参考如上代码利用matlab通信工具箱函数实现。
解调可以使用硬判决或者软判决解码 —— 使用硬判决解码时,解调器输入符号映射为估计输出比特;软判决解码时,输出为对数估计似然比(LLR)向量。
硬判决解调代码如下所示:
function y = lte_DemodulatorHard(u, Mode)
% Initialization
% Mode 1 -- QPSK 2--
persistent QPSK QAM16 QAM64
if isempty(QPSK)
QPSK = comm.PSKDemodulator('ModulationOrder',4, 'BitOutput', true, ...
'PhaseOffset',pi/4,'SymbolMapping', 'Custom', 'CustomSymbolMapping', ...
[0 2 3 1]);
QAM16 = comm.RectangularQAMDemodulator('ModulationOrder',16, 'BitOutput', true, ...
'NormalizationMethod', 'Average power','SymbolMapping', 'Custom', ...
'CustomSymbolMapping', [11 10 14 15 9 8 12 13 1 0 4 5 3 2 6 7]);
QAM64 = comm.RectangularQAMDemodulator('ModulationOrder',64, 'BitOutput', true, ...
'NormalizationMethod', 'Average power','SymbolMapping', 'Custom', ...
'CustomSymbolMapping', [47 46 42 43 59 58 62 63 45 44 40 41 ...
57 56 60 61 37 36 32 33 49 48 52 53 39 38 34 35 51 50 54 55 7 6 2 3 19 18 ...
22 23 5 4 0 1 17 16 20 21 13 12 8 9 25 24 28 29 15 14 10 11 27 26 30 31]);
end
软判决解调代码如下所示
function y = lte_DemodulatorSoft(u, Mode, NoiseVar)
% Initialization
% Mode 1 -- QPSK 2--
persistent QPSK QAM16 QAM64
if isempty(QPSK)
QPSK = comm.PSKDemodulator('ModulationOrder',4, 'BitOutput', true, ...
'PhaseOffset',pi/4, 'SymbolMapping', 'Custom', ...
'CustomSymbolMapping', [0 2 3 1], 'DecisionMethod', ...
'Approximate log-likelihood ratio', 'VarianceSource', 'Input port');
QAM16 = comm.RectangularQAMDemodulator('ModulationOrder',16, 'BitOutput', true, ...
'NormalizationMethod', 'Average power', 'SymbolMapping', 'Custom', ...
'CustomSymbolMapping', [11 10 14 15 9 8 12 13 1 0 4 5 3 2 6 7], ...
'DecisionMethod', 'Approximate log-likelihood ratio', ...
'VarianceSource', 'Input port');
QAM64 = comm.RectangularQAMDemodulator('ModulationOrder',64, 'BitOutput', true, ...
'NormalizationMethod', 'Average power', 'SymbolMapping', ...
'Custom','CustomSymbolMapping', [47 46 42 43 59 58 62 63 45 44 40 41 ...
57 56 60 61 37 36 32 33 49 48 52 53 39 38 34 35 51 50 54 55 7 6 2 3 19 ...
22 23 5 4 0 1 17 16 20 21 13 12 8 9 25 24 28 29 15 14 10 11 27 26 30 31],
'DecisionMethod', 'Approximate log-likelihood ratio', ...
'VarianceSource', 'Input port');
end
QAM16和 QAM64 的带宽利用率 分别是 QPSK 的 2倍和3倍。不过,高阶调制方案会更易受到信道噪声的影响。比较QPSK、QAM16和QAM64调制方案,在给定误码率概率下,接收端需要更高的Eb/No。
以下代码为一个简单的LTE 调制解调系统,用以衡量各种调制方案的BER和SNR之间的关系。该系统包括调制器、解调器、AWGN信道、计算BER和Eb/No的函数。主要代码展示如下所示:
clear
clc
close all
EbNo = 25;
maxNumErrs = 1000;
maxNumBits = 20e6;
FRM = 9600;
% Modulation Mode
ModulationMode =3; % 1--QPSK 2--QAM16 3-- QAM64
k = 2* ModulationMode;
snr = EbNo + 10*log10(k);
% Processing loop: transmitter, channel model and receiver
numErrs = 0;
numBits = 0;
AWGN = comm.AWGNChannel;
AWGN.EbNo = snr;
while((numErrs < maxNumErrs) && (numBits < maxNumBits))
% Transmitter
u = randi([0,1], FRM, 1);
x = lte_Modulator( u, ModulationMode);
% channel
c0 = AWGN.step(x);
c1 = scatterplot(c0);
title('QAM64调制散点图');
grid on
% Receiver
r0 = lte_DemodulatorHard(c0, ModulationMode);
y = r0(1:FRM);
% Measurements
numErrs = numErrs + sum(y ~= u);
numBits = numBits + FRM;
end
%
ber = numErrs / numBits
由于该仿真以函数形式呈现,实际执行时要调用MATLAB工具箱 bertool
配置好后,分别将 “ chapter1_ex01.m”代码中 :
% Modulation Mode
ModulationMode =3; % 1--QPSK 2--QAM16 3-- QAM64
ModulationMode值设置为1,2,3,从而得到 各种调制方式下 EbNo 与 ber的关系图:
本系统完整代码资源可下载:
LTE QPSK、QAM16 以及 QAM64调制下 EbNo 与 误码率BER之间的仿真关系图https://download.csdn.net/download/snowman898/85372067
说明:本章所述原理,只为让大家有系统的认识,可以完整了解 LTE 调制信号链路。以下再补充2点:
1)关于QAM16/64具体的数学公式推导,大家可以自行搜索,个人推荐以下帖子:
QAM信号的调制解调原理https://blog.csdn.net/gemengxia/article/details/116150246?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165249485116782391887600%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165249485116782391887600&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-116150246-null-null.142^v9^control,157^v4^control&utm_term=qam%E8%B0%83%E5%88%B6&spm=1018.2226.3001.4187
2)QAM16以及QAM64关键技术实现及其难点,后续会另开帖子说明。