主要内容

基于SRS的NR上行通道状态信息估计

这个例子展示了如何使用探测参考信号(SRS)进行同步、信道估计和上行通道状态信息(CSI)估计。

简介

探测参考信号是用户设备上行通道探测时使用的上行物理信号,包括同步和CSI估计。CSI包括信道质量指标CQI (channel quality indicator)、等级指标RI (rank indicator)和预编矩阵指标PMI (precoder matrix indicator)。本示例演示了如何使用SRS在频率选择性时变噪声信道下选择合适的PMI。基于上行码本的传输使用pmi,见TS 38.211章节6.3.1.5 [1].

这个例子执行了一个模拟,包括:

  • SRS配置和传输

  • 完善实用的同步和信道估计

  • 信噪比估计

  • 采购经理人指数的选择

  • PMI选择绩效评估

仿真长度和信噪比

根据10毫秒帧的数量设置模拟的长度。设置信噪比点为模拟。信噪比定义为每个RE,适用于每个接收天线。

numFrames = 1;% 10毫秒帧信噪比= 20;%信噪比(dB)

UE和SRS配置

设置仿真的关键参数。这些包括:

  • 资源块中的带宽(每个资源块有12个子载波)

  • 副载波间距:15、30、60、120、240 (kHz)

  • 循环前缀长度:正常或扩展

  • 发射天线数、接收天线数:1、2、4。

  • 层数。必须小于或等于发射和接收天线数。

指定的SRS参数包括:

  • SRS天线接口数量:1、2、4

  • 每个槽位为SRS分配的OFDM符号数:1,2,4

  • 在槽内启动SRS传输的OFDM符号。对于普通CP必须是(8…13),对于扩展CP必须是(6…11)。

  • SRS在RBs中指定频率的起始位置

  • 带宽跳频配置csr建筑,BHop.集BHop >= BSRS禁用跳频功能。

  • 传输梳以指定子载波中的SRS频率密度:2,4

  • 槽内重复的SRS符号数。它禁用频率跳变块重复符号。集重复= 1不再重复了。

  • 槽位SRS的周期性和偏移量。

  • 资源类型可以是“周期性”、“半持久性”和“非周期性”。对于每个槽位的非周期性SRS资源类型,将重置跳频模式。

创建终端/运营商配置ue = nrCarrierConfig;问题。NSizeGrid = 52;资源块数量的%带宽(在15kHz SCS下为10MHz BW提供52RBs)问题。SubcarrierSpacing = 15;% 15, 30, 60, 120, 240 (kHz)问题。CyclicPrefix =“正常”%“正常”或“扩展”nTxAnts = 2;%发射天线数(1,2,4)nRxAnts = 2;%接收天线个数nLayers = min(nTxAnts,nRxAnts);%配置定时多端口SRS,使能跳频功能srs = nrSRSConfig;srs。NumSRSSymbols = 4;每个槽分配的OFDM符号的百分比(1,2,4)srs。SymbolStart = 8;开始插槽内的OFDM符号srs。NumSRSPorts = nTxAnts;% SRS天线端口数(1,2,4)。srs。FrequencyStart = 0;% SRS在BWP中RBs的频率位置srs。NRRC = 0;%从FreqStart指定的额外偏移量,以4个prb为块(0…67)srs。csr= 14;带宽配置C_SRS(0…63)。它控制分配给SRS的带宽srs。建筑= 0;%带宽配置B_SRS(0…3)。它控制分配给SRS的带宽srs。BHop= 0;%跳频配置(0…3)。设置“BHop < BSRS”使能跳频功能srs。KTC = 2;%梳数(2,4)。子载波的频率密度srs。重复次数= 2;%重复(1,2,4)。它禁止|重复|符号块的跳频srs。SRSPeriod = [2 0];插槽的周期性和偏移量。SRSPeriod(2)必须小于SRSPeriod(1)srs。ResourceType =“周期”%资源类型('周期性','半持久性','非周期性')。使用'aperiodic'禁用槽间跳频

同步,信道估计和CSI测量配置

这个示例在SRS候选槽中执行同步和信道估计。定时和信道估计仅在包含SRS传输的槽中更新。在跳频SRS设置中,信道估计仅在包含SRS符号的资源块中更新。当没有SRS传输时,来自以前插槽的时间和信道估计将被保留并用于CSI采集。类似地,噪声功率估计仅在SRS候选槽中更新。

逻辑变量practicalSynchronization控制通道同步行为。当设置为真正的,本例根据接收到的SRS值执行实际同步。当设置为,示例执行完美的同步。同步只在传输SRS的槽中执行,以保持完美和实际的信道估计同步。

practicalSynchronization = true;

本例通过将载波带宽划分为若干子带来估计CSI。在RB中指定频率子带的大小

cisubbandsize = 4;每个子带的RBs个数%

传播信道模型配置

创建TDL通道模型对象并指定其传播特征。选择信道延迟扩展和最大多普勒频移,在仿真持续时间和载波带宽范围内创建时变的频率选择性信道。

channel = nrTDLChannel;通道。DelayProfile =“TDL-C”;通道。DelaySpread = 40e-9;通道。MaximumDopplerShift = 30;通道。numtransmitantenna = nTxAnts;通道。numreceiveantenna = nRxAnts;通道。Seed = 5;设置通道采样率ofdmInfo = nrOFDMInfo(ue);通道。SampleRate = ofdmInfo.SampleRate;

通过通道多路径组件获取延迟采样的最大数量。这是根据具有最大延迟的信道路径和信道滤波器的实现延迟计算得出的。这是稍后刷新通道滤波器以获得接收信号所必需的。

chInfo =信息(通道);maxChDelay = ceil(max(chinfo . pathdelayed *channel.SampleRate));maxChDelay = maxChDelay + chInfo.ChannelFilterDelay;重置随机发生器的再现性rng (“默认”);

处理循环

测量每个槽位的CSI。CSI的获取方法如下:

  • 生成资源网格。使用SRS符号和索引创建资源元素(RE)网格。

  • 产生波形。然后对生成的网格进行OFDM调制。

  • 建立噪声信道模型。该波形通过TDL衰落信道传递。完成AWGN的添加。每一层的信噪比是根据每个RE和每个接收天线定义的。

  • 执行同步和OFDM解调。为了实现完美的同步,信道脉冲响应被重构并用于同步接收到的波形。为了实现实际同步,接收到的波形与SRS相关联。然后对同步信号进行OFDM解调。

  • 执行信道估计。为了实现完美的信道估计,首先对信道脉冲响应进行重构,然后对OFDM进行解调,得到信道估计。在实际的信道估计中,使用了发射的SRS。

  • 采购经理人指数的选择。基于srs的信道估计用于在每个CSI估计子带中选择最佳PMI。PMI选择准则使预编码后的平均信干扰加噪声比(SINR)最大化。

  • PMI选择SINR损失。通过将预编码后的SINR与估计的和理想的pmi进行比较来计算SINR损失。理想pmi是使用完美通道估计来选择的。

