主要内容

发布12下行链路载波聚合波形生成、解调和分析

该示例显示了如何使用LTE工具箱生成、聚合和进一步解调多个下行链路载波™.

介绍

本示例使用载波聚合(CA)模拟LTE Release 12波形。子载波的数量和带宽可以作为参数指定。考虑带内连续CA情况。

为了生成聚合的下行链路波形,为每个分量载波配置一个eNodeB。计算分量载波参数并使用该参数为每个eNodeB配置生成一个调制波形。所有CC调制波形都被重新采样到一个公共采样率,以便可以将其组合以创建聚合波形。

组件载波数和带宽

一个向量NDLRB指定每个分量载波(CC)的资源块(RB)数。此向量的长度对应于CC数。的元素NDLRB必须在集合{6,15,25,50,75,100}RBs.TS 36.101表5.6A.1-1中[1]列出载波聚合的有效带宽组合。

%配置一组NDLRB值,以描述要使用的载波%聚合NDLRB = [50 75 100];%建立了组件载体的数量numCC=numel(NDLRB);如果numCC < 2错误('请指定多个CC带宽值。');结尾

组件载波配置

每个CC生成配置结构lteRMCDL.所有CCS的配置结构存储在单元阵列中。

%配置要生成的子帧数numSubframes = 10;% CC配置enb =细胞(1、numCC);为了i=1:numCC开关NDLRB(我)案例6 enb{i}=lteRMCDL('r.4');案例15 enb{i} = lteRMCDL('r.5');案例25 enb{i} = lteRMCDL('r.6');案例50 enb{i} = lteRMCDL('r.7');案例75 enb{i}=lteRMCDL(“R.8”);案例100 enb{i} = lteRMCDL('r.9');否则fprintf('没有有效的资源块数量:%d\n'...NDLRB (i));返回结尾enb{}。NDLRB= NDLRB(i); enb{i}.Bandwidth = hNRBToBandwidth(NDLRB(i)); enb{i}.TotSubframes = numSubframes; enb{i}.PDSCH.PRBSet = (0:enb{i}.NDLRB-1).'; enb{i}.PDSCH.RVSeq = 0; enb{i}.NCellID = 10;结尾

信道估计器配置

接收机端的信道估计器使用该结构参数化CEC.定义如下。

cec=结构;%信道估计配置结构cec。PilotAverage =“UserDefined”%类型的导频符号平均cec。FreqWindow = 15;频率窗口大小cec。TimeWindow = 15;%时间窗口大小cec。InterpType =“立方”二维插值型电子窗口=“中心”插值窗口类型cec。InterpWinSize = 1;插值窗口大小

载波聚合参数计算

要执行载波聚合,TS 36.101中描述的频率参数,部分5.6和5.7 [1)计算。这些参数总结如下图所示。

这导致三个变量:

  • F_c是包含每个CC的中心频率的向量

  • ccSpacing包含CC之间的间距(以MHz为单位)

  • BW_channel_CA是所有CC的聚合通道带宽

在下面的代码中,我们首先计算所有CCs的值,假设较低的CCs以基带(0hz)为中心。一旦BW_channel_CA计算出所有值都移位,因此聚合带宽的中心位于基带(0 Hz)。

%为额定保护频带和频率定义MHz中的Delta_f1参数%偏移量计算。在下行链路delta_f1中是子载波间距%(TS 36.101,表5.6A-1)delta_f1 = 0.015;%以MHz为单位,LTE子载波间隔以MHz为单位maxBW = hNRBToBandwidth (max (NDLRB));numCC F_c = 0 (1);numCC-1 ccSpacing = 0 (1);% CC间距计算公称保护带,TS 36.101 5.6A-1名词威达带= 0.05 * maxbw-0.5 * delta_f1;%最初假设基带的载波频率较低F_c (1) = 0;%计算CC间距和载波值为了numCC ccSpacing(k-1) = hCarrierAggregationChannelSpacing(...eNB {K-1} .BandWidth,eNB {k} .BandWidth);f_c(k)= f_c(k-1)+ ccspacing(k-1);结尾%计算较低和较高频率偏移,TS 36.101 5.6Af_offset_low =(0.18 * ndlrb(1)+ delta_f1)/ 2 +名义根带;f_offset_high =(0.18 * ndlrb(end)+ delta_f1)/ 2 +名称是;%计算较低和较高频率边缘,TS 36.101 5.6AF_edge_low = F_c(1) - F_offset_low;F_edge_high = F_c(end) + F_offset_high;%计算聚合信道带宽,TS 36.101 5.6aBW\u信道\u CA=F\u边缘\u高-F\u边缘\u低;fprintf(“BW_channel_CA: f % 0.4 MHz \ n”,BW_channel_CA);计算移动到中心基带shiftTocenter = -1 *(bw_channel_ca / 2 + f_edge_low);%聚合带宽以基带为中心F_c=F_c+移位中心;F_边缘低=F_c(1)-F_偏移低;F_边缘高=F_c(末端)+F_偏移高;%显示频带边缘fprintf('频率边缘低:%0.4f MHz\n', F_edge_low);fprintf(“F_edge_high: f % 0.4 MHz \ n”, F_edge_high);fprintf(“F_offset_low: f % 0.4 MHz \ n”, F_offset_low);fprintf(“F_offset_high: f % 0.4 MHz \ n”,f_offset_high);显示载波频率fprintf(' \ n ');为了i = 1:numCC fprintf(“分量载波% d: \ n”,i);fprintf('Fc:%0.4f MHz\n',F_c(i));结尾
BW_channel_CA: 44.6000 MHz F_edge_low: -22.3000 MHz F_edge_high: 22.3000 MHz F_offset_low: 5.5000 MHz F_offset_high: 10.0000 MHz组件运营商1:Fc: -16.8000 MHz组件运营商2:Fc: -4.8000 MHz组件运营商3:Fc: 12.3000 MHz

