主要内容

使用软件定义无线电的LTE接收机

本示例介绍如何从无线LTE下行链路(DL)波形中恢复MIB (master information block)和系统基本信息。本例还展示了如何使用具有单个或多个天线的软件定义无线电(SDR)接收LTE波形。

简介

sdr_receive_diagram_published.png

在LTE中,MIB由BCH (broadcast channel)承载。MIB提供基本的单元范围设置,包括系统带宽和帧数。本例从捕获的帧中解码MIB,然后解码每个子帧的控制格式指示器(CFI),它将控制区域的大小通知用户设备(UE)。然后,示例继续解码物理下行链路控制通道(PDCCH)。UE需要将这些步骤与单元相关联。有关显示单元搜索和系统信息获取过程的示例,请参见Cell搜索,MIB和SIB1恢复(LTE工具箱)

LTE传输中,BCH位于中间的6个资源块中。因此,无论单元带宽如何,捕获的波形带宽只需为1.92 MHz即可解码MIB。尽管MIB只存在于帧的子帧0中,但本例将解调整个帧以进行可视化和分析。

本例支持用于LTE波形捕获金宝app的这些sdr。

  • ADALM-Pluto来自模拟设备通信工具箱支持包ADALM-Pluto无线电金宝app

  • USRP™嵌入式系列无线电的通信工具箱支持包中的USRP™E310/E312金宝app

  • Xilinx®Zynq®基于无线电的通信工具箱支持包中的AD936x/FMCOMMS5金宝app

  • USRP™无线电通信工具箱支持包中的USRP™N300/N310/N320/N321/B200/B210/X300/X310金宝app

或者,如果SDR不可用于波形捕获,则该示例支持导入具有预捕获波形的文件。金宝app

示例设置

在运行示例之前,请确保已经安装了打算使用的SDR的适当支持包,并且已经设置了硬件。金宝app

ReceiveOnSDR字段rxsim结构确定该示例是从空中接收波形还是从MAT文件导入波形。

rxsim。ReceiveOnSDR =

如果使用SDR接收LTE波形,而SDR未检测到LTE波形,则可以使用使用软件定义无线电的LTE发射机(LTE工具箱)

类中定义的参数rxsim结构控制接收机。接收机的采样率为1.92 MHz,这是捕获LTE带宽为6rbs的标准采样率。6rbs相当于1.4 MHz的信号带宽。若要捕获更多帧,请增加rxsim。NumCaptures参数值。默认情况下,该示例在每次执行时捕获5个LTE帧。

中指定预捕获波形的文件名文件名变量。确认MAT文件包含numCaptures变量,radioSampleRate变量,和capturedData变量。的每一列captureData的第三个维度表示一个捕获天线captureData表示捕获的数量。

文件名=“capturedLTERCDLWaveform.mat”

如果您选择ReceiveOnSDR字段rxsim结构,配置接收SDR所需的变量。如果您使用的SDR设备能够多通道接收,请尝试增加rxsim。NumAntennas兑换为你的特别提款权所金宝app支持的价值。

如果rxsim。ReceiveOnSDR rxsim。SDRDeviceName =“AD936x”% SDR用于接收波形rxsim。RadioIdentifier =“192.168.3.2”用于标识无线电的值,例如IP地址、USB端口或序列号rxsim。RadioSampleRate =1.92 e6配置为1.92e6 Hz捕获带宽rxsim。RadioCenterFrequency =2450000000中心频率(以Hz为单位)rxsim。FramesPerCapture =8要捕获的连续LTE帧数rxsim。NumCaptures =1%执行SDR的捕获次数rxsim。NumAntennas =1%接收天线个数导出参数captureTime = (rxsim.)FramesPerCapture + 1)* 10e-3;%将捕获帧增加1,以说明完整帧未被捕获其他的rx = load(fileName);rxsim。numcapturing = rx. numcapturing;rxsim。RadioSampleRate = rx.radioSampleRate;结束

接收机设计:系统架构

按照以下步骤了解LTE接收器的功能。

  1. 如果使用SDR,则捕获LTE信号的适当帧数。

  2. 确定并修正接收信号的频率偏移。

  3. 通过执行盲单元格搜索确定单元格标识。

  4. 将捕获的信号同步到LTE帧的开始。

  5. 利用OFDM解调接收信号提取LTE资源网格。

  6. 对接收到的信号进行信道估计。

  7. 通过解码每个捕获帧的MIB来确定单元范围的设置。

  8. 解码捕获信号中每个子帧的CFI和PDCCH。