%要模拟的插槽数numSlots = numFrames*ue.SlotsPerFrame;每个插槽的子载波和符号总数的%K = ue。NSizeGrid * 12;L = ue.SymbolsPerSlot;初始化存储通道估计的数组allTxGrid = 0 ([K L*numSlots nTxAnts]);slotGridSize = [K L nRxAnts nTxAnts];hEst = 0 (slotGridSize);hestInterp = 0 (slotGridSize);hEstUpdate = 0 (slotGridSize);totalGridSize = [K L*numSlots nRxAnts nTxAnts];allHest =零(totalGridSize);allHestPerfect =零(totalGridSize);allHestInterp = 0 (totalGridSize);初始化噪声功率估计Nvar = 0;%计算运营商的CSI子带数numCSISubbands = ceil(ue.NSizeGrid/csiSubbandSize);初始化每个子带、插槽和PMI的SINRmaxPMI = hMaxPUSCHPrecodingMatrixIndicator(nLayers,nTxAnts);sinrSubband = 0 ([numcisubbands numSlots maxPMI+1]);初始化PMI矩阵和SINR损失pmi = NaN(numcisubbands,numSlots);pmi = pmi;损失=零(大小(pmi));初始化计时估计偏移量offset = chInfo.ChannelFilterDelay;计算SRS CDM长度cdmlength_hsrscdmlength_srs;用于CSI采集的OFDM符号csselectsymbols = srs。SymbolStart + (1:srs.NumSRSSymbols);nSlot = 0:numSlots-1%更新插槽计数器问题。NSlot = NSlot;生成SRS并映射到插槽网格[srsIndices,srsIndInfo] = nrSRSIndices(ue,srs);srsSymbols = nrSRS(ue,srs);创建一个插槽资源网格空网格和映射SRS符号txGrid = nrResourceGrid(ue,nTxAnts);txGrid(srsIndices) = srsSymbols;确定槽位是否包含SRSisSRSSlot = ~ isempty (srsSymbols);% OFDM调制[tx波形,waveformInfo] = nrofdm调制(ue,txGrid);tx波形= [tx波形;0 (maxChDelay、尺寸(txWaveform 2)));%稍后需要刷新通道滤波器以获得接收到的信号通道传输百分比[rx波形,pathgain] =通道(tx波形);将AWGN添加到接收的时域波形中将噪声功率归一化以考虑采样率,即用于OFDM调制的IFFT大小的函数。的信噪比%定义为每个接收天线的每RE (TS 38.101-4)。信噪比= 10^(信噪比/10);N0 = 1/√(2.0*nRxAnts*double(waveforinfo . nfft)*信噪比);噪声= N0*complex(randn(size(rx波形)),randn(size(rx波形)));rx波形= rx波形+噪声;执行定时偏移估计pathFilters = getPathFilters(channel);%时间估计只在SRS所在的槽中执行%的传输,以保持完美和实用的信道估计%同步。如果isSRSSlot如果practicalSynchronization%实际同步。关联接收到的波形%与SRS给出定时偏移估计offset = nrTimingEstimate(ue, rx波形,srsIndices,srsSymbols);其他的offset = nrPerfectTimingEstimate(pathgain,pathFilters);结束结束%执行OFDM解调rxGrid = nrOFDMDemodulate(ue, rx波形(1+偏移量:结束,:));执行实际的信道估计仅在包含SRS的符号和RBs中更新通道估计%在这个插槽中,并在其他插槽中保持来自前一个插槽的估计%的位置。当没有SRS传输时,nvar不会更新。使用覆盖所有传输的SRS符号的时间平均窗口。如果isSRSSlot%此插槽包含SRS传输[hEst,nvar] = nrChannelEstimate(ue,rxGrid,srsIndices,srsSymbols,“AveragingWindow”[0 7],“CDMLengths”, cdmLengths);在第一个SRS符号之前对OFDM符号使用前一个槽的信道估计hestInterp = repmat(hestInterp(:,end,:,:),1,ue.SymbolsPerSlot);更新OFDM符号和RB中SRS所在的信道估计%显示并保持所有通道估计,直到插槽结束firstSymbol = srs.SymbolStart+1;lastSymbol = srs。SymbolStart + srs.NumSRSSymbols;hEstUpdate(:,firstSymbol:lastSymbol,:,:) = hEst(:,firstSymbol:lastSymbol,:,:);hEstUpdate(:,lastSymbol:L,:,:) = repmat(hEst(:,lastSymbol,:,:),1,ue.SymbolsPerSlot-lastSymbol+1);idxHEstUpdate = hEstUpdate = 0;%更新渠道估计的指数hestInterp(idxHEstUpdate) = hEstUpdate(idxHEstUpdate);其他的%如果此插槽不包含SRS,则保持先前的通道估计hestInterp = repmat(hestInterp(:,end,:,:),1,ue.SymbolsPerSlot);结束% PMI选择%选择预编码器矩阵指标为多个层使用所指定的OFDM符号中的插值信道估计值% csiSelectSymbols。pmi是根据CSI子带估算的[pmi(:,nSlot+1),sinrSubband(:,nSlot+1,:),subbandIndices] = hPMISelect(nLayers, hestInterp(:, ciselectsymbols,:,:), nvar, cisubbandsize);% PMI选择SINR损失计算预编码后的性能损失与SINR的比值%,使用实际信道估计和SINR选择pmi使用完美信道估计选择的pmi预编码后的%。为完美的采购经理选择计算完美的渠道估计hEstPerfect = nrPerfectChannelEstimate(ue, pathgain,pathFilters,offset);%来自噪声实现的完美噪声估计noiseGrid = nrOFDMDemodulate(ue,noise(1+offset:end,:));nvarPerfect = var(noiseGrid(:));[loss(:,nSlot+1),pmiPerfect(:,nSlot+1)] = hPMISelectionSINRLoss(pmi(:,nSlot+1), nLayers, hEstPerfect(:, ciselectsymbols,:,:), nvarPerfect);保存所有传输的OFDM网格和信道估计的副本%显示用途* (1:L);%当前槽位符号allTxGrid(:, thislot,:) = txGrid;allHest(:, thislot,:,:) = hEst;allHestInterp(:, thislot,:,:) = hestInterp;allHestPerfect(:, thislot,:,:) = hEstPerfect;结束

结果

本节显示所有配置帧的结果:

  • 传输的包含SRS的OFDM网格

  • 完善实用的信道估计,以及信道估计误差。误差被计算为完美的和实际的信道估计之间的差的绝对值。

  • 选用的PMI采用完美实用的渠道估算,以及PMI的绝对误差。

  • 用最佳估计PMI预编码后每个子带的平均SINR

  • SINR性能损失

创建x轴和y轴向量符号= 0:(ue.NSlot+1)*ue.SymbolsPerSlot-1;slot = 0:ue.NSlot;subcarriers = 1:ue.NSizeGrid*12;resourceBlocks = 1:ue.NSizeGrid;

显示传输的包含SRS的OFDM网格

图显示亮度图像(符号、副载波、abs (allTxGrid (:,:, 1, 1)));包含(OFDM符号的);ylabel (副载波的);轴xy;标题(传输的SRS(端口1));

显示完美实用的信道估计,以及每个槽和RB的信道估计误差。信道估计误差定义为完美信道估计与实际信道估计之差的绝对值。

删除不包含SRS的第一个OFDM符号以提高可视化信道估计误差%hEstInterp = allHestInterp;idx = 1:(srs.SRSPeriod(2)*ue。SymbolsPerSlot + srs.SymbolStart);hEstInterp(:,idx,:,:) = NaN;hEstInterp((srs.NRB*12+1):end,::,:) = NaN;hChannelEstimationPlot(符号、副载波allHestPerfect hEstInterp);

显示选择的PMI使用完美和实用的信道估计,以及PMI选择每插槽的SINR损失和RB。SINR损失定义为预编码后的SINR与估计值和完美pmi的比值。估计的pmi是使用实际的信道估计获得的,完美的pmi是使用完美的信道估计选择的。

首先将损耗从子带扩展到RBs,以便显示pmiRB = hExpandSubbandToRB(pmi, cisubbandsize, ue.NSizeGrid);pmiPerfectRB = hExpandSubbandToRB(pmiPerfect, cisubbandsize, ue.NSizeGrid);lossRB = hExpandSubbandToRB(loss, cisubbandsize, ue.NSizeGrid);hPMIPlot(槽resourceBlocks pmiRB、pmiPerfectRB lossRB);

接下来,比较使用完美和实用通道估计获得的pmi。这表示正确的pmi与总pmi的比率,以及在资源网格中发生错误的位置。

numLayers = min(size(allHestInterp,[3 4]));如果numLayers ~= 1 pmiErr = sum(abs(pmi - pmiPerfect) > 0,[1 2])。/ sum(~isnan(pmi), [1 2]);TotPMIEst = sum(~isnan(pmi),[1 2]);流('预估PMI数:%d \n', TotPMIEst);流(错误PMI数:%d \n装天花板(pmiErr * TotPMIEst));流('相对误差:%。1f (%%) \n', pmiErr * 100);其他的流(“对于单个图层,PMI总是0。\n”);结束
估计PMI数:130错误PMI数:3相对误差:2.3 (%)

显示用每子带最大SINR的PMI预编码后得到的槽位SINR和RB。

hBestSINRPlot(槽resourceBlocks sinrSubband pmi, csiSubbandSize);

总结与进一步探索

这个例子展示了如何使用SRS进行同步、信道估计和PMI选择,通常用于基于代码本的上行链路传输模式。该示例还使用预编码后的SINR评估信道估计和PMI选择性能损失。

您可以在更复杂的设置中研究信道估计和PMI选择的性能。增加SRS的周期性,观察信道估计老化如何引入延迟并在预编码后恶化SINR。此外,还可以通过设置SRS参数BHop < BSRS来考察跳频条件下的性能。在这种情况下,信道估计老化频率不一致。

附录

本例使用了以下helper函数:

参考文献

  1. 3gpp ts 38.211。“NR;“第三代合作伙伴计划”;技术规范集团无线接入网。

  2. 3gpp ts 38.101-4。“NR;用户设备(UE)无线电发射和接收。第4部分:绩效要求“第三代合作伙伴项目”;技术规范集团无线接入网。

本地函数

显示完美实用的渠道估算和渠道%第一个发送和接收端口的估计错误。英吉利海峡估计误差%定义为差值的绝对值%之间的完美和实际的渠道估计。函数hChannelEstimationPlot(symbols,subcarriers,allHestPerfect,allHestInterp) figure subplot(311) imagesc(symbols, subcarriers, abs(allHestPerfect(:,:,1,1));轴xy;包含(OFDM符号的);ylabel (副载波的);colorbar;标题(最佳信道估计(TxAnt=1, RxAnt=1));subplot(312) imagesc(符号,子载波,abs(allHestInterp(:,:,1,1)),...“AlphaData”、~ isnan (allHestInterp(:,:, 1, 1)))轴xy;包含(OFDM符号的);ylabel (副载波的);colorbar;标题('基于srs的实用信道估计(TxAnt=1, RxAnt=1) ');显示信道估计误差,定义为%基于srs和完美的通道估计subplot(313) hestErr = abs(allHestInterp - allHestPerfect);imagesc(符号,子载波,hestErr(:,:,1,1),...“AlphaData”、~ isnan (hestErr (:,:, 1, 1)));轴xy;包含(OFDM符号的);ylabel (副载波的);colorbar;标题(信道估计误差(TxAnt=1, RxAnt=1));结束%显示PMI演变和PMI估计SINR损失随时间和%的频率。SINR损失定义为后SINR的比值%预编码估计和完美的pmi。估计采购经理人指数为使用实用的通道估计和完美的采购经理人指数%选择使用完美通道估计。函数hPMIPlot(slots,resourceBlocks,pmiRB,pmiPerfectRB,lossRB) figure subplot(311) imagesc(slots,resourceBlocks,pmiPerfectRB, lossRB)“AlphaData”~ isnan (pmiPerfectRB));轴xy;C = caxis;Cm =色度图;colormap(厘米(1:地板(尺寸(厘米,1)/ (c (2) - c (1)) 1):,:));将色差调整为PMI离散值colorbar包含(“槽”);ylabel (“资源块”)、标题(“使用完美渠道估计选择PMI”) subplot(312) imagesc(slot,resourceBlocks,pmiRB,“AlphaData”~ isnan (pmiRB));轴xy;colorbar,包含(“槽”);ylabel (“资源块”)、标题(“使用SRS选择PMI”) subplot(313) imagesc(槽,resourceBlocks,lossRB,“AlphaData”~ isnan (lossRB));甘氨胆酸colormap(厘米)包含(“槽”);ylabel (“资源块”);轴xy;colorbar;标题('PMI估计SINR损失(dB)'结束属性预编码后获得的每个资源块的SINR使每个子带的SINR最大化的% PMI。函数hBestSINRPlot(槽resourceBlocks sinrSubband pmi, csiBandSize)用最佳PMI预编码后显示SINRbestSINRPerSubband = nan(size(sinrSubband,[1 2]));使用最佳PMI获得每个子带和槽的SINR[sb,nslot] = find(~isnan(pmi));1:length(sb) bestSINRPerSubband(sb(i),nslot(i)) = sinrSubband(sb(i),nslot(i),pmi(sb(i),nslot(i))+1);结束首先将SINR从子带扩展为RBs,以便显示bestSINRPerRB = hExpandSubbandToRB(bestSINRPerSubband, csiBandSize, length(resourceBlocks));figure sinrdb = 10*log10(abs(bestSINRPerRB));显示亮度图像(插槽,resourceBlocks sinrdb,“AlphaData”~ isnan (sinrdb));轴xy;colorbar;包含(“槽”);ylabel (“资源块”)标题(用最佳PMI (dB)预编码后,每个子带和槽的平均SINR结束将二维矩阵的每个子带的值在第一维展开为a每个资源块的值的%矩阵。函数rbValues = hExpandSubbandToRB(subbandValues, bandSize, NRB) lastBandSize = mod(NRB,bandSize);lastBandSize= lastBandSize + bandSize*(lastBandSize==0);rbValues = [kron(subbandValues(1:end-1,:),ones(bandSize,1));...subbandValues(最终:)。*的(lastBandSize, 1)];结束

另请参阅

功能

对象

相关的话题