主要内容

LTE Cell Search, MIB and SIB1 Recovery with Two antenna . LTE Cell Search, MIB and SIB1 Recovery with Two antenna

本例使用USRP®B210、X300或X310的两个通道接收LTE下行信号。LTE系统工具箱™用于同步、解调和解码随附示例发送的信号sdruLTE2x2SIB1Tx.m.由于发射信号采用发射分集方案,正交空间频率分组码(OSFBC)译码由lteTransmitDiversityDecode函数执行。最后,对系统信息块中的第一个字段SIB1进行恢复并进行CRC校验。

这个例子使用了SDRu Receiver System对象™。对象的ChannelMapping属性被设置为[1 2]以启用两个通道。步进方法输出一个两列矩阵,其中第一列是来自无线电的“RF a”信号,第二列是来自无线电的“RF B”信号。

在启动这个示例之前,请运行sdruLTE2x2SIB1Tx.m在一个单独的MATLAB会话。在Windows中,如果这些示例使用两个B210收音机,则每个收音机必须连接到单独的计算机。

请参阅的安装和配置部分USRP®无线电文件有关配置主机以使用SDRu Receiver System对象的详细信息。

连接到无线

radioFound = false;radiolist = findsdru;i = 1:长度(radiolist)如果比较字符串(radiolist (i)。的地位,“成功”如果比较字符串(radiolist (i)。平台,“B210”)无线电= comm. sdrreceiver (“平台”“B210”...“SerialNum”radiolist(我).SerialNum);收音机。MasterClockRate = 1.92e6 * 4;%至少需要超过5mhz收音机。DecimationFactor = 4;%采样率为1.92e6radioFound = true;打破结束如果(比较字符串(radiolist (i)。平台,“×”) | |...比较字符串(radiolist (i)。平台,“X310”无线电= comm. sdrreceiver (“平台”radiolist (i)。平台,...“IPAddress”radiolist(我).IPAddress);收音机。MasterClockRate = 184.32 e6;收音机。DecimationFactor = 96;%采样率为1.92e6radioFound = true;结束结束结束如果~ radioFound错误(消息(“sdru:例子:NeedMIMORadio”));结束收音机。ChannelMapping = [1 2];接收来自两个通道的信号收音机。CenterFrequency = 900 e6;收音机。获得= 30;收音机。SamplesPerFrame = 19200;%采样频率为1.92 MHz。LTE的帧长为10毫秒收音机。OutputDataType =“双”;收音机。EnableBurstMode = true;收音机。NumFramesInBurst = 4;收音机。OverrunOutputPort = true;广播
检查无线连接…radio = System: comm.SDRuReceiver属性:Platform: 'B210' SerialNum: 'ECR04ZDBT' ChannelMapping: [1 2] CenterFrequency: 900000000 LocalOscillatorOffset: 0 Gain: 30 PPSSource: 'Internal' ClockSource: 'Internal' MasterClockRate: 7680000 DecimationFactor: 4 TransportDataType: 'int16' OutputDataType: 'double' SamplesPerFrame:19200 EnableBurstMode: true NumFramesInBurst: 4

捕获信号

burstCaptures = 0(19200、4、2);len = 0;帧= 1:4len == 0 [data,len,lostSamples] = step(radio);burstCaptures(:,:) =数据;结束len = 0;结束释放(电台);eNodeBOutput =重塑(burstCaptures [], 2);Sr = 1.92e6;LTE采样率%检查是否存在LTE系统工具箱如果isempty(版本(lte的)错误(消息(“sdru:例子:NeedLST”));结束%在解码MIB之前,UE不知道整个系统%的带宽。主次同步信号(PSS和% SSS)和PBCH(包含MIB)都位于中央72系统带宽的%子载波(6个资源块),允许UE使用%来初始解调这个中心区域。因此,带宽%初始设置为6个资源块。I/Q波形需要%相应地重新取样。在这个阶段,我们还显示了%输入信号|eNodeBOutput|。%设置一些家政变量:命令窗口日志记录的%分隔符分隔符= repmat (“- - -”1、50);%的情节如果(~ (“channelFigure”“var”) || ~isvalid(channelFigure))“可见”“关闭”);结束(简介、synchCorrPlot pdcchConstDiagram] =...hSIB1RecoveryExamplePlots (channelFigure sr);% PDSCH维生素pdschEVM = comm.EVM ();pdschEVM。MaximumEVMOutputPort = true;%设置eNodeB基本参数enb =结构;% eNodeB配置结构enb。DuplexMode =“FDD”%采用FDD双工模式enb。CyclicPrefix =“正常”%假定正常循环前缀enb。NDLRB = 6;%资源块数ofdmInfo = lteOFDMInfo (enb);%需要得到采样率如果(isempty (eNodeBOutput))流(接收到的信号不能为空。);返回结束%显示接收信号频谱流(绘制接收信号频谱…);步骤(简介,awgn (eNodeBOutput, 100.0));如果(sr ~ = ofdmInfo.SamplingRate)流('\nResampling from %0.3fMs/s to %0.3fMs/s for cell search / MIB decoding…\n'1、sr / 1 e6 ofdmInfo.SamplingRate / e6);其他的流(' \ nResampling不是必需的;接收到的信号以期望的采样率进行cell搜索/ MIB解码(%0.3fMs/s)。1、sr / e6);结束% Downsample收到信号nSamples =装天花板(ofdmInfo.SamplingRate /轮(sr) *大小(eNodeBOutput, 1));nRxAnts = size(eNodeBOutput, 2);downsampling = 0 (nSamples, nRxAnts);i=1:nRxAnts downsampling (:,i) = resample(eNodeBOutput(:,i), ofdmInfo. .SamplingRate圆(sr));结束
绘制接收信号频谱…重采样不需要;接收到的信号以期望的采样率(1.920Ms/s)进行cell搜索/ MIB解码。

频率偏差估计和校正

在OFDM解调之前,必须去除任何显著的频率偏移。估计和校正I/Q波形中的频率偏移lteFrequencyOffsetlteFrequencyCorrect.频率偏移是通过循环前缀的相关来估计的,因此可以估计到+/-一半的子载波间距,即+/- 7.5kHz。

流('\n '执行频率偏移估计…\n');%注意这里的双工模式被设置为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/SSS之间的相关性图被产生。

单元格搜索以查找单元格标识和时间偏移流(“搜索…\ n \ nPerforming细胞”);[cellID, offset] = lteCellSearch(enb, downsampling);%计算三个可能的主单元的相关性%的身份;建立了细胞同一性的相关性峰值%以上与其他两个相关的峰值进行比较%初级细胞的身份,以建立质量%的相关性。相关系数=细胞(1、3);I = 0:2 enb。NCellID = mod(cellID + i,504);[~,corr{i+1}] = lteDLFrameOffset(enb, downsampling);corr {i + 1} =总和(corr {i + 1}, 2);结束max([corr{2};corr {3}]);%乘数1.3的经验获得如果{1} (max (corr) <阈值)警告(“sdru:例子:WeakSignal”同步信号相关性弱;检测到的细胞身份可能不正确。”);结束enb。NCellID = cellID;%绘制PSS/SSS相关性和阈值synchCorrPlot。YLimits = [0 max([corr{1};阈值)* 1.1);步骤(synchCorrPlot, {1} (corr阈值*的(大小(corr {1}))));%执行定时同步流('帧开始的时间偏移:%d采样\n',抵消);downsampled = downsampled(1 +抵消:最终,);enb。NSubframe = 0;%显示单元格范围设置流(' cell -wide settings after cell search:\n');disp (enb);
执行单元的搜索…计时偏移帧开始:4054样本单元格搜索后的全单元格设置:DuplexMode: 'FDD' CyclicPrefix: 'Normal' NDLRB: 6 NCellID: 64 NSubframe: 0

OFDM解调与信道估计

OFDM下采样I/Q波形被解调以产生资源网格rgrid.这是用来执行信道估计。命令为信道估计,是噪声的估计(用于MMSE均衡)和cec为信道估计器配置。

对于信道估计,本例假设有4个特定于小区的参考信号。这意味着从所有可能的蜂窝特定参考信号端口到每个接收器天线的信道估计是可用的。细胞特定参考信号端口的真实数量还不知道。信道估计仅对第一个子帧进行,即使用第一个子帧lOFDM符号rxgrid

在时间和频率上使用了一个保守的9 × 9导频平均窗口,以减少信道估计时噪声对导频估计的影响。

通道估计器配置cec。PilotAverage =“UserDefined”%引航平均的类型cec。FreqWindow = 9;频率窗口大小cec。TimeWindow = 9;%时间窗口大小cec。InterpType =“立方”二维插值型cec。InterpWindow =“中心”插值窗口类型cec。InterpWinSize = 1;插值窗口大小%假设初始解码尝试使用4个细胞特定的参考信号;%确保通道估计可用于所有特定单元格的参考%的信号enb。CellRefP = 4;流(“执行OFDM解调。\ n \ n”);griddims = lteResourceGridSize (enb);%资源网格维度L = griddims (2);%一帧OFDM符号数% OFDM解调信号rxgrid = lteofdm解调器(enb,下采样);如果(isempty (rxgrid))流('在定时同步后,信号小于一个子帧,因此不会执行进一步的解调');返回结束执行信道估计如果(strcmpi (enb。DuplexMode,“TDD”enb))。TDDConfig = 0;enb。SSC = 0;结束[hest, nest] = lteDLChannelEstimate(enb, cec, rxgrid(:,1:L,:));
执行OFDM解调……

PBCH解调、BCH解码、MIB解析

现在,MIB将随着在BCH CRC上作为掩码传输的蜂窝特定参考信号端口的数量一起被解码。这个函数ltePBCHDecode建立帧计时模4并将其返回nfmod4参数。它还以vector形式返回MIB位mib以及被分配到的细胞特定参考信号端口的真实数目enb。CellRefP在这个函数调用的输出。如果特定细胞的参考信号端口的数量被解码为enb。CellRefP = 0,表示解码BCH失败。这个函数lteMIB用于解析位向量mib并将相关字段添加到配置结构中enb.MIB解码后,检测到的带宽显示在enb。NDLRB

%解码MIB从第一个中提取PBCH对应的资源元素(REs)%子帧横跨所有接收天线和信道估计流(“执行MIB解码…\ n”);pbchIndices = ltePBCHIndices (enb);[pbchRx, pbchHest] = lteExtractResources(...pbchIndices rxgrid (::, 1: L),命令(:,:,1:L:));%解码PBCH[bchBits, pbchSymbols, nfmod4, mib, enb.]CellRefP] = ltePBCHDecode (...enb, pbchRx, pbchest, nest);%解析MIB位enb = lteMIB(mib, enb);%合并函数ltePBCHDecode的nfmod4值输出,如下所示%从MIB中建立的NFrame值就是系统帧号% (SFN) modulo 4(在MIB中存储为floor(SFN/4))enb。NFrame = enb.NFrame + nfmod4;% MIB解码后显示单元宽设置流(' MIB解码后的Cell-wide设置:\n');disp (enb);如果(enb.CellRefP = = 0)流('MIB解码失败(enb.CellRefP=0).\n\n');返回结束如果(enb.NDLRB = = 0)流('MIB解码失败(enb.NDLRB=0).\n\n');返回结束
执行MIB解码…MIB解码后的Cell-wide设置:DuplexMode: 'FDD' CyclicPrefix: 'Normal' NDLRB: 6 NCellID: 64 NSubframe: 0 CellRefP: 2 PHICHDuration: 'Normal' Ng: 'Sixth' NFrame: 107

全带宽OFDM解调

现在,信号带宽已知,信号被重新采样到LTE系统工具箱用于该带宽的标称采样率(见lteOFDMModulate详情)。对重采样信号进行频偏估计和校正。然后进行定时同步和OFDM解调。

流('重新启动接收,现在带宽(NDLRB=%d)已知…\n', enb.NDLRB);%重新采样,现在我们知道了真正的带宽ofdmInfo = lteOFDMInfo (enb);如果(sr ~ = ofdmInfo.SamplingRate)流('\nResampling from %0.3fMs/s to %0.3fMs/s…\n'1、sr / 1 e6 ofdmInfo.SamplingRate / e6);其他的流(' \ nResampling不是必需的;接收信号在NDLRB=%d (%0.3fMs/s)的期望采样率下。\n'1、enb.NDLRB sr / e6);结束nSamples =装天花板(ofdmInfo.SamplingRate /轮(sr) *大小(eNodeBOutput, 1));resampled = 0 (nSamples, nRxAnts);i = 1:nRxAnts resampled(:,i) = resample(eNodeBOutput(:,i), ofdmInfo. .SamplingRate圆(sr));结束%进行频率偏差估计和校正流('\n '执行频率偏移估计…\n');%注意这里的双工模式被设置为FDD,因为定时同步%尚未执行-对于TDD,我们不能使用双工安排%,指示用于频率偏移估计的时间周期%之前做定时同步。delta_f = lteFrequencyOffset (setfield (enb“DuplexMode”“FDD”),重新取样);% #好< SFLD >流(“频率偏移:% 0.3 fhz \ n”, delta_f);resampled = lteFrequencyCorrect(enb, resampled, delta_f);找到帧的开始流('\n '执行定时偏移估计…\n');offset = lteDLFrameOffset(enb, resampled);流('帧开始的时间偏移:%d采样\n',抵消);将信号与帧的开始对齐重新取样=重新取样(1 +抵消:最终,);% OFDM解调流(“\ nPerforming OFDM解调。\ n \ n”);rxgrid = lteofdm解调器(enb,重采样);
重新启动接收,现在带宽(NDLRB=6)是已知的…重采样不需要;当NDLRB=6 (1.920Ms/s)时,接收到的信号具有理想的采样率。执行频率偏移估计…频率偏移:689.247Hz执行定时偏移估计…执行OFDM解调…

SIB1解码

本节的操作步骤如下:

  • PCFICH解调、CFI解码

  • PDCCH解码

  • 盲目PDCCH搜索

  • SIB位恢复:PDSCH解调和DL-SCH译码

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

恢复后,SIB CRC应为0。

对于接收信号中携带SIB1的每一个子帧,在循环中执行这些解码步骤。如上所述,SIB1在每一偶数帧的子帧5中传输,因此首先检查输入信号,以确定至少有一次SIB1出现。对于每个SIB1子帧,绘制信道估计幅度响应图,如图所示为接收的PDCCH星座。

% Check this frame contains SIB1, if not advance by 1 frame provided we . %检查这个帧包含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(size(rxgrid,2) > 0) fprintf(“% s \ n”、分离器);流('SIB1解码帧%d\n',国防部(enb.NFrame, 1024));流(“% s \ n \ n”、分离器);%重置HARQ缓冲区,每增加一组8帧作为SIB1% info可能不同如果(mod (enb.NFrame 8) = = 0)流(“重置HARQ缓冲区。\ n \ n”);decState = [];结束%提取当前子帧rxsubframe = rxgrid (::, 1: L);执行信道估计[hest,nest] = lteDLChannelEstimate(enb, cec, rxsubframe);% PCFICH解调,CFI解码。CFI现在被解调%解码使用类似的资源提取和解码函数那些已经显示为BCH接收。lteExtractResources用于%从接收的子帧中提取PCFICH对应的REs% rxsubframe和channel estimate hest。流(“解码CFI。\ n \ n”);pcfichIndices = ltePCFICHIndices (enb);%获取PCFICH指数[pcfichRx, pcfichest] = lteExtractResources(pcfichIndices, rxsubframe, hest);%解码PCFICHcfiBits = ltePCFICHDecode(enb, pcfichRx, pcfichest, nest);cfi = lteCFIDecode (cfiBits);%得到CFI如果(isfield (enb“CFI”) && cfi~=enb.CFI)释放(pdcchConstDiagram);结束enb。CFI = CFI;流('Decoded CFI值:%d\n\n', enb.CFI);%对于TDD,必须盲译码PDCCH的可能值% the PHICH configuration factor m_i (0,1,2) in TS36.211% m_i = 0,1和2的值可以通过配置TDD来实现%上行-下行配置分别为1、6和0。如果(strcmpi (enb。DuplexMode,“TDD”tddConfigs = [1 6 0];其他的tddConfigs = 0;%不用于FDD,只用于控制while循环结束dci = {};(isempty (dci) & & ~ isempty (tddConfigs))%配置TDD上下行配置如果(strcmpi (enb。DuplexMode,“TDD”enb))。TDDConfig = tddConfigs (1);结束tddConfigs (1) = [];% PDCCH解调。现在对PDCCH进行解调和解码%使用类似的资源提取和解码函数%已显示为BCH和CFI接收pdcchIndices = ltePDCCHIndices (enb);%获取PDCCH索引[pdcchRx, pdcchhst] = lteExtractResources(pdcchIndices, rxsubframe, hst); / /输出译码PDCCH并绘制星座图[dciBits, pdcchSymbols] = ltePDCCHDecode(enb, pdcchRx, pdcchest, nest);步骤(pdcchConstDiagram pdcchSymbols);% PDCCH盲搜索系统信息(SI)和DCI解码。LTE系统工具箱提供了PDCCH的完全盲搜索%查找具有指定RNTI的任何DCI消息,在本例中为% SI-RNTI。流(' pdch search for SI-RNTI…\n\n');pdcch =结构(“RNTI”, 65535);dci = ltePDCCHSearch(enb, pdcch, dciBits);%在pcch中搜索DCI结束%如果DCI已解码,则继续解码PDSCH / DL-SCH如果~isempty(dci) dci = dci{1};流('DCI消息与SI-RNTI:\n');disp (dci);%从DCI获取PDSCH配置[pdsch, trblklen] = hPDSCHConfiguration(enb, dci, pdcch.RNTI);pdsch。NTurboDecIts = 5;流(DCI解码后的PDSCH设置:\n);disp (pdsch);% PDSCH解调和DL-SCH译码恢复SIB位。%现在解析DCI消息以给出%对应的PDSCH携带SIB1,对PDSCH进行解调和%最后接收到的位被DL-SCH解码以产生SIB1%。流(“解码SIB1。\ n \ n”);%获取PDSCH索引[pdschIndices,pdschIndicesInfo] = ltePDSCHIndices(enb, pdsch, pdsch. prbset);[pdschRx, pdschHest] = lteExtractResources(pdschIndices, rxsubframe, hest); / /设置全局帧%解码PDSCH[dlschBits,pdschSymbols] = ltePDSCHDecode(enb, pdsch, pdschRx, pdschHest, nest); / /将pdsch解码解码DL-SCH与软缓冲输入/输出HARQ结合如果~ isempty (decState)流(“与之前的传输重组。”);结束[sib1, crc, decState] = lteDLSCHDecode(enb, pdsch, trblklen, dlschBits, decState);%计算PDSCH EVMencoded = lteDLSCH(enb, pdsch, pdschIndicesInfo. txt)。G, sib1);redd = ltePDSCH(enb, pdsch, recoded); / /重新编码[~,refSymbols] = ltePDSCHDecode(enb, pdsch, remod);释放(pdschEVM);[rmsevm,peakevm] = step(pdschEVM, refSymbols{1}, pdschSymbols{1});流('PDSCH RMS EVM: %0.3f%%\n', rmsevm);流('PDSCH Peak EVM: %0.3f%%\n\n', peakevm);流(“SIB1 CRC: % d \ n”, crc);如果fprintf == 0 (“成功SIB1复苏。\ n \ n”);其他的流(“SIB1解码失败。\ n \ n”);结束其他的%表示DCI解码失败流(“DCI解码失败。\ n \ n”);结束%更新信道估计图图(channelFigure);冲浪(abs(命令(:,:,1,1)));hSIB1RecoveryExamplePlots (channelFigure);channelfigel . currentaxis . xlim = [0 size(hst,2)+1];channelfigel . currentaxis . ylim = [0 size(hst,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 pdch搜索SI-RNTI…DCI message with SI-RNTI: DCIFormat: 'Format1A' CIF: 0 AllocationType: 0 Allocation: [1x1 struct] ModCoding: 5 HARQNo: 0 NewData: 0 RV: 3 TPCPUCCH: 0 TDDIndex: 0 PDSCH settings after DCI decoding: RNTI: 65535 PRBSet: [6x1 uint64] NLayers: 2 Modulation: {'QPSK'} RV: 3 TxScheme: 'TxDiversity' NTurboDecIts: 5 decoding SIB1…PDSCH RMS EVM: 14.875% PDSCH Peak EVM: 47.133% SIB1 CRC: 0 SIB1恢复成功。-------------------------------------------------- SIB1解码帧110  -------------------------------------------------- 解码CFI……解码的CFI值:3 pdch搜索SI-RNTI…DCI message with SI-RNTI: DCIFormat: 'Format1A' CIF: 0 AllocationType: 0 Allocation: [1x1 struct] ModCoding: 5 HARQNo: 0 NewData: 0 RV: 1 TPCPUCCH: 0 TDDIndex: 0 PDSCH settings after DCI decoding: RNTI: 65535 PRBSet: [6x1 uint64] NLayers: 2 Modulation: {'QPSK'} RV: 1 TxScheme: 'TxDiversity' NTurboDecIts: 5 decoding SIB1…与之前的传播重组。PDSCH RMS EVM: 15.589% PDSCH Peak EVM: 37.974% SIB1 CRC: 0 SIB1恢复成功。

第一个OFDM符号的信道估计

在这个例子中,MIMO传输是在两个发射天线和两个接收天线之间的四条链路上进行的。下面的图提供了估计的信道系数的快照。

图(“位置”,[0 0 800 600]) plot(abs(hest(: 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 size(hst,1)+1 0 m*1.3]) title(第一个OFDM符号的信道估计)包含(“副载波指数”) ylabel (“估计水道系数的大小”)传说(“TX1 RX1”“TX1 RX2”...“TX2 RX1”“TX2 RX2”...“位置”“东北”

最大化性能的技巧

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

  • 这个例子中的Double DecimationFactor和InterpolationFactorsdruLTE2x2SIB1Tx.m

  • 在运行之前以-nodesktop模式启动MATLABsdruLTE2x2SIB1Tx.m

  • 如果使用一台电脑和两台B210收音机,请勿将其连接到相邻的USB端口

附录

这个例子使用了以下帮助函数:

版权声明

Universal Software Radio Peripheral®和USRP®是美国国家仪器公司的商标。