本例绘制了捕获波形的功率谱密度,并显示了接收到的LTE资源网格、估计通道和每帧均衡的PBCH符号的可视化。

配置SDR硬件

此示例使用与所选无线电相关的对象与无线电硬件通信。例如,AD936x无线电使用comm.SDRRxAD936x(Xilinx zynq无线电通信工具箱支持包)金宝app对象。

如果rxsim。ReceiveOnSDR如果(rxsim匹配。SDRDeviceName, (“AD936x”“FMCOMMS5”“冥王星”“E3xx”) sdrReceiver = sdrrx(...rxsim。SDRDeviceName,...CenterFrequency = rxsim。RadioCenterFrequency,...BasebandSampleRate = rxsim.RadioSampleRate);如果(rxsim匹配。SDRDeviceName, (“AD936x”“FMCOMMS5”“E3xx”sdrReceiver])。ShowAdvancedProperties = true;sdrReceiver。BypassUserLogic = true;sdrReceiver。IPAddress = rxsim.RadioIdentifier;其他的sdrReceiver。RadioID = rxsim.RadioIdentifier;结束其他的%表示USRP sdrsdrReceiver = com . sdrureceiver (...= rxsim平台。SDRDeviceName,...CenterFrequency = rxsim.RadioCenterFrequency);[sdrReceiver。MasterClockRate sdrReceiver。DecimationFactor] =...hGetUSRPRateInformation (rxsim.SDRDeviceName rxsim.RadioSampleRate);如果(rxsim匹配。SDRDeviceName, (“B200”“B210”])根据需要更改USRP B200/B210的序列号sdrReceiver。SerialNum = rxsim.RadioIdentifier;其他的sdrReceiver。IPAddress = rxsim.RadioIdentifier;结束sdrReceiver。EnableBurstMode = true;sdrReceiver。SamplesPerFrame = 10e-3*rxsim.RadioSampleRate;sdrReceiver。NumFramesInBurst = rxsim。FramesPerCapture + 1;%将捕获帧增加1,以说明完整帧未被捕获结束sdrReceiver。OutputDataType =“替身”;numSamplesToCapture = ceil(captureTime*rxsim.RadioSampleRate);sdrReceiver。ChannelMapping = 1:rxsim.NumAntennas;结束

设置频谱分析仪显示接收到的波形。

光谱分析仪(...SampleRate = rxsim。RadioSampleRate,...SpectrumType =“能量密度”...Title =《基带LTE信号频谱》...YLabel =“功率谱密度”);

LTE的设置

enb结构包含解码MIB的参数。该示例假设采用频分双工(FDD)、正常循环前缀长度和四个单元特定的参考端口(CellRefP) MIB解码,因为这些值是未知的。的实际值由MIB提供CellRefP

enb。DuplexMode =“FDD”;enb。CyclicPrefix =“正常”;enb。CellRefP = 4;

信号的采样率控制捕获的带宽和波形中RBs的数量。该示例使用一个查找表来确定RBs的数量。

%带宽:{1.4 MHz, 3 MHz, 5 MHz, 10 MHz, 20 MHz}SampleRateLUT = [1.92 3.84 7.68 15.36 30.72]*1e6;Ndlrblut = [6 15 25 50 100];enb。NDLRB = NDLRBLUT(SampleRateLUT==rxsim.RadioSampleRate);如果rxsim。ReceiveOnSDR流(\nSDR硬件采样率配置为捕获%d个LTE RBs.\n", enb.NDLRB);结束

cec结构控制信道估计参数。为了最小化噪声对先导估计的影响,使用保守的9 × 9先导平均窗口。

cec。FreqWindow = 9;资源元素的频率平均窗口(REs)cec。TimeWindow = 9;在REs中平均窗口时间%cec。InterpType =“立方”三次插值百分比cec。PilotAverage =“UserDefined”先导平均法cec。InterpWindow =“中心”插值开窗方法cec。InterpWinSize = 3;同时插值最多3个子帧

信号捕获与处理

为了捕获和解码突发的LTE帧,示例使用了循环。对于每个捕获的帧,示例将解码MIB,如果解码成功,它将解码每个子帧的CFI和PDCCH。对于每个成功解码的子帧,示例显示信道估计和均衡的PDCCH符号。

为均衡PDCCH符号设置星座图查看器,并为信道估计图设置图形句柄。

星座图(“标题”均衡PDCCH符号);channelEstimatePlot = figure(“可见”“关闭”);

存储默认解码参数。

enbDefault = enb;samplesPerFrame = 10e-3*rxsim.RadioSampleRate;% LTE帧周期为10毫秒

执行LTE接收机处理。

I = 1:rxsim。NumCaptures设置LTE默认参数enb = enbDefault;% rx波形包含|rxsim。FramesPerCapture|连续个数%帧值的连续基带LTE样本。如果rxsim。ReceiveOnSDR% SDR捕获流(“开始一个新的射频捕获。”) rx波形=捕获波形(sdrReceiver,numSamplesToCapture);其他的rx波形= rx.capturedData(:,:,i);结束显示捕获脉冲的功率谱密度spectrumScope (rxWaveform);释放(spectrumScope);执行频率偏移校正frequencyOffset = lteFrequencyOffset(enb, rx波形);rx波形= lteFrequencyCorrect(enb, rx波形,frequencyOffset);流("修正了%g Hz的频率偏移。\n"frequencyOffset)%执行盲小区搜索,获取小区身份和定时采用“PostFFT”二次同步信号(SSS)检测提高速度的方法cellSearch。SSSDetection =“PostFFT”;cellSearch。MaxCellCount = 1;[NCellID,frameOffset] = lteCellSearch(enb, rx波形,cellSearch);流("检测到单元格标识%i.\n", NCellID);enb。NCellID = NCellID;%来自lteCellSearch同步捕获的样本到LTE帧的开始,并修剪%不完整框架的一部分的任何样本。rx波形= rx波形(frameOffset+1:end,:);tailSamples = mod(length(rx波形),samplesPerFrame);rx波形= rx波形(1:end-tailSamples,:);enb。NSubframe = 0;% OFDM解调rxGrid = lteOFDMDemodulate(enb, rx波形);执行信道估计[hest,nest] = lteDLChannelEstimate(enb,cec,rxGrid);sfDims = lteResourceGridSize(enb);Lsf = sfDims(2);每子帧的OFDM符号的百分比LFrame = 10*Lsf;每帧OFDM符号的百分比numFullFrames = length(rx波形)/samplesPerFrame;对于每一帧,解码MIB和CFI帧= 0:(numFullFrames-1) fprintf(\n在burst中执行帧%i的MIB解码…\n...框架+ 1,numFullFrames)从接收到的资源网格的每一帧中提取子帧0%和渠道估算。enb。NSubframe = 0;rxsf = rxGrid(:,frame*LFrame+(1:Lsf),:);hestsf = hest(:,frame*LFrame+(1:Lsf),:,:);% PBCH解调。提取对应于PBCH的REs%接收网格和信道估计网格解调。假设% 4细胞特异性参考信号用于PBCH解码%该值未知。enb。CellRefP = 4;pbchIndices = ltePBCHIndices(enb);[pbchRx,pbchHest] = lteExtractResources(pbchIndices,rxsf,hestsf);[~,~,nfmod4,mib,CellRefP] = ltePBCHDecode(enb,pbchRx, pbchest,nest);%如果PBCH解码不成功,请执行for-的下一次迭代%循环如果~ CellRefP流("帧未检测到PBCH = %d.\n"、框架);继续结束% PBCH解码成功后,解码MIB,获取系统%信息,包括系统带宽enb = ltimib (mib,enb);enb。CellRefP = CellRefP;% From ltePBCHDecode结合函数输出的nfmod4值% ltePBCHDecode,因为从MIB建立的NFrame值为系统帧数对4的模。enb。NFrame = enb.NFrame+nfmod4;流(" MIB解码成功。\n")流("帧号:%d.\n", enb.NFrame);eNodeB传输带宽可以大于%捕获带宽,因此限制处理带宽enb。NDLRB = min(enbDefault.NDLRB,enb.NDLRB);处理帧内的子帧Sf = 0:9提取子帧enb。NSubframe = sf;rxsf = rxGrid(:,frame*LFrame+sf*Lsf+(1:Lsf));使用正确的数量进行信道估计% CellRefP[hestsf,nestsf] = lteDLChannelEstimate(enb,cec,rxsf);物理CFI信道(PCFICH)解调提取REs%对应于接收网格中的PCFICH解调的%信道估计。pcfichIndices = ltePCFICHIndices(enb);[pcfichRx, pcfichest] = lteExtractResources(pcfichices,rxsf,hestsf);[cfiBits,recsym] = ltePCFICHDecode(enb,pcfichRx, pcfichest,nestsf);% CFI解码enb。CFI = lteCFIDecode(cfiBits);流("子帧%d,已解码的CFI值:%d.\n"科幻,enb.CFI);% PDCCH解调。提取对应于PDCCH的REs%从接收的网格和信道估计解调。pdcchIndices = ltePDCCHIndices(enb);[pdcchRx,pdcchHest] = lteExtractResources(pdcchIndices,rxsf,hestsf);[pdcchBits,pdcchEq] = ltePDCCHDecode(enb,pdcchRx, pdcchest,nestsf);释放(星座);星座(pdcchEq);结束绘制CellRefP 0和接收天线之间的信道估计focalFrameIdx = frame*LFrame+(1:LFrame);图(channelEstimatePlot);focalFrameIdx冲浪(abs(命令(:,1,1)));包含(OFDM符号索引);ylabel (“副载波指数”);zlabel (“级”);标题(《信道幅值频率响应估计》);结束结束

修正了-2.48294 Hz的频率偏移。
检测到一个17号的单元码。
在burst中执行帧1 / 4的MIB解码…
成功解码MIB。
帧数:705。
子帧0,解码后的CFI值:3。子帧1,解码后的CFI值:3。子帧2,解码后的CFI值:3。子帧3,解码后的CFI值为3。子帧4,解码后的CFI值:3。子帧5,解码后的CFI值:3。子帧6,解码后的CFI值:3。子帧7,解码后的CFI值:3。子帧8,解码后的CFI值:3。子帧9,解码后的CFI值:3。
在burst中执行帧2 / 4的MIB解码…
成功解码MIB。
帧数:706。
子帧0,解码后的CFI值:3。子帧1,解码后的CFI值:3。子帧2,解码后的CFI值:3。子帧3,解码后的CFI值为3。子帧4,解码后的CFI值:3。子帧5,解码后的CFI值:3。子帧6,解码后的CFI值:3。子帧7,解码后的CFI值:3。子帧8,解码后的CFI值:3。子帧9,解码后的CFI值:3。
在burst中对帧3 / 4进行MIB解码…
成功解码MIB。
帧数:707。
子帧0,解码后的CFI值:3。子帧1,解码后的CFI值:3。子帧2,解码后的CFI值:3。子帧3,解码后的CFI值为3。子帧4,解码后的CFI值:3。子帧5,解码后的CFI值:3。子帧6,解码后的CFI值:3。子帧7,解码后的CFI值:3。子帧8,解码后的CFI值:3。子帧9,解码后的CFI值:3。
在burst中执行帧4 / 4的MIB解码…
成功解码MIB。
帧数:700。
子帧0,解码后的CFI值:3。子帧1,解码后的CFI值:3。子帧2,解码后的CFI值:3。子帧3,解码后的CFI值为3。子帧4,解码后的CFI值:3。子帧5,解码后的CFI值:3。子帧6,解码后的CFI值:3。子帧7,解码后的CFI值:3。子帧8,解码后的CFI值:3。子帧9,解码后的CFI值:3。

{

如果rxsim。ReceiveOnSDR释放(sdrReceiver);结束释放(星座);释放星座图对象

进一步的探索

  • 传输标准兼容的LTE波形使用使用软件定义无线电的LTE发射机(LTE工具箱).然后,您可以使用此示例解码波形。在相应的示例中,尝试更改单元格标识和初始帧数,并在本例中观察检测到的单元格标识和帧数。如果使用受支持的多通道金宝appSDR,请尝试在附带示例中增加天线数量,以可视化使用多通道传输/接收的好处。

  • 本例仅解码基本系统信息。有关如何健壮地解码更多物理通道的示例,请参见Cell搜索,MIB和SIB1恢复(LTE工具箱)的例子。

特别提款权故障排除

本地函数

函数波形=捕获波形(sdrReceiver,numSamplesToCapture)返回给定的复值的列向量% srreceiver对象和一个标量NUMSAMPLESTOCAPTURE值。对于com . sdrureceiver对象,使用突发捕获技术来%获取波形如果isa (sdrReceiver“comm.SDRuReceiver”)波形=复杂(零(numSamplesToCapture,长度(sdrReceiver.ChannelMapping)));samplesPerFrame = sdrReceiver.SamplesPerFrame;i = 1: srdrreceiver。NumFramesInBurst波形(samplesPerFrame*(i-1)+(1:samplesPerFrame),:) = srdrreceiver ();结束其他的波形=捕获(sdrReceiver,numSamplesToCapture);结束结束