主要内容

版本12下行链路载波聚合波形生成,解调和分析

此示例显示了如何使用LTE Toolbox™生成,聚合和进一步解调多个下行链路载波。

介绍

此示例模拟LTE版本12使用载波聚合(CA)的波形。可以将子载波的数量和它们的带宽指定为参数。考虑带有带内的邻接CA案例。

为了生成聚合下行链路波形,为每个组件载波配置eNodeB。计算分量载波参数并用于为每个eNodeB配置生成调制波形。所有CC调制波形都重新采样为常规采样率,以便它们可以组合以创建聚合波形。

分量运营商和带宽数量

矢量ndlrb.指定每个组件载波(CC)的资源块(RB)的数量。该矢量的长度对应于CC的数量。元素ndlrb.必须在SET {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 = CELL(1,NUMCC);为了i = 1:numcc转变ndlrb(i)案件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 {i} .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 = struct;%信道估计配置结构cec.pilotaverage ='用户自定义';%类型的导频符号平均cec.freqwindow = 15;%频率窗口大小cec.timewindow = 15;%时间窗口大小cec.interpype =.'立方体';%2D插值类型cec.interpwindow ='中心';%插值窗口类型cec.Interpwinsize = 1;%插值窗口大小

载波聚合参数计算

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

这导致三个变量:

  • f_c.是包含每个CC的中心频率的矢量

  • ccspacing.包含MHz中CC之间的间距

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

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

%定义MHz中的Delta_F1参数,用于标称保护频段和频率%偏移量计算。在下行链路delta_f1中是子载波间距%(TS 36.101,表5.6A-1)delta_f1 = 0.015;MHz中的%在MHz中,LTE子载波间距在MHz中maxbw = hnrbtobandwidth(max(ndlrb));f_c = zeros(1,numcc);ccspacing =零(1,numcc-1);%CC间距%计算标称卫频带,TS 36.101 5.6a-1名词威达带= 0.05 * maxbw-0.5 * delta_f1;%最初假设较低的载波频率是基带f_c(1)= 0;%计算CC间距和载波值为了K = 2:NUMCC CCSPACING(K-1)= HCARRAGGREGATIONCHANNELSPACING(......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(结束)+ f_offset_high;%计算聚合信道带宽,TS 36.101 5.6abw_channel_ca = f_edge_high  -  f_edge_low;fprintf('bw_channel_ca:%0.4f mhz \ n',bw_channel_ca);%计算转移到中心基带shiftTocenter = -1 *(bw_channel_ca / 2 + f_edge_low);%聚合带宽以基带为中心f_c = f_c + shiftTocenter;f_edge_low = f_c(1) -  f_offset_low;f_edge_high = f_c(结束)+ f_offset_high;%显示频带边缘fprintf('f_edge_low:%0.4f mhz \ n',f_edge_low);fprintf('f_edge_high:%0.4f mhz \ n',f_edge_high);fprintf('f_offset_low:%0.4f mhz \ n',f_offset_low);fprintf('f_offset_high:%0.4f mhz \ n',f_offset_high);%显示载波频率fprintf('\ n');为了i = 1:numcc fprintf('组分载体%d:\ n',一世);fprintf('fc:%0.4f mhz \ n',f_c(i));结尾
BW_CHANNEL_CA:44.6000 MHz F_EDGE_LOW: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%的百分比利用率Bwfraction = 0.85;%计算分量载波的采样率CCSR =零(1,NUMCC);为了i = 1:numcc info = lteofdminfo(eNB {i});ccsr(i)= info.samplingrate;结尾%计算聚合信号的整体采样率%计算过采样比率(最大的BW CC)以确保%信号占总带宽的85%(BWFraction)OSR =(BW_CHANNEL_CA / BWFRACTECT)/(MAX(CCSR)/ 1E6);%为了简化重采样操作,选择过采样率%是2的力量:计算OSR上方两个的下一个功率osr = 2 ^ ceil(log2(osr));sr = osr * max(ccsr);fprintf('\ noutput采样率:%0.4f ms / s \ n \ n',SR / 1E6);%计算组件载体的单个过采样因子osrs = sr./ccsr;
输出采样率:61.4400 ms / s

波形生成和载波聚合

ltermcdltool.用于为每个CC生成波形。它们中的每一个都重新采样到常见的采样率,调制到适当的中心频率并最终添加一起以形成聚合信号。

%生成分量载波tx = cell(1,numcc);为了i = 1:numcc tx {i} = ltermcdltool(eNB {i},randi([0 1],1000,1));tx {i} =重组(tx {i},osrs(i),1)/ osrs(i);tx {i} = hcArrieraggregationmodulate(tx {i},sr,f_c(i)* 1e6);结尾%叠加分量载体波形= Tx {1};为了i = 2:numcc waveform = waveform + tx {i};结尾

绘图载波聚合波形谱

使用载波聚合信号的功率谱进行使用hcarrieraggregationplotspectrum.m.。在光谱中,各个载波带宽可见。注意,聚合带宽的中心位于基带(0 Hz),即在该示例中,信号未调制到RF。

Specplot = HcArrieraggregationPlotsPectrum(波形,SR,......'载波聚合的功率范围',{'信号谱'});

解调和过滤感兴趣的CC

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

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

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

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

%选择CC解调ccofinterest = 1;如果ccofinterest> numcc ||ccofinterest <= 0错误('无法解调CC号%d,有%d ccs \ n'......CCOFINTEREST,NUMCC);结尾%定义下采样过滤器顺序FilterOrder = 201;所有CC的%预先烫伤通带和阻带值FiRPassBandVec =(0.18 * NDLRB + DELTA_F1)/ 2 /(SR / 1E6 / 2);firstopbandvec = hcarrieraggregationstopband(ccspacing,ndlrb,sr);%定义了感兴趣的载体的通带和停车FirPassBand = FirPassBandVec(CCOFInterest);firstopband = firstopbandvec(ccofinterest);%提取物和解码兴趣的CCFPRINTF(1,'提取CC号%d:\ n',ccofinterest);%PAD信号用零点考虑过滤器瞬态响应% 长度波形= [波形;零(FilterOrder + 1,尺寸(波形,2))];%解调感兴趣的载体DemodulatedCC =......hcArrieraggregationmodulate(波形,SR,-F_C(CCOFInterest)* 1E6);如果过滤器太窄,则%下采样在两个阶段完成。这%简化过滤器设计要求。如果这是一个初始的情况施加%下采样系数为4。你可能想考虑一个不同的如果产生的质量,在这个初始阶段中的%过滤器设计%信号是不可接受的。如果(FirstopBand <0.1)百分比下样品4SRC = 4;DemodulatedCC =重组(DemodulatedCC,1,SRC);%更新传递和停机带到首先进行下式采样FirePassBand = 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。绘制过滤之前和之后解调波形的光谱。

%过滤信号以提取感兴趣的组件rxwaveform = firfilter(demodulatedcc);%绘制解调和过滤的信号谱filteredspecplot =.......hcarrieraggregationplotspectrum([demodulatedcc,rxwaveform],sr,......'解调和过滤波形功率谱'......{'载波聚合信号''过滤信号'});

此时,滤波的波形可以将下采样为其基带速率。

rxwaveform = downsample(rxwaveform,osrs(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,PLOTS] = HPDSCHEVM(eNB {CCOFINTEREST},CECEVM,RXWAVEFORM);%OFDM解调rxgrid = lteofdmdemodulate(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,噪声] = LTedLchanneLeStimate(......eNodeB,CEC,RXSUBFRAME);%执行贬低,层解调,解调和解调使用频道估计的收到数据的%[rxencodedbits,pdschsymbols] = ltepdschdecode(eNodeb,pdsch,......rxsubframe *(10 ^( -  pdsch.rho / 20)),Estchannelgrid,噪音);%解码下行链路共享通道(DL-SCH)[decbits,crc] =......LTEDLSCHDECODE(eNodeB,PDSCH,TRBLKSIZE,RxEncodedBits {1});如果CRC DISP(['子帧'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.16.101“用户设备(UE)无线电传输和接收”