5 g NR波形采集和分析
这个例子展示了如何生成一个5 g NR (NR-TM)波形的测试模型5 g波形发生器(5 g工具箱)应用程序和下载生成的波形Keysight™矢量信号发生器的使用仪器控制工具箱™软件无线传输。然后抓住了无线信号传播的例子使用Keysight信号分析仪,分析信号在MATLAB®。
介绍
这个示例中生成一个5 g NR-TM波形使用5 g波形发生器应用程序,下载和波形传送到Keysight矢量信号发生器,然后使用Keysight接收波形信号分析仪在MATLAB进行波形分析。这个图表显示了通用工作流。
需求
要运行这个示例,您需要这些工具:
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在基带波形清晰可见。
发射无线信号
下载生成的信号到射频信号发生器在一个支持的通信接口(需要仪器控制工具箱)。万博1manbetx应用程序会自动找到了信号发生器通过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
的函数hNRReferenceWaveformGenerator
helper文件中提取特定的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%
挣值管理总体平均总体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;结束结束结束