主要内容

5 g NR波形采集和分析

这个例子展示了如何生成一个5 g NR (NR-TM)波形的测试模型5 g波形发生器(5 g工具箱)应用程序和下载生成的波形Keysight™矢量信号发生器的使用仪器控制工具箱™软件无线传输。然后抓住了无线信号传播的例子使用Keysight信号分析仪,分析信号在MATLAB®。

介绍

这个示例中生成一个5 g NR-TM波形使用5 g波形发生器应用程序,下载和波形传送到Keysight矢量信号发生器,然后使用Keysight接收波形信号分析仪在MATLAB进行波形分析。这个图表显示了通用工作流。

5 g_ict_workflow.png

需求

要运行这个示例,您需要这些工具:

  • Keysight E4438C ESG矢量信号发生器

  • Keysight N9030A PXA信号分析仪

使用5 g波形发生器生成基带波形应用

在MATLAB应用程序选项卡上,单击5 g波形发生器应用程序。

波形类型部分中,点击NR测试模型。应用在左边的窗格中,您可以设置的参数选定的波形。对于这个示例:

  • 频率范围作为FR1 (410 MHz - 7.125 GHz)

  • 测试模型作为NR-FR1-TM3.1(完整的乐队,统一64 QAM)

  • 通道带宽(MHz)作为10

  • 副载波间距(赫兹)作为30.

  • 双工模式作为FDD

  • 子帧作为10

在应用程序将来发布,点击生成

%设置NR-TM接收机的参数nrtm =“NR-FR1-TM3.1”;%参考通道bw =“10 mhz”;%通道带宽scs =“30千赫”;%副载波间距dm =“FDD”;%双工模式

这个图显示了一个10 MHz 5 g NR在基带波形清晰可见。

发射无线信号

下载生成的信号到射频信号发生器在一个支持的通信接口(需要仪器控制工具箱)。金宝app应用程序会自动找到了信号发生器通过TCP / IP连接的接口。在发射机标签的应用,选择安捷伦/ Keysight信号发生器计划司机列表。设置中心频率(赫兹)参数3.4 e9输出功率(dBm)参数-15年。应用自动获得基带采样率从生成的波形。开始传播,点击传输在将来发布。

从一个信号读取智商数据分析仪/ TCP / IP

读取同相正交(智商)数据到MATLAB进行分析,配置Keysight N9030A信号分析仪使用仪器控制工具箱软件。

定义基于信号的仪器配置参数测量。

%频谱分析仪的设置参数centerFrequency = 3.4 e9;sampleRate = 15.36 e6;measurementTime = 20 e - 3;mechanicalAttenuation = 0;% dBstartFrequency = 3.39 e9;stopFrequency = 3.41 e9;resolutionBandwidth = 220年e3;videoBandwidth = 220000;

连接到频谱分析仪之前执行这些步骤。

  • 找到的资源ID Keysight N9030A信号分析仪。

  • 连接到仪器使用虚拟仪器软件体系结构(签证)接口。

  • 调整输入缓冲区大小将仪器返回的数据。

  • 设置超时,允许足够的时间测量和数据传输。

foundVISA = visadevlist;resourceID = foundVISA (foundVISA。模型= =“N9030A”、:).ResourceName;resourceID = resourceID(包含(resourceID,“N9030A”));%提取resourceID包含“N9030A”sigAnalyzerObj = visadev (resourceID);sigAnalyzerObj。ByteOrder =“大端法”;sigAnalyzerObj。超时= 20;

重置仪器到一个已知状态使用适当的标准命令可编程仪器(计划)。查询仪器标识,以确保正确的仪器连接。

writeline (sigAnalyzerObj“* RST”);instrumentInfo = writeread (sigAnalyzerObj,“* IDN ?”);流(“仪器识别信息:% s”,instrumentInfo);
乐器识别信息:安捷伦科技、N9030A US00071181 A.14.16

x系列信号和频谱分析仪进行智商测试以及光谱测量。在本例中,您获得时域智商数据,使用MATLAB可视化数据,并执行信号分析获得的数据。计划将命令配置工具和定义的格式数据传输测量完成后。

%设置信号分析仪模式基本智商模式writeline (sigAnalyzerObj”:仪器:选择基本”);%设置中心频率writeline (sigAnalyzerObj strcat (”:意义:频率:中心”num2str (centerFrequency)));%设置捕获采样率writeline (sigAnalyzerObj strcat (”:意义:波形:SRATe”num2str (sampleRate)));%关掉平均writeline (sigAnalyzerObj”:意义:波形:断言“);%设置后频谱分析仪测量一个触发线高writeline (sigAnalyzerObj”:INIT:续了”);%设置触发外部源1正斜率触发writeline (sigAnalyzerObj”:触发:波形:立即源”);writeline (sigAnalyzerObj”:触发:行:坡积极”);%设置测量需要的时间writeline (sigAnalyzerObj strcat (”:波形:理念:时间”num2str (measurementTime)));%关掉电衰减writeline (sigAnalyzerObj”:意义:力量:射频:EATTenuation:国家了”);%设置机械衰减水平writeline (sigAnalyzerObj strcat (”:意义:力量:射频:衰减”num2str (mechanicalAttenuation)));% IQ信号等汽车writeline (sigAnalyzerObj”:意义:电压:智商:范围:汽车”);%设置返回的数据的字节顺序writeline (sigAnalyzerObj”:格式:边境正常”);%设置返回的数据的格式writeline (sigAnalyzerObj”:格式:数据真实,64”);

触发仪器测量。等待测量操作完成,然后记录波形。在处理数据之前,把我从交叉和Q组件从仪器接收到的数据并创建一个复杂的矢量在MATLAB。

%触发并启动测量工具writeline (sigAnalyzerObj“*丹”);writeline (sigAnalyzerObj”:启动:波形”);%等到测量操作完成measureComplete = writeread (sigAnalyzerObj,“* OPC ?”);%读取IQ数据writeline (sigAnalyzerObj”:阅读:WAV0 ?”);data = readbinblock (sigAnalyzerObj“替身”);%分离数据和构建复杂的智商向量同相的=数据(1:2:结束);交=数据(2:2:结束);rxWaveform =同相的+ 1我*交;

捕获和显示最近获取的数据信息。

writeline (sigAnalyzerObj”:获取:WAV1 ?”);signalSpec = readbinblock (sigAnalyzerObj,“替身”);%显示测量信息captureSampleRate = 1 / signalSpec (1);流(“采样率(Hz) = % s”num2str (captureSampleRate));
采样率(Hz) = 15360000
流(“点读的数量= % s”num2str (signalSpec (4)));
点读= 307201
流(“最大价值的信号(dBm) = % s”num2str (signalSpec (6)));
马克思的价值信号(dBm) = -43.1954
流(“最小值的信号(dBm) = % s”num2str (signalSpec (7)));
最小值的信号(dBm) = -104.8862

情节获得的频谱波形确认接收信号的带宽。

%确保rxWaveform是一个列向量如果~ iscolumn (rxWaveform) rxWaveform = rxWaveform。”;结束%画出了信号的功率谱密度(PSD)spectrumPlotRx =简介;spectrumPlotRx。SampleRate = captureSampleRate;spectrumPlotRx。SpectrumType =“能量密度”;spectrumPlotRx。YLimits = (-140 - -90);spectrumPlotRx。YLabel =“PSD”;spectrumPlotRx。Title =“接收信号频谱:10 MHz 5 g NR-TM波形”;spectrumPlotRx (rxWaveform);

切换频谱分析仪的仪器模式和比较光谱视图中生成MATLAB在信号分析仪与视图。使用额外的计划将命令配置仪器测量和显示设置。

%切换回频谱分析仪的观点writeline (sigAnalyzerObj”:仪器:选择山”);%设置机械衰减水平writeline (sigAnalyzerObj strcat (”:意义:力量:射频:衰减”num2str (mechanicalAttenuation)));%设置中心频率,RBW, VBWwriteline (sigAnalyzerObj strcat (”:意义:频率:中心”num2str (centerFrequency)));writeline (sigAnalyzerObj strcat (”:意义:频率:开始”num2str (startFrequency)));writeline (sigAnalyzerObj strcat (”:意义:频率:停止”num2str (stopFrequency)));writeline (sigAnalyzerObj strcat (”:意义:带宽:决议”num2str (resolutionBandwidth)));writeline (sigAnalyzerObj strcat (”:意义:带宽:视频”num2str (videoBandwidth)));%在频谱分析仪上启用连续测量writeline (sigAnalyzerObj”:INIT:续上”);%开始接收无线信号writeline (sigAnalyzerObj“*丹”);

仪器的清理,清除仪器连接:

清晰的sigAnalyzerObj;

停止5 g NR-TM波形传播,仪器部分应用程序将来发布,点击停止传输

执行测量收到5 g波形

使用generateWaveform的函数hNRReferenceWaveformGeneratorhelper文件中提取特定的TM的波形信息。

tmwavegen = hNRReferenceWaveformGenerator (scs nrtm, bw, dm);[~,tmwaveinfo resourcesInfo] = generateWaveform (tmwavegen);

粗频率偏移补偿使用解调参考符号(DM-RS)

在增量寻找补偿1千赫到100千赫。

frequencyCorrectionRange = -100 e3:1e3:100e3;[rxWaveform, coarseOffset] = DMRSFrequencyCorrection (rxWaveform、captureSampleRate frequencyCorrectionRange, tmwavegen, resourcesInfo);流(“粗频率偏移= %。0 f赫兹”coarseOffset)
粗频率偏移= 0 Hz

使用DM-RS精细频率偏移补偿

寻找补偿5赫兹到100赫兹的增量

frequencyCorrectionRange = 100:5:100;[rxWaveform, fineOffset] = DMRSFrequencyCorrection (rxWaveform、captureSampleRate frequencyCorrectionRange, tmwavegen, resourcesInfo);流(“好频率偏移= %。1 f赫兹”fineOffset)
细频率偏移= -25.0赫兹

维生素与测量

使用hNRPDSCHEVM函数来分析波形。这个函数执行这些步骤。

  • 同步DM-RS在一帧频分双工(FDD)(两帧时分双工(TDD))

  • 解调接收到的波形

  • 估计通道

  • 使得车内外的符号

  • 常见的相位误差的估计和补偿(CPE)

定义的配置设置hNRPDSCHEVM函数。

cfg =结构();cfg。PlotEVM = true;%情节维生素与统计cfg。DisplayEVM = true;%打印维生素与统计cfg。标签= nrtm;%将TM捕获的波形cfg。SampleRate = captureSampleRate;%使用采样率在捕获[evmInfo, eqSym refSym] = hNRPDSCHEVM (tmwavegen.Config、rxWaveform cfg);
维生素与统计为BWP idx: 1 RMS维生素,维生素与峰值,槽0:5.141 - 29.966% RMS维生素,维生素与峰值,插槽1:5.117 - 28.236% RMS维生素,维生素与峰值,槽2:5.129 - 23.172% RMS维生素,维生素,槽3:5.118 - 28.065% RMS维生素,维生素,槽4:5.218 - 29.877% RMS维生素,维生素,槽5:5.136 - 27.957% RMS维生素,维生素,槽6:5.179 - 34.915% RMS维生素,维生素,槽7:5.220 - 30.278% RMS维生素,维生素,槽8:5.204 - 30.946% RMS维生素,维生素,槽9:5.089 - 36.078% RMS维生素,维生素,槽10:5.063 - 26.745% RMS维生素,维生素,槽11:5.140 - 33.408% RMS维生素,维生素,槽12:5.101 - 31.880% RMS维生素,维生素,插槽13:5.017 - 24.540% RMS维生素,维生素,插槽14:5.068 - 26.508% RMS维生素,维生素,槽15:5.180 - 29.606% RMS维生素,维生素,槽16:5.259 - 29.391% RMS维生素,维生素,槽17:5.234 - 30.314% RMS维生素,维生素,槽18:5.229 - 27.510% RMS维生素,维生素,槽19:5.136 - 30.313%平均均方根维生素与帧0:5.149%

挣值管理图都(%)包含一个坐标轴对象。坐标轴对象与标题维生素与资源网格,BWP idx: 1包含一个对象类型的表面。

挣值管理总体平均总体RMS维生素:5.149%峰值都= 36.0778%

测量表明,该解调接收的波形是成功的。直流分量的干扰频谱分析仪的直流副载波导致高维生素值测量。

本地函数

这些功能帮助5 g处理接收到的波形。

函数[correctedWaveform, appliedFrequencyCorrection] = DMRSFrequencyCorrection(波形、sampleRate frequencyCorrectionRange, tmwavegen, resourcesInfo)%波形,波形修正。需要一个资料片列向量。% sampleRate——波形的采样率% frequencyCorrectioRange——频率范围和粒度%校正是检查% tmwavegen和resourcesInfo generateWaveform方法的输出[pdschArray, ~,航母]= hListTargetPDSCHs (tmwavegen.Config resourcesInfo.WaveformResources);bwpCfg = tmwavegen.Config.BandwidthParts {1};nSlots = carrier.SlotsPerFrame;%生成参考网格生成10 ms(一帧)。这个表格%只包含DM-RS和用于同步。refGrid = referenceGrid(载体,bwpCfg、pdschArray nSlots);%频率补偿适用于指定的波形% freuqnecyCorrectionRange。nSamples =(0:长度(波形)1)';frequencyShift =(2 *π* frequencyCorrectionRange。* nSamples)。/ sampleRate;%每一列表示一个偏移量波形。offsetWaveforms =波形。* exp (1 j * frequencyShift);(~,mag) = nrTimingEstimate (offsetWaveforms carrier.NSizeGrid,carrier.SubcarrierSpacing、nSlots refGrid,“SampleRate”,sampleRate);%找到的频率DM-RS相关性最大。[~,指数]= max (max (mag));appliedFrequencyCorrection = frequencyCorrectionRange(指数);correctedWaveform = offsetWaveforms(:,指数);结束函数refGrid = referenceGrid(载体,bwpCfg、pdschArray nSlots)%创建一个参考网格所需数量的插槽。网格% pdschArray中指定包含DM-RS符号。这个函数%返回REFGRID维度K-by-S-by-L, K的数量%副载波的大小。NSizeGrid, S是符号的数量%跨越nSlots, L是层的数量。nSubcarriers =载体。NSizeGrid * 12;L = carrier.SymbolsPerSlot * nSlots;%的OFDM符号参考网格nLayers =大小(pdschArray (1) .Resources .ChannelIndices (1), 2);bwpStart = bwpCfg.NStartBWP;bwpLen = bwpCfg.NSizeBWP;refGrid = 0 (nSubcarriers, L, nLayers);%空网格bwpGrid = 0 (bwpLen * 12, L, nLayers);rbsPerSlot = bwpLen * 12 * carrier.SymbolsPerSlot;%填充DM-RS符号参考网格中所有插槽。的地方% bwpGrid在载体网格情况下(在适当的位置)% BWP大小是不一样的,承运人网格slotIdx =载体。NSlot + (0: nSlots-1) [~, ~, dmrsIndices dmrsSymbols] = hSlotResources (pdschArray slotIdx);如果~ isempty (dmrsIndices)layerIdx = 1: nLayers如果layerIdx < =大小(dmrsIndices, 2) dmrsIndices (:, layerIdx) = dmrsIndices (:, layerIdx) - rbsPerSlot * (layerIdx 1) + (L * bwpLen * 12 * (layerIdx-1));bwpGrid (dmrsIndices (:, layerIdx) + (slotIdx-carrier.NSlot) * rbsPerSlot) = dmrsSymbols (:, layerIdx);结束结束refGrid (12 * bwpStart + 1:12 * (bwpStart + bwpLen):,:) = bwpGrid;结束结束结束