当前位置:首页 > 通信技术 > 通信技术
[导读]在5G NR基站与终端的研发中,物理下行共享信道(PDSCH)是实现高速数据传输的核心。其采用的低密度奇偶校验码(LDPC)相比4G的Turbo码,具有更低的错误平层(Error Floor)和更高的并行译码效率。本文将利用MATLAB 5G Toolbox,实战演示PDSCH从信息比特到调制符号的完整仿真流程。



在5G NR基站与终端的研发中,物理下行共享信道(PDSCH)是实现高速数据传输的核心。其采用的低密度奇偶校验码(LDPC)相比4G的Turbo码,具有更低的错误平层(Error Floor)和更高的并行译码效率。本文将利用MATLAB 5G Toolbox,实战演示PDSCH从信息比特到调制符号的完整仿真流程。


一、PDSCH处理链概览


PDSCH的典型处理流程为:传输块(TB)→ CRC附着 → LDPC编码 → 速率匹配 → 加扰 → 调制映射。MATLAB工具箱将这些步骤封装为高度优化的函数,非常适合算法验证。


二、LDPC编码与速率匹配


5G NR的LDPC码采用了准循环(QC)结构,支持非常灵活的码长和码率。


2.1 参数配置与编码


首先定义5G NR的关键参数,并生成随机传输块。

% --- 5G NR PDSCH参数配置 ---

carrier = nrCarrierConfig;

carrier.NSizeGrid = 52;       % 带宽:52个RB (106个SC)

carrier.SubcarrierSpacing = 30; % 子载波间隔:30kHz


pdsch = nrPDSCHConfig;

pdsch.Modulation = '256QAM';  % 调制方式

pdsch.NumLayers = 2;          % 层数

pdsch.NID = 42;               % 小区ID

pdsch.RNTI = 1;              % UE RNTI


% --- 生成传输块 (TB) ---

tbLen = 10000;                % 传输块长度 (比特)

transportBlock = randi([0 1], tbLen, 1);


% --- CRC附着 ---

tbWithCRC = nrCRCEncode(transportBlock, pdsch.RNTI);


% --- LDPC编码 ---

% 获取目标码率 (例如 0.526)

targetCodeRate = 0.526;

% 计算编码后的比特数 (考虑调制阶数和层数)

modOrder = 8; % 256QAM -> log2(256)=8 bits/symbol

codedBitsLength = nrPDSCHCodewordLength(carrier, pdsch, modOrder);


% 执行LDPC编码

codedBits = nrLDPCEncode(tbWithCRC, codedBitsLength, targetCodeRate);



2.2 速率匹配与加扰


编码后的比特需要通过速率匹配适配物理资源,并进行加扰以对抗突发干扰。

% --- 速率匹配 (Rate Matching) ---

% 将编码比特映射到实际分配的RE上

rateMatchedBits = nrRateMatchLDPC(codedBits, carrier, pdsch);


% --- 加扰 (Scrambling) ---

ncellid = pdsch.NID; % 小区ID作为加扰种子

scrambledBits = nrScramble(rateMatchedBits, ncellid, pdsch.RNTI, 'PDSCH');



三、调制映射与OFDM符号生成


3.1 调制映射


将二进制比特流映射为复数调制符号。

% --- 调制映射 (Modulation Mapping) ---

symbols = nrSymbolModulate(scrambledBits, pdsch.Modulation);


% --- 层映射 (Layer Mapping) ---

% 将符号分配到多个传输层

layeredSymbols = nrLayerMap(symbols, pdsch.NumLayers);


% --- 预编码 (Precoding) ---

% 简单的空间复用(非波束赋形)

precodedSymbols = nrPrecode(layeredSymbols, pdsch.PRBSet, pdsch.NumLayers);



3.2 OFDM调制


将符号放置到资源网格并生成时域波形。

% --- 资源网格填充 ---

grid = nrResourceGrid(carrier);

[~, ~, dmrsIndices, dmrsSymbols] = nrPDSCHIndices(carrier, pdsch);

grid(dmrsIndices) = dmrsSymbols; % 插入DM-RS

dataIndices = nrPDSCHIndices(carrier, pdsch, 'Data'); % 获取数据RE索引

grid(dataIndices) = precodedSymbols; % 填充数据符号


% --- OFDM调制 ---

[waveform, info] = nrOFDMModulate(carrier, grid);


% --- 添加AWGN信道 ---

rxWaveform = awgn(waveform, 20, 'measured'); % SNR = 20dB



四、接收端处理与BLER曲线绘制


为了评估性能,我们需要构建接收端并进行蒙特卡洛仿真,绘制BLER(Block Error Rate)曲线。

% --- 接收端同步与解调 ---

[rxGrid, ~] = nrOFDMDemodulate(carrier, rxWaveform);

rxDataIndices = nrPDSCHIndices(carrier, pdsch, 'Data');

rxSymbols = rxGrid(rxDataIndices);


% --- 均衡 (简化版,假设理想信道) ---

% 在实际中需要利用DM-RS进行信道估计和均衡

equalizedSymbols = rxSymbols;


% --- 解调与解扰 ---

demodulatedBits = nrSymbolDemodulate(equalizedSymbols, pdsch.Modulation);

descrambledBits = nrDescramble(demodulatedBits, ncellid, pdsch.RNTI, 'PDSCH');


% --- LDPC解码 ---

% 使用BP (Belief Propagation) 算法

decodedBits = nrLDPCDecode(descrambledBits, codedBitsLength, targetCodeRate);


% --- CRC校验 ---

ber = sum(transportBlock ~= decodedBits(1:tbLen)) / tbLen;

bler = ~isequal(transportBlock, decodedBits(1:tbLen)); % 块错误


% --- 绘制BLER曲线 (循环不同SNR) ---

snrRange = -5:2:15; % dB

blerResults = zeros(size(snrRange));


for i = 1:length(snrRange)

   % 在此循环中重复发送、加噪、接收和解码过程

   % ... (省略重复代码) ...

   blerResults(i) = currentBler;

end


figure;

semilogy(snrRange, blerResults, 'o-', 'LineWidth', 1.5);

grid on;

xlabel('E_s/N_0 (dB)');

ylabel('BLER');

title('5G NR PDSCH LDPC Performance (256QAM)');

legend('Simulation');



五、结语


通过MATLAB 5G Toolbox,工程师可以快速验证PDSCH的LDPC编码与调制方案。重点在于理解QC-LDPC的结构特性及其在不同码率下的瀑布区(Waterfall Region)表现,以及256QAM等高阶调制对SNR的苛刻要求。这套仿真流程是算法迭代和链路预算估算的基石。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