所需的过采集率计算

每个组件载体所需的过采样因子OSRs计算聚合信号的公共采样率。

%带宽利用率为85%bw分数=0.85;%计算分量载波的采样率numCC CCSR = 0 (1);为了i = 1:numcc info = lteofdminfo(eNB {i});ccsr(i)= info.samplingrate;结尾%计算聚合信号的总体采样率计算过采样比率(最大BW CC),以确保%信号占总带宽的85%(BW分数)OSR =(BW_CHANNEL_CA / BWFRACTECT)/(MAX(CCSR)/ 1E6);为了简化重采样操作,选择一个过采样比%是2的幂:计算OSR上方2的下一个幂osr = 2 ^ ceil(log2(osr));sr = osr * max(ccsr);fprintf('\nOutput采样率:%0.4f Ms/s\n\n',SR/1e6);%计算组件载体的单个过采样因子老osr = / CCSR;
输出采样率:61.4400 ms / s

波形生成和载波聚合

麦克多尔酒店,用来产生每个CC的波形。每个CC被重采样到一个共同的采样率,频率调制到合适的中心频率,最后加在一起形成聚合信号。

生成组件载波tx = cell(1,numcc);为了i = 1:numCC tx{i} = lteRMCDLTool(enb{i},randi([0 1],1000,1));tx{我}=重新取样(tx {}, osr(我),1)/ osr(我);tx{我}= hCarrierAggregationModulate (tx{我}、SR、F_c(我)* 1 e6);结尾%叠加组件载体波形= Tx {1};为了i = 2:numCC波形=波形+ tx{i};结尾

绘制载波聚合波形谱

载波聚合信号的功率谱显示使用hCarrierAggregationPlotSpectrum.m.在频谱中,单个载波带宽是可见的。注意,聚合带宽的中心位于基带(0hz),即在本例中,信号没有被调制到射频。

specPlot = hCarrierAggregationPlotSpectrum(波形、SR、...“载波聚合的功率谱”, {信号频谱的});

感兴趣的CC的解调与滤波

本节解调,过滤器和下倒卡CCS之一。遵循的步骤是:

  • 解调感兴趣的CC并将其带到基带(0 Hz)。

  • 过滤掉相邻的CCs和下采样。设计合适的滤波器以在下采样过程中去除不需要的相邻CCs。滤波器设计将对恢复信号的质量和EVM产生影响。可能需要根据不同的带宽和CC值调整滤波器以进行解调。

我们首先选择CC来解调和设计适当的下采样过滤器。计算通带和停机频率。

