主要内容

NR相位噪声建模和补偿

这个例子演示了相位噪声的影响5 g OFDM系统,展示了如何使用阶段跟踪参考信号(PT-RS)补偿公共相位误差(CPE)。措施的例子误差向量幅度(维生素)和比特误码率(BER)有无CPE补偿。

介绍

5 g NR, 3 gpp引入了一个新的参考信号,名叫阶段跟踪参考信号(PT-RS),处理振荡器噪声。噪音产生的振荡导致相位调制信号的信息,导致重大的变化信号的频谱和时间属性信息。这一现象与振荡器相位噪声。在当地振荡器相位噪声产生了一个重要的降解在毫米波频率(mmWave),根据相位噪声的功率谱密度。相位噪声导致CPE和载波间干扰(ICI)。CPE导致一个完全相同的每个副载波接收符号的旋转。ICI导致副载波间的正交性的丧失。由于PT-RS在频域的分布结构,这个例子主要使用PT-RS估计和最小化CPE对系统性能的影响。示例应用相位噪声的波形由物理下行共享信道(PDSCH),没有显示了挣值管理的变化都和误码率和CPE补偿。这图显示了处理链中实现这个例子。

相位噪声建模

振荡器的相位噪声功率谱密度模型。这个例子使用一个多极零模型来近似振荡器的功率谱密度。使用PNModel场的simParameters结构选择相位噪声模型:“A”、“B”,或“C”。参数设置“A”和“B”是获得实际操作30兆赫和60 GHz振荡器,分别如TDoc r1 - 163984所示。参数设置“C”从实际获得振荡器操作在29.55 GHz, TR 38.803节所述6.1.10。

的例子使用航母副载波间隔60 kHz 50 MHz的传输带宽。

%配置载波载体= nrCarrierConfig;母舰。SubcarrierSpacing = 60;母舰。CyclicPrefix =“正常”;母舰。NSizeGrid = 66;%设置工作频率和相位噪声模型选择simParameters = [];simParameters。Fc = 30 e9;%在赫兹的频率simParameters。PNModel =“一个”;% ' A ' (TDoc r1 - 163984组),B组(TDoc r1 - 163984 B),“C”(TR 38.803)%的采样率ofdmInfo = nrOFDMInfo(载体);sr = ofdmInfo.SampleRate;%相位噪声水平foffsetLog = (4:0.2: log10 (sr / 2));% e4模型偏移量从1 Hz sr / 2赫兹foffset = 10。^ foffsetLog;%线性频率偏移pn_PSD = hPhaseNoisePoleZeroModel (foffset simParameters.Fc simParameters.PNModel);% dBc /赫兹%设置相位噪声水平pnoise = comm.PhaseNoise (“FrequencyOffset”foffset,“水平”pn_PSD,“SampleRate”、sr);pnoise。RandomStream =“与种子mt19937ar”;%可视化光谱相位噪声的面具图semilogx (foffset pn_PSD)包含(频率偏移(Hz)”)ylabel (“dBc /赫兹”)标题(的相位噪声级响应网格)

图包含一个坐标轴对象。坐标轴对象与标题相位噪声级响应包含一个对象类型的线。

配置PDSCH

示例配置PDSCH占领完整的载波调制方案设为64 qam和层数设置为1。默认为一层的例子和一个码字随机未编码的比特。

%设置PDSCH参数pdsch = nrPDSCHConfig;pdsch。PRBSet = 0: carrier.NSizeGrid-1;pdsch。SymbolAllocation = [0 14];pdsch。调制=64 qam;pdsch。NumLayers = 1;pdsch。MappingType =“一个”;pdsch。NID = 1;pdsch。RNTI = 2;%设置DM-RS参数pdsch.DMRS。DMRSConfigurationType = 1;pdsch.DMRS。DMRSTypeAPosition = 2;pdsch.DMRS。DMRSAdditionalPosition = 0;pdsch.DMRS。DMRSLength = 1;pdsch.DMRS。DMRSPortSet = []; pdsch.DMRS.NumCDMGroupsWithoutData = 1; pdsch.DMRS.NIDNSCID = 1; pdsch.DMRS.NSCID = 0;%设置PT-RS参数pdsch。EnablePTRS = 1;pdsch.PTRS。TimeDensity = 1;pdsch.PTRS。FrequencyDensity = 2;pdsch.PTRS。REOffset =“00”;pdsch.PTRS。PTRSPortSet = [];

生成波形

波形为2帧生成和字段NumFramessimParameters结构控制波形的帧的数量。步骤是:

  • 生成随机码字PDSCH的一些能力

  • 得到随机码字的PDSCH符号并将它们映射到网格

  • 生成和DM-RS符号映射到网格

  • 生成和PT-RS符号映射到网格

  • 执行所有帧的完整网格OFDM调制

%的帧数生成波形simParameters。NumFrames = 2;%得到波形的槽数和符号的数量在一个插槽numSlots = carrier.SlotsPerFrame * simParameters.NumFrames;nSlotSymb = carrier.SymbolsPerSlot;%初始化网格的指定数量的帧数txGrid = 0 (nSlotSymb * numSlots carrier.NSizeGrid * 12日,pdsch.NumLayers);%处理循环txbits = [];rng (“默认”)slotIdx = 0: numSlots - 1%插槽数量设置母舰。NSlot = slotIdx;%获得PDSCH指数和结构信息[pdschInd, pdschIndicesInfo] = nrPDSCHIndices(载体,pdsch);%生成随机码字(s)numCW = pdsch.NumCodewords;%的密语data =细胞(1、numCW);{我}=我= 1:numCW数据兰迪([0,1],pdschIndicesInfo.G(我),1);txbits = [txbits;数据我{});% #好< AGROW >结束%得到调制符号pdschSym = nrPDSCH(载体、pdsch、数据);%得到DM-RS符号和指数dmrsSym = nrPDSCHDMRS(载体、pdsch);dmrsInd = nrPDSCHDMRSIndices(载体、pdsch);%得到PT-RS符号和指数ptrsSym = nrPDSCHPTRS(载体、pdsch);ptrsInd = nrPDSCHPTRSIndices(载体、pdsch);%资源元素映射到网格slotGrid = nrResourceGrid(载体、pdsch.NumLayers);slotGrid (pdschInd) = pdschSym;slotGrid (dmrsInd) = dmrsSym;slotGrid (ptrsInd) = ptrsSym;%为所有帧映射生成txGrid slotGrid各自%的位置txGrid (:, slotIdx * nSlotSymb + 1: (slotIdx + 1) * (nSlotSymb):) = slotGrid;结束%完成OFDM调制母舰。NSlot = 0;%重置OFDM调制的槽数为0txWaveform = nrOFDMModulate(载体、txGrid);

运用相位噪声

应用传播波形相位噪声。清楚地观察相位噪声的影响,这个例子不适用任何热噪声和信道模型除了相位噪声。示例相同的相位噪声适用于所有的层。

rxWaveform = pnoise (txWaveform);

接收机

返回扳平比分PDSCH符号和解码比特,接收者执行这些步骤:

  • 时间同步

  • OFDM解调

  • 信道估计

  • 均衡

  • CPE估计和校正

  • PDSCH解码

CPE的估计和校正步骤中,接收方使用逻辑字段CompensateCPEsimParameters结构。因为不使用传播通道的例子中,这些步骤的时间同步,信道估计和均衡不是必需的。然而,这些措施帮助调查如果引入一个通道相位噪声影响。

的例子显示了平衡的星座符号、维生素和比特误码率,并且没有CPE补偿。

案例1:没有CPE补偿

禁用CPE补偿、设置字段CompensateCPEsimParameters结构为0。

simParameters。CompensateCPE= 0; [eqSymbols,rxbits] = practicalReceiver(carrier,pdsch,simParameters,rxWaveform); refSymbols = getConstellationPoints(pdsch);%显示星座图图绘制(eqSymbols,“。”)举行情节(refSymbols“+”)标题(“平衡的符号星座没有CPE补偿”网格)包含(“同步”)ylabel (“交”)

图包含一个坐标轴对象。坐标轴对象与标题使相等符号星座没有CPE补偿包含2线类型的对象。

%显示RMS维生素维生素与= comm.EVM (“ReferenceSignalSource”,“估计从参考星座”,“ReferenceConstellation”,refSymbols);流(“RMS维生素与平衡的符号没有CPE补偿(百分比):% f % % \ n '维生素(eqSymbols))
RMS维生素与平衡的符号没有CPE补偿(百分比):7.431048%
%显示比特误码率errorRate = nnz (rxbits-txbits) /元素个数(txbits);流(的误比特率没有CPE补偿:% f \ n 'errorRate)
比特误码率没有CPE金额:0.005525

案例2:与CPE的补偿

使CPE补偿、设置字段CompensateCPEsimParameters结构为0。使用PT-RS估计CPE的OFDM符号的位置在一个插槽。正确的CPE OFDM符号位置PT-RS OFDM符号的范围内。

simParameters。CompensateCPE= 1; [eqSymbolsCPE,rxbitsCPE] = practicalReceiver(carrier,pdsch,simParameters,rxWaveform);%显示星座图图绘制(eqSymbolsCPE,“。”)举行情节(refSymbols“+”)标题(“平衡的符号星座与CPE补偿”网格)包含(“同步”)ylabel (“交”)

图包含一个坐标轴对象。坐标轴对象与平衡的标题符号星座与CPE补偿包含2线类型的对象。

%显示RMS维生素流(“RMS维生素与平衡的符号与CPE补偿(百分比):% f % % \ n '维生素(eqSymbolsCPE))
RMS维生素平衡的符号与CPE补偿(百分比):4.557690%
%显示比特误码率errorRateCPE = nnz (rxbitsCPE-txbits) /元素个数(txbits);流(与CPE的比特误码率补偿:% f \ n 'errorRateCPE)
比特误码率与CPE金额:0.000052

进一步的探索

  • 可视化相位噪声的影响,改变载波频率,副载波间距、数量的资源块,调制方案,帧的数量。

  • 看到星座相位噪声的影响,改变相位噪声模型。

  • 分析CPE补偿不同配置的影响,改变PT-RS的时间和频率密度。

  • 可视化相位噪声的影响,包括热噪声和信道模型。

总结

这个例子演示了相位噪声的影响,显示了如何正确估计和CPE PT-RS。示例还显示,CPE补偿减少了维生素,提高误比特率。显示的星座图显示了巨大的ICI mmWave频率,表明ICI补偿需要除了CPE进行补偿。

本地函数

函数[eqSymbols, rxbits] = practicalReceiver(载体、pdsch params rxWaveform)%的回报平衡的调制符号后执行时机%估计,OFDM解调、信道估计MMSE均衡,% CPE估计和校正,PDSCH解码。%获取当前槽数,槽数、符号每槽%,总数的符号nSlot = carrier.NSlot;numSlots = carrier.SlotsPerFrame * params.NumFrames;nSlotSymb = carrier.SymbolsPerSlot;numTotalSymbols = numSlots * nSlotSymb;%得到参考栅DM-RS符号dmrsSymCell =细胞(1、numSlots);dmrsIndCell =细胞(1、numSlots);numTotalSymbols refGrid = 0 (carrier.NSizeGrid * 12日,pdsch.NumLayers);NSlot = 0: numSlots-1载体。NSlot = NSlot;slotGrid = nrResourceGrid(载体、pdsch.NumLayers);dmrsSymCell {NSlot + 1} = nrPDSCHDMRS(载体,pdsch);dmrsIndCell {NSlot + 1} = nrPDSCHDMRSIndices(载体,pdsch);slotGrid (dmrsIndCell {NSlot + 1}) = dmrsSymCell {NSlot + 1};refGrid (:, NSlot * nSlotSymb + 1: (NSlot + 1) * (nSlotSymb):) = slotGrid;结束%执行时间估计和校正母舰。NSlot = NSlot;抵消= nrTimingEstimate(载体,rxWaveform refGrid);waveformSync = rxWaveform(1 +抵消:最终,);%完成OFDM解调接收的数据重新创建%网格资源,包括填充时,实用在一个不完整的槽被解调%同步结果rxGrid = nrOFDMDemodulate(载体、waveformSync);[K, L R] =大小(rxGrid);如果(L < numTotalSymbols) rxGrid =猫(2 rxGrid 0 (K, numTotalSymbols-L, R));结束%声明存储变量eqSymbols = [];%平衡的星座图的符号rxbits = [];NSlot = 0: numSlots-1%提取网格当前槽currentGrid = rxGrid (:, NSlot * nSlotSymb + (1: nSlotSymb):);%得到PDSCH资源母舰。NSlot = NSlot;dmrsSymbols = dmrsSymCell {NSlot + 1};dmrsIndices = dmrsIndCell {NSlot + 1};ptrsSymbols = nrPDSCHPTRS(载体、pdsch);ptrsIndices = nrPDSCHPTRSIndices(载体、pdsch);[pdschIndices, pdschIndicesInfo] = nrPDSCHIndices(载体,pdsch);%信道估计[estChannelGrid,噪音]= nrChannelEstimate (currentGrid、dmrsIndices dmrsSymbols,“CDMLengths”,pdsch.DMRS.CDMLengths);%得到PDSCH资源元素从接收到的网格[pdschRx, pdschHest] = nrExtractResources (pdschIndices、currentGrid estChannelGrid);%均衡pdschEq = nrEqualizeMMSE (pdschRx pdschHest、噪音);%公共相位误差(CPE)估计和修正如果params.CompensateCPE%初始化临时网格存储平衡的符号tempGrid = nrResourceGrid(载体、pdsch.NumLayers);%从收到的网格中提取PT-RS符号和估计%通道网格[ptrsRx ptrsHest, ~, ~, ~, ptrsLayerIndices] = nrExtractResources (ptrsIndices, currentGrid, estChannelGrid tempGrid);%平衡PT-RS符号并将它们映射到tempGridptrsEq = nrEqualizeMMSE (ptrsRx ptrsHest、噪音);tempGrid (ptrsLayerIndices) = ptrsEq;%估计剩余PT-RS位置的通道% tempGridcpe = nrChannelEstimate (tempGrid ptrsIndices ptrsSymbols);%和估计在副载波,接收天线,和%层。然后,拿CPE的角度%的总和cpe =角(总和(cpe, [1 3 4]));%均衡PDSCH符号映射到tempGridtempGrid (pdschIndices) = pdschEq;%对CPE在每个OFDM符号的范围内参考% PT-RS OFDM符号如果元素个数(pdschIndicesInfo.PTRSSymbolSet) > 0 symLoc = pdschIndicesInfo.PTRSSymbolSet (1) + 1: pdschIndicesInfo.PTRSSymbolSet(结束)+ 1;tempGrid (:, symLoc:) = tempGrid (:, symLoc:)。* exp (1 * cpe (symLoc));结束%提取PDSCH符号pdschEq = tempGrid (pdschIndices);结束%保存平衡的符号和输出所有的槽eqSymbols = [eqSymbols;pdschEq];% #好< AGROW >%解码PDSCH符号和硬一些eqbits = nrPDSCHDecode(载体,pdsch pdschEq);i = 1:元素个数(eqbits) rxbits = [rxbits;双(eqbits{我}< 0)];% #好< AGROW >结束结束结束函数信谊= getConstellationPoints (pdsch)% getConstellationPoints星座点%符号= getConstellationPoints (PDSCH)返回星座点%符号基于调制方案中提供PDSCH配置对象。信谊= [];调制=字符串(pdsch.Modulation);%调制方案转换为字符串类型作战飞机= pdsch.NumCodewords;%的密语如果作战飞机= = 2 & &(元素个数(调制)= = 1)调制(结束+ 1)=调制(1);结束%的星座点cwIndex = 1: ncw qm = strcmpi(调制(cwIndex) {“正交相移编码”,16 qam的,64 qam,256 qam})* (2 4 6 8)';信谊=[信谊;nrSymbolModulate (int2bit ((0:2 ^ qm-1)”, qm)调制(cwIndex));% #好< AGROW >结束结束

相关的话题