主要内容

LTE手机搜索、MIB和SIB1复苏和两个天线

这个示例使用两个渠道USRP®B210,×或X310接收一个LTE下行信号。LTE系统工具箱™用于同步解调和解码信号发送的附带的例子sdruLTE2x2SIB1Tx.m。传输信号采用发射分集方案以来,正交空间频率分组码(OSFBC)解码是lteTransmitDiversityDecode执行的函数。最后,SIB1领域,第一个系统信息块,是恢复和CRC检查。

下面的例子使用了SDRu接收机系统对象™。ChannelMapping对象的属性被设置为(1 2),使这两个渠道的使用。一步法输出一个两列矩阵的第一列是收音机的信号从“射频”和第二列是信号的射频B收音机。

在开始这个例子之前,请运行sdruLTE2x2SIB1Tx.m在一个单独的MATLAB会话。在Windows中,如果两个B210无线电用于这些例子,每个电台都必须连接到一个单独的计算机。

请参考的设置和配置部分文档USRP®收音机有关配置主机与SDRu接收器系统对象。

连接到无线

radioFound = false;radiolist = findsdru;i = 1:长度(radiolist)如果比较字符串(radiolist .Status(我),“成功”)如果比较字符串(radiolist .Platform(我),“B210”)无线电= comm.SDRuReceiver (“平台”,“B210”,“SerialNum”radiolist(我).SerialNum);收音机。MasterClockRate = 1.92 e6 * 4;%需要超过5 MHz最低收音机。DecimationFactor = 4;% e6采样率是1.92radioFound = true;打破;结束如果(比较字符串(radiolist .Platform(我),“×”)| |比较字符串(radiolist .Platform(我),“X310”)无线电= comm.SDRuReceiver (“平台”,radiolist .Platform(我),“IPAddress”radiolist(我).IPAddress);收音机。MasterClockRate = 184.32 e6;收音机。DecimationFactor = 96;% e6采样率是1.92radioFound = true;结束结束结束如果~ radioFound错误(消息(“sdru:例子:NeedMIMORadio”));结束收音机。ChannelMapping = (1 - 2);%接收信号从两个渠道收音机。CenterFrequency = 900 e6;收音机。获得= 30;收音机。SamplesPerFrame = 19200;%采样率为1.92 MHz。LTE框架10 ms收音机。OutputDataType =“双”;收音机。EnableBurstMode = true;收音机。NumFramesInBurst = 4;收音机。OverrunOutputPort = true;广播
检查无线连接…无线电=系统:comm.SDRuReceiver属性:平台:“B210”SerialNum:“ECR04ZDBT”ChannelMapping: [1 - 2] CenterFrequency: 900000000 LocalOscillatorOffset: 0获得:30 PPSSource:“内部”ClockSource:“内部”MasterClockRate: 7680000 DecimationFactor: 4 TransportDataType:“int16”OutputDataType:“双”SamplesPerFrame: 19200 EnableBurstMode:真正的NumFramesInBurst: 4

捕获信号

burstCaptures = 0 (19200、4、2);len = 0;帧= 1:4len = = 0(数据、len lostSamples) =步骤(电台);burstCaptures(:,:) =数据;结束len = 0;结束释放(电台);eNodeBOutput =重塑(burstCaptures [], 2);sr = 1.92 e6;% LTE采样率%检查存在的LTE系统工具箱如果isempty(版本(lte的)错误(消息(“sdru:例子:NeedLST”));结束%解码MIB之前,问题不知道完整的系统%的带宽。(PSS和中小学同步信号% SSS)和PBCH(包含MIB)所有躺在中央72%副载波资源(6块)系统的带宽,使问题%最初解调这中部地区。因此,带宽%是最初设置为6资源块。I / Q波形需要%相应地重新取样。在这个阶段我们也显示的频谱输入信号% | eNodeBOutput |。%设置一些家务变量:%分离器的命令窗口日志记录分隔符= repmat (“- - -”1、50);%的情节如果(~ (“channelFigure”,“var”)| | ~ isvalid (channelFigure) channelFigure =图(“可见”,“关闭”);结束(简介、synchCorrPlot pdcchConstDiagram] =hSIB1RecoveryExamplePlots (channelFigure sr);% PDSCH维生素pdschEVM = comm.EVM ();pdschEVM。MaximumEVMOutputPort = true;%设置eNodeB基本参数enb =结构;% eNodeB配置结构enb。DuplexMode =“FDD”;%认为FDD duxplexing模式enb。CyclicPrefix =“正常”;%承担正常的循环前缀enb.NDLRB= 6;%资源块的数量ofdmInfo = lteOFDMInfo (enb);%需要采样率如果(isempty (eNodeBOutput))流(”不能为空。\ n \ nReceived信号”);返回;结束%显示接收信号频谱流(“\ nPlotting收到信号频谱…\ n”);步骤(简介,awgn (eNodeBOutput, 100.0));如果(sr ~ = ofdmInfo.SamplingRate)流(的\ nResampling % 0.3 fms / s % 0.3 fms / s细胞搜索/ MIB解码…\ n '1、sr / 1 e6 ofdmInfo.SamplingRate / e6);其他的流(' \ nResampling不是必需的;接收信号在细胞搜索/ MIB译码所需的采样率(% 0.3 fms / s)。\ n”1、sr / e6);结束% Downsample接收信号nSamples =装天花板(ofdmInfo.SamplingRate /轮(sr) *大小(eNodeBOutput, 1));nRxAnts =大小(eNodeBOutput, 2);downsampled = 0 (nSamples nRxAnts);i = 1: nRxAnts downsampled (:, i) =重新取样(eNodeBOutput(:,我),ofdmInfo。SamplingRate圆(sr));结束
策划接收信号频谱……重采样不需要;接收信号在细胞搜索/ MIB译码所需的采样率(1.920 ms / s)。

频率偏移估计和修正

OFDM解调之前,必须删除任何重要的频率偏移。I / Q波形的频率偏移估计和修正lteFrequencyOffsetlteFrequencyCorrect。频率偏移估计通过相关的循环前缀,因此可以估计补偿+ / -副载波间距的一半即+ / - 7.5 khz。

流(“……\ n \ nPerforming频差估计”);%注意,双工模式设置为FDD因为时间同步%没有执行TDD——我们不能使用双工安排%表示使用哪个时间段进行频率偏移估计%之前做的时间同步。delta_f = lteFrequencyOffset (setfield (enb“DuplexMode”,“FDD”),downsampled);% #好< SFLD >流(“频率偏移:% 0.3 fhz \ n”,delta_f);downsampled = lteFrequencyCorrect (enb downsampled delta_f);
执行频率偏移估计…频率偏移:689.247赫兹

手机搜索和同步

调用lteCellSearch获得细胞身份和定时偏移量抵消第一帧头。一块接收信号之间的相关性和PSS /瑞士发现细胞产生认同。

%细胞搜索找到细胞身份和定时偏移量流(“搜索…\ n \ nPerforming细胞”);[cellID,抵消]= lteCellSearch (enb downsampled);%计算相关的三种可能的主要细胞%的身份;细胞的相关身份的峰值%以上的峰值相比其他两个相关性%原代细胞的身份为了建立的质量%的相关性。相关系数=细胞(1、3);i = 0:2 enb。NCellID =国防部(cellID +我,504);{i + 1}] [~, corr = lteDLFrameOffset (enb downsampled);corr {i + 1} =总和(corr {i + 1}, 2);结束阈值= 1.3 *马克斯([corr {2};corr {3}]);%的乘数为1.3经验如果{1}(max (corr) <阈值)警告(“sdru:例子:WeakSignal”,的同步信号相关性弱;检测细胞的身份可能是不正确的。”);结束enb。NCellID = cellID;%情节PSS /瑞士相关性和阈值synchCorrPlot。YLimits =[0马克斯([corr {1};阈值)* 1.1);步骤(synchCorrPlot, {1} (corr阈值*的(大小(corr {1}))));%完成定时同步流(帧的定时偏移量开始:\ n % d样本”,抵消);downsampled = downsampled(1 +抵消:最终,);enb。NSubframe = 0;%显示单元范围的设置流(“它是设置后细胞搜索:\ n”);disp (enb);
执行单元的搜索…时间抵消帧开始:4054个样本单元范围的设置后细胞搜索:DuplexMode:“FDD”CyclicPrefix:“正常”NDLRB: 6 NCellID: 64 NSubframe: 0

OFDM解调和信道估计

OFDM downsampled I / Q波形解调产生资源网格rgrid。这是用于执行信道估计。命令信道估计,是一个估计的噪声(MMSE均衡)和cec信道估计是配置。

信道估计的例子假设4细胞特定参考信号。这意味着每个接收机天线信道估计从所有可能的特异性参考信号端口可用。特异性的真实数量参考信号端口还不知道。信道估计是只执行第一子帧,即首先使用lOFDM符号rxgrid

保守9-by-9飞行员平均使用窗口,在时间和频率,减少噪音的影响在飞行员估计信道估计。

%信道估计配置cec。PilotAverage =“UserDefined”;%的试点,平均cec。FreqWindow = 9;%频率窗口大小cec。TimeWindow = 9;%的时间窗口大小cec。InterpType =“立方”;% 2 d插值类型cec。InterpWindow =“中心”;%插值窗口类型cec。InterpWinSize = 1;%插值窗口大小%假设4特异性首次解码尝试参考信号;%保证信道估计对所有特异性可用参考%的信号enb.CellRefP= 4; fprintf(“执行OFDM解调。\ n \ n”);griddims = lteResourceGridSize (enb);%资源网格尺寸L = griddims (2);%的OFDM符号数子帧% OFDM解调信号rxgrid = lteOFDMDemodulate (enb downsampled);如果(isempty (rxgrid))流(的定时同步后,信号比一副框架短所以没有进一步解调将被执行。\ n”);返回;结束%进行信道估计如果(strcmpi (enb.DuplexMode“TDD”enb))。TDDConfig = 0;enb。SSC = 0;结束[命令,巢]= lteDLChannelEstimate (cec, enb rxgrid (::, 1: L));
执行OFDM解调……

PBCH解调,BCH译码、MIB解析

现在MIB解码以及特异性参考信号端口的数量在BCH CRC传播作为一个面具。这个函数ltePBCHDecode建立帧时间模4和返回的nfmod4参数。它还返回MIB位向量mib和真正的数量分为特异性参考信号端口enb.CellRefP在这个函数调用的输出。如果特异性参考信号端口的数量是解码enb.CellRefP = 0,这表明BCH译码失败。这个函数lteMIB用于解析位向量mib并将相关字段添加到配置结构enb。MIB解码后,存在于检测带宽enb.NDLRB

%解码MIB%提取资源元素(REs)对应PBCH从第一%子帧所有接收天线和信道估计流(“执行MIB解码…\ n”);pbchIndices = ltePBCHIndices (enb);[pbchRx, pbchHest] = lteExtractResources (pbchIndices rxgrid (::, 1: L),命令(:,:,1:L:));%解码PBCH[bchBits, pbchSymbols nfmod4 mib, enb。CellRefP] = ltePBCHDecode (pbchRx, enb pbchHest、巢);%解析MIB比特enb = lteMIB (mib, enb);%将nfmod4 ltePBCHDecode输出函数值,% NFrame值建立MIB的系统帧数% (SFN)模4(存储在MIB地板(SFN / 4))enb。NFrame = enb.NFrame + nfmod4;% MIB解码后显示细胞宽设置流(“MIB解码后计算单元范围的设置:\ n”);disp (enb);如果(enb.CellRefP = = 0)流(的MIB解码失败(enb.CellRefP = 0)。\ n \ n”);返回;结束如果(enb.NDLRB = = 0)流(的MIB解码失败(enb.NDLRB = 0)。\ n \ n”);返回;结束
执行MIB解码…MIB解码后计算单元范围的设置:DuplexMode:“FDD”CyclicPrefix:“正常”NDLRB: 6 NCellID: 64 NSubframe: 0 CellRefP: 2 PHICHDuration:“正常”Ng:“第六”NFrame: 107

OFDM解调全带宽

现在已知信号带宽,信号重新取样所使用的名义采样率LTE系统工具箱的带宽(见lteOFDMModulate详情)。频率偏移估计和校正进行重新取样信号。然后要进行时间同步和OFDM解调。

流(现在重新启动接收带宽(NDLRB = % d)是已知…\ n ',enb.NDLRB);%重新取样现在我们知道真正的带宽ofdmInfo = lteOFDMInfo (enb);如果(sr ~ = ofdmInfo.SamplingRate)流(“\ nResampling从% 0.3 fms / s % 0.3 fms / s…\ n '1、sr / 1 e6 ofdmInfo.SamplingRate / e6);其他的流(' \ nResampling不是必需的;接收信号在NDLRB = % d所需的采样率(% 0.3 fms / s)。\ n”1、enb.NDLRB sr / e6);结束nSamples =装天花板(ofdmInfo.SamplingRate /轮(sr) *大小(eNodeBOutput, 1));重新取样= 0 (nSamples nRxAnts);i = 1: nRxAnts重新取样(:,i) =重新取样(eNodeBOutput(:,我),ofdmInfo。SamplingRate圆(sr));结束%进行频率偏移估计和修正流(“……\ n \ nPerforming频差估计”);%注意,双工模式设置为FDD因为时间同步%没有执行TDD——我们不能使用双工安排%表示使用哪个时间段进行频率偏移估计%之前做的时间同步。delta_f = lteFrequencyOffset (setfield (enb“DuplexMode”,“FDD”),重新取样);% #好< SFLD >流(“频率偏移:% 0.3 fhz \ n”,delta_f);重新取样= lteFrequencyCorrect(重新取样,enb delta_f);%找到帧的开始流(“\ nPerforming定时偏移估计…\ n”);抵消= lteDLFrameOffset (enb、重新取样);流(帧的定时偏移量开始:\ n % d样本”,抵消);%将信号与帧的开始重新取样=重新取样(1 +抵消:最终,);% OFDM解调流(“\ nPerforming OFDM解调。\ n \ n”);rxgrid = lteOFDMDemodulate (enb、重新取样);
重新启动接收现在的带宽(NDLRB = 6)是已知的……重采样不需要;接收信号是在所需的采样率NDLRB = 6 (1.920 ms / s)。执行频率偏移估计…执行定时偏移估计频率偏移:689.247赫兹……时间抵消帧开始:4054个样本进行OFDM解调……

SIB1解码

在本节中执行以下步骤:

  • 物理控制格式指示器通道(PCFICH)解调,CFI解码

  • PDCCH解码

  • 盲目PDCCH搜索

  • SIB比特恢复:PDSCH解调和DL-SCH解码

  • 缓冲和重置DL-SCH HARQ的状态

恢复后的SIB CRC应该是0。

这些解码步骤为每个发生在一个循环中执行的子帧携带SIB1收到信号。正如上面提到的,子帧5中的SIB1传播甚至每一帧,所以首先检查输入信号建立至少一个发生SIB1存在。对于每个SIB1子窗体,信道估计绘制级响应,收到PDCCH的星座。

%检查该框架包含SIB1,如果不是提前1我们提供框架%有足够的数据,否则终止。如果(mod (enb.NFrame, 2) ~ = 0)如果(大小(rxgrid, 2) > = (L * 10)) rxgrid (:, 1: (L * 10):) = [];流(“跳帧% d(奇数帧数不包含SIB1)。\ n \ n”,enb.NFrame);其他的rxgrid = [];结束enb。NFrame = enb。NFrame + 1;结束% 5子帧,或者终止如果我们有不到5子帧如果(大小(rxgrid, 2) > = (L * 5)) rxgrid (:, 1: (L * 5):) = [];%删除子帧0到4其他的rxgrid = [];结束enb。NSubframe = 5;如果(isempty (rxgrid))流(的接收信号不包含子帧携带SIB1。\ n \ n”);结束%重置HARQ缓冲区decState = [];%,我们还有更多的数据,试图解码SIB1(大小(rxgrid, 2) > 0)流(“% s \ n”、分离器);流(“SIB1解码帧% d \ n”,国防部(enb.NFrame, 1024));流(“% s \ n \ n”、分离器);%重置HARQ缓冲与每个新的SIB1 8帧%的信息可能会有所不同如果(mod (enb.NFrame 8) = = 0)流(“重置HARQ缓冲区。\ n \ n”);decState = [];结束%提取当前子帧rxsubframe = rxgrid (::, 1: L);%进行信道估计[命令,巢]= lteDLChannelEstimate (cec, enb rxsubframe);% PCFICH解调,CFI解码。CFI现在解调%解码使用类似的资源开采和解码功能%显示已经对BCH接待。lteExtractResources用于%从接收到的子帧中提取REs PCFICH对应% rxsubframe命令和信道估计。流(“解码CFI。\ n \ n”);pcfichIndices = ltePCFICHIndices (enb);%得到PCFICH指数[pcfichRx, pcfichHest] = lteExtractResources (pcfichIndices rxsubframe,命令);%解码PCFICHcfiBits = ltePCFICHDecode (pcfichHest, enb, pcfichRx巢);cfi = lteCFIDecode (cfiBits);%得到CFI如果(isfield (enb“CFI”)& & cfi ~ = enb.CFI)释放(pdcchConstDiagram);结束enb。CFI = CFI;流(“解码CFI值:% d \ n \ n ',enb.CFI);%对TDD, PDCCH必须解码盲目地在可能的值% PHICH配置因素m_i (0, 1, 2) TS36.211表6.9 - 1。% m_i值= 0,1和2可以通过配置TDD% uplink-downlink配置1,6 - 0。如果(strcmpi (enb.DuplexMode“TDD”)tddConfigs = (1 6 0);其他的tddConfigs = 0;%不用于FDD,只用于控制while循环结束dci = {};(isempty (dci) & & ~ isempty (tddConfigs))%配置TDD uplink-downlink配置如果(strcmpi (enb.DuplexMode“TDD”enb))。TDDConfig = tddConfigs (1);结束tddConfigs (1) = [];% PDCCH解调。现在PDCCH解调和解码%使用类似的资源开采和解码功能%显示已经对BCH和CFI接待pdcchIndices = ltePDCCHIndices (enb);%得到PDCCH指数[pdcchRx, pdcchHest] = lteExtractResources (pdcchIndices rxsubframe,命令);%解码PDCCH和星座[dciBits, pdcchSymbols] = ltePDCCHDecode (pdcchHest, enb, pdcchRx巢);步骤(pdcchConstDiagram pdcchSymbols);% PDCCH盲目搜索系统(SI)和DCI解码的信息。%的LTE系统工具箱提供完整的盲目搜索PDCCH%找到任何DCI RNTI指定的消息,在这种情况下% SI-RNTI。流(“PDCCH搜索SI-RNTI…\ n \ n”);pdcch =结构(“RNTI”,65535);dci = ltePDCCHSearch (enb pdcch dciBits);% PDCCH搜索DCI结束%如果DCI解码,进行解码PDSCH / DL-SCH如果dci ~ isempty (dci) dci = {1};流(“与SI-RNTI DCI消息:\ n”);disp (dci);%得到DCI PDSCH配置[pdsch, trblklen] = hPDSCHConfiguration (dci, enb pdcch.RNTI);pdsch。NTurboDecIts = 5;流(“DCI解码后PDSCH设置:\ n”);disp (pdsch);% PDSCH解调和DL-SCH解码恢复SIB碎片。% DCI消息现在解析给的配置%相应PDSCH携带SIB1, PDSCH解调%最后接收到的比特是产生SIB1 DL-SCH解码%。流(“解码SIB1。\ n \ n”);%得到PDSCH指数[pdschIndices, pdschIndicesInfo] = ltePDSCHIndices (pdsch, enb pdsch.PRBSet);[pdschRx, pdschHest] = lteExtractResources (pdschIndices rxsubframe,命令);%解码PDSCH[dlschBits, pdschSymbols] = ltePDSCHDecode (pdsch, enb pdschRx, pdschHest,巢);%解码DL-SCH HARQ结合软缓冲输入/输出如果~ isempty (decState)流(的重组与先前的传播。\ n \ n”);结束[sib1, crc, decState] = lteDLSCHDecode (pdsch, enb trblklen, dlschBits, decState);%计算PDSCH维生素记录= lteDLSCH (pdsch, enb pdschIndicesInfo。G, sib1);remod = ltePDSCH (enb pdsch记录);[~,refSymbols] = ltePDSCHDecode (pdsch, enb remod);释放(pdschEVM);[rmsevm, peakevm] =步骤(pdschEVM refSymbols {1}, pdschSymbols {1});流(“PDSCH RMS维生素:% 0.3 f % % \ n ',rmsevm);流(' PDSCH高峰维生素:% 0.3 f % % \ n \ n”,peakevm);流(“SIB1 CRC: % d \ n”,crc);如果crc = = 0流(“成功SIB1复苏。\ n \ n”);其他的流(“SIB1解码失败。\ n \ n”);结束其他的%显示DCI解码失败了流(“DCI解码失败。\ n \ n”);结束%更新信道估计阴谋图(channelFigure);冲浪(abs(命令(:,:,1,1)));hSIB1RecoveryExamplePlots (channelFigure);channelFigure.CurrentAxes。XLim =[0大小(命令,2)+ 1);channelFigure.CurrentAxes。YLim =[0大小(命令,1)+ 1];%跳过2帧,并尝试再次SIB1解码,如果我们或终止%剩下不到2帧。如果(大小(rxgrid, 2) > = (L * 20)) rxgrid (:, 1: (L * 20):) = [];%去除2更多的帧其他的rxgrid = [];%小于2帧了结束enb。NFrame = enb.NFrame + 2;结束
跳帧107(奇数帧数不包含SIB1)。- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SIB1解码帧108 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -解码CFI……解码CFI值:3 PDCCH搜索SI-RNTI……DCI SI-RNTI消息:DCIFormat:“Format1A”CIF: 0 AllocationType: 0配置:[1 x1 struct] ModCoding: 5 HARQNo: 0 NewData: 0房车:3 TPCPUCCH: 0 TDDIndex: 0 DCI解码后PDSCH设置:RNTI: 65535 PRBSet: x1 uint64 [6] NLayers: 2调制:{“正交相移编码”}房车:3 TxScheme:“TxDiversity”NTurboDecIts: 5解码SIB1……挣值管理PDSCH RMS维生素:14.875% PDSCH峰值都:47.133% SIB1 CRC: 0成功SIB1复苏。- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SIB1解码帧110 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -解码CFI……解码CFI值:3 PDCCH搜索SI-RNTI……DCI SI-RNTI消息:DCIFormat:“Format1A”CIF: 0 AllocationType: 0配置:[1 x1 struct] ModCoding: 5 HARQNo: 0 NewData: 0房车:1 TPCPUCCH: 0 TDDIndex: 0 DCI解码后PDSCH设置:RNTI: 65535 PRBSet: x1 uint64 [6] NLayers: 2调制:{“正交相移编码”}房车:1 TxScheme:“TxDiversity”NTurboDecIts: 5解码SIB1……结合之前的传播。挣值管理PDSCH RMS维生素:15.589% PDSCH峰值都:37.974% SIB1 CRC: 0成功SIB1复苏。

情节信道估计第一个OFDM符号

在这个例子中,MIMO传输执行四两个传输天线和两个接收天线之间的联系。下面的情节提供了估计信道系数的快照。

图(“位置”[0 0 800 600])情节(abs(命令(:,1,1,1)),“b -”)举行情节(abs(命令(:1 2 1)),r -。)情节(abs(命令(:,1,1,2)),“k——”)情节(abs(命令(:,1,2,2)),“m”。)举行网格m = max(重塑(abs(命令(1::,:)),[],1));轴([0大小(命令,1)+ 1 0米* 1.3])标题(的第一个OFDM符号的信道估计)包含(“副载波指数”)ylabel (估计信道系数的大小)传说(“TX1 RX1”,“TX1 RX2”,“TX2 RX1”,“TX2 RX2”,“位置”,“东北”)

小贴士最大化性能

  • 运行这个例子,sdruLTE2x2SIB1Tx.m在两台电脑

  • 这个例子和InterpolationFactor DecimationFactor费用的一倍sdruLTE2x2SIB1Tx.m

  • 之前开始MATLAB在-nodesktop模式下运行sdruLTE2x2SIB1Tx.m

  • 如果您正在使用一台电脑和两个B210收音机、不将它们连接到相邻的USB端口

附录

这个示例使用以下辅助函数:

版权声明

通用软件无线电周边®和USRP®是国家仪器公司的商标。