%选择CC进行解调CCofInterest=1;如果CCofInterest>numCC | | CCofInterest<=0错误(“无法解调CC号%d,有%d CC \n”...CCOFINTEREST,NUMCC);结尾%定义下采样过滤器顺序过滤器顺序=201;预计算所有CC的通频带和阻频带值firPassbandVec=(0.18*NDLRB+Delta_f1)/2/(SR/1e6/2);firStopbandVec=hCarrierAggregationTopBand(ccSpacing,NDLRB,SR);定义感兴趣载波的通频带和阻频带firPassband = firPassbandVec (CCofInterest);firStopband = firStopbandVec (CCofInterest);%提取物和解码兴趣的CCfprintf(1,'正在提取抄送号码%d:\n',cFinterest);%填充零信号以考虑滤波器瞬态响应%的长度波形=[波形;零(滤波器顺序+1,大小(波形,2));%解调感兴趣的载波DemodulatedCC =...hcArrieraggregationmodulate(波形,SR,-F_C(CCOFInterest)* 1E6);如果滤镜太窄,下采样分两阶段进行。这%简化过滤器设计要求。如果是这样的话,首字母缩写%的下采样系数为4。滤光片的设计在这一初始阶段若质量不佳%信号不可接受。如果(firStopband < 0.1)百分比下样品4src = 4;DemodulatedCC =重组(DemodulatedCC,1,SRC);%更新传递和停机带到首先进行下式采样firPassband=firPassband*SRC;firStopband=firStopband*SRC;其他的%不预滤器SRC = 1;结尾%设计低通滤波器以滤除感兴趣的CCFredges = [0 FirepassBand FirstopBand 1];firfilter = dsp.firfilter;firfilter.numerator = FILPM(FilterOrder,Fredges,[1 1 0 0]);
提取CC编号1:

显示所设计滤波器的响应。

fvtool (firFilter“分析”'弗里克');

然后对解调后的波形进行滤波,以提取感兴趣的CC。将滤波前后的解调波形的频谱绘制出来。

对信号进行滤波,提取感兴趣的分量rx波形=滤波器(解调的CC);%绘制解调滤波信号频谱过滤样图=...hCarrierAggregationPlotSpectrum ([demodulatedCC rxWaveform],老...“解调和滤波波形功率谱”...{'载波聚合信号'“过滤信号”});

此时,滤波后的波形可以降采样到其基带速率。

rxWaveform = downsample (rxWaveform osr (CCofInterest) / SRC);

同步

同步应用于所产生的信号。

%利息CC参数eNodeB=enb{CCofInterest};PDSCH=eNodeB.PDSCH;%同步接收波形offset = ltedlframeoffset(eNodeb,rxwaveform);rxwaveform = rxwaveform(1 + offset:结束,:);

EVM测量和PDSCH解码

下面的代码提供了每个子帧和平均EVM测量值。图与EVM与时间,资源块和子载波也显示。

对恢复信号的PDSCH进行解码,并检查得到的CRC是否有错误。

%用于EVM测量的信道估计结构cecEVM = cec;cecEVM。PilotAverage =“TestEVM”;[evmmeas, plot] = hPDSCHEVM(enb{CCofInterest},cecEVM, rx波形);% OFDM解调rxGrid=LTEOFDMDDemodulate(eNodeB,rxWaveform);%获取每个子帧接收的子帧和OFDM符号的数量dims = lteofdminfo(eNodeB);samplespserubframe = dims.samplingrate / 1000;nrxsubframes = bloor(size(rxwaveform,1)/ samplespersubframe);eNodeB.TotsubFrames = 1;resgridsize = lteresourcegridsize(eNodeB);L = Resgridsize(2);DISP(解码传输的子帧并检查CRC);为了n = 0: nRxSubframes-1%提取子帧rxSubframe=rxGrid(:,(1:L)+(n*L),:);%当前子帧的传输块大小eNodeB.NSUBFrame = n;trblksize = pdsch.trblksizes(n + 1);%信道估计[estChannelGrid,noiseEst]=lteDLChannelEstimate(...eNodeB、cec、rxSubframe);%执行贬低,层解调,解调和解调%在接收数据上使用信道估计[rxEncodedBits,pdschsymbols]=ltePDSCHDecode(eNodeB,PDSCH,...rxSubframe*(10^(-PDSCH.Rho/20)),estChannelGrid,noiseEst);%解码下行链路共享信道(DL-SCH)[十进制位,crc]=...lteDLSCHDecode (eNodeB PDSCH、trBlkSize rxEncodedBits {1});如果crc显示([“子帧”num2str (n)':CRC失败']);其他的disp([“子帧”num2str (n): CRC传递的]);结尾结尾
低边缘EVM,子帧0:0.647%高边EVM,子帧0:0.629%低边缘EVM,子帧1:0.682%高边缘EVM,子帧1:0.650%低边缘EVM,子帧2:0.680%高边缘EVM,子帧2:0.676%低边缘EVM,子帧3:0.676%高边缘EVM,子帧3:0.641%低边缘EVM,子帧4:0.640%高边缘EVM,子帧4:0.648%低边缘EVM,子帧6:0.698%高边缘EVM,子帧6:0.642%低边缘EVM,子帧7:0.645%高边缘EVM,子帧7:0.649%低边缘EVM,子帧8:0.700%高边缘EVM,子帧8:0.647%低边缘EVM,子帧9:0.694%高边缘EVM,子帧9:0.685%平均低边缘EVM,框架0:0.674%平均高边EVM,框架0:0.652%平均EVM帧0:0.674%平均总体EVM:0.674%的总体eVM:0.674%解码传输的子帧和检查CRC。子帧0:CRC传递的子帧1:CRC传递的子帧2:CRC传递的子帧3:CRC传递的子帧4:CRC传递的子帧5:CRC传递的子帧6:CRC传递的子帧7:CRC传递的子帧8:CRC通过子帧9:CRC通过了CRC

附录

此示例使用这些辅助功能:

参考书目

  1. 3GPP TS 36.101“用户设备(UE)无线传输和接收”