主要内容

5G NR波形采集与分析

该示例演示了如何使用5 g波形发生器(5 g工具箱)app,并将生成的波形下载到Keysight™矢量信号发生器,使用Instrument Control Toolbox™软件进行空中传输。然后,该示例使用Keysight信号分析器捕获传输的空中信号,并在MATLAB®中分析信号。

简介

这个例子生成了一个5G NR-TM波形5 g波形发生器app,下载并传输波形到Keysight矢量信号发生器上,然后使用Keysight信号分析仪接收波形,在MATLAB中进行波形分析。这个图表显示了一般的工作流程。

5 g_ict_workflow.png

需求

要运行这个例子,你需要以下工具:

  • E4438C ESG矢量信号发生器

  • Keysight N9030A PXA信号分析仪

使用5G波形发生器App生成基带波形

在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”%双工模式

此图显示了在基带可见的10mhz 5G NR波形。

发射无线信号

通过支持的通信接口之一(需要仪表控制工具箱)将生成的信号下载到射频信号发生器。该应用程序自动找到连接在TCP/IP接口的信号发生器。在发射机选项卡,选择Agilent/Keysight信号发生器SCPI司机列表。设置中心频率(赫兹)参数3.4 e9输出功率(dBm)参数-15年.应用程序自动从生成的波形中获取基带采样率。单击,开始传输传输在将来发布。

通过TCP/IP从信号分析仪读取IQ数据

为了将同相和正交(IQ)数据读取到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;

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

  • 查看Keysight N9030A信号分析仪的资源ID。

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

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

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

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

使用适当的可编程仪器(SCPI)标准命令将仪器复位到已知状态。查询仪器标识,确保连接正确的仪器。

writeline (sigAnalyzerObj“* RST”);instrumentInfo = writeread (sigAnalyzerObj,“* IDN ?”);流("仪器识别信息:%s", instrumentInfo);
仪器识别信息:Agilent Technologies,N9030A,US00071181,A.14.16

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

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

触发仪器进行测量。等待测量操作完成,然后读入波形。在处理数据之前,将I和Q分量从仪器接收的交错数据中分离出来,在MATLAB中创建一个复矢量。

触发仪器并开始测量。writeline (sigAnalyzerObj“*丹”);writeline (sigAnalyzerObj”:启动:波形”);等待测量操作完成measureComplete = writeread (sigAnalyzerObj,“* OPC ?”);阅读智商数据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) = %snum2str (signalSpec (6)));
信号最大值(dBm) = -43.1954
流(信号的最小值(dBm) = %snum2str (signalSpec (7)));
信号最小值(dBm) = -104.8862

绘制采集波形的频谱图,以确定接收信号的带宽。

确保rx波形是一个列向量如果~iscolumn(rx波形)rx波形= rx波形。';结束绘制采集信号的功率谱密度(PSD)spectrumPlotRx =简介;spectrumPlotRx。SampleRate = captureSampleRate;spectrumPlotRx。SpectrumType =“能量密度”;spectrumPlotRx。YLimits = [-140 -90];spectrumPlotRx。YLabel =“PSD”;spectrumPlotRx。Title =接收信号频谱:10mhz 5G NR-TM波形;spectrumPlotRx (rxWaveform);

将仪器切换到频谱分析仪模式,并将MATLAB中生成的频谱视图与信号分析仪上的视图进行比较。使用附加的SCPI命令配置仪器测量和显示设置。

切换回频谱分析仪视图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

停止5G NR-TM波形传输,在仪器部分,单击停止传输

对接收的5G波形进行测量

使用generateWaveform的函数hNRReferenceWaveformGenerator帮助文件提取特定TM的波形信息。

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

基于解调参考符号的粗频偏补偿(DM-RS)

寻找增量为1khz到100khz的偏移量。

frequencyCorrectionRange = -100 e3:1e3:100e3;[rx波形,粗偏移]= DMRSFrequencyCorrection(rx波形,captureSampleRate,frequencyCorrectionRange,tmwavegen,resourcesInfo);流(粗频偏移= %。0 f赫兹”coarseOffset)
粗频偏= 0hz

基于DM-RS的精细频偏补偿

寻找增量5hz到100hz的偏移量

frequencyCorrectionRange = 100:5:100;[rx波形,fineOffset] = DMRSFrequencyCorrection(rx波形,captureSampleRate,frequencyCorrectionRange,tmwavegen,resourcesInfo);流(精细频率偏移= %。1 f赫兹”fineOffset)
精细频偏= -25.0 Hz

维生素与测量

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

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

  • 解调接收到的波形

  • 估计通道

  • 使得车内外的符号

  • 估计和补偿共同相位误差(CPE)

定义的配置设置hNRPDSCHEVM函数。

cfg =结构();cfg。PlotEVM = true;绘制EVM统计数据cfg。DisplayEVM = true;%打印EVM统计信息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 EVM,峰值EVM,槽11:5.140 33.408% RMS EVM,峰值EVM,槽12:5.101 31.880% RMS EVM,峰值EVM,槽13:5.017 24.540% RMS EVM,峰值EVM,槽14:5.068 26.508% RMS EVM,峰值EVM,槽15:5.180 29.606% RMS EVM,峰值EVM,槽16:5.259 29.391% RMS EVM,峰值EVM,槽17:5.234 30.314% RMS EVM,槽18:5.229 27.510% RMS EVM,峰值EVM,槽19:5.136 30.313%平均RMS EVM帧0:5.149%

图中包含3个轴对象。坐标轴对象1的标题为EVM vs OFDM符号,BWP idx: 1包含2个类型为line的对象。这些对象表示rms EVM,峰值EVM。axis对象2的标题为EVM vs Slot, BWP idx: 1包含2个类型为line的对象。这些对象表示rms EVM,峰值EVM。axis对象3的标题为EVM vs Subcarrier, BWP idx: 1包含2个类型为line的对象。这些对象表示rms EVM, max EVM。

{

图中包含一个axes对象。标题为Equalized Symbols Constellation, BWP idx: 1的axis对象包含2个类型为line的对象。

整体均方根均值EVM: 5.149%整体峰值EVM = 36.0778%

实测结果表明,接收波形的解调是成功的。频谱分析仪的直流分量对直流子载波的干扰导致测量中的EVM值很高。

本地函数

这些功能有助于处理接收到的5G波形。

函数[correctedWaveform, appliedFrequencyCorrection] = DMRSFrequencyCorrection(波形、sampleRate frequencyCorrectionRange, tmwavegen, resourcesInfo)%波形-要校正的波形。需要是Nx1列向量。% sampleRate -波形的采样率% frequencyCorrectioRange -频率的范围和粒度%修正率被检查% tmwavegandresourcesinfo - generate波形方法的输出[pdschArray, ~,航母]= hListTargetPDSCHs (tmwavegen.Config resourcesInfo.WaveformResources);bwpCfg = tmwavegen.Config.BandwidthParts {1};nSlots = carrier.SlotsPerFrame;生成一个跨度10毫秒(一帧)的参考网格。这个表格%只包含DM-RS,用于同步。refGrid = referenceGrid(载体,bwpCfg、pdschArray nSlots);对指定的波形应用频率偏移量% freuqnecyCorrectionRange。nSamples =(0:长度(波形)1)';frequencyShift =(2 *π* frequencyCorrectionRange。* nSamples)。/ sampleRate;每一列表示一个偏移波形。offsetWaveforms =波形。* exp (1 j * frequencyShift);(~, mag) = nrTimingEstimate (offsetWaveforms载体。NSizeGrid,...母舰。SubcarrierSpacing、nSlots refGrid,...“SampleRate”, sampleRate);找出DM-RS相关性达到最大值的频率。[~,指数]= max (max (mag));appliedFrequencyCorrection = frequencyCorrectionRange(指数);correctedWaveform = offsetWaveforms(:,指数);结束函数refGrid = referenceGrid(载体,bwpCfg、pdschArray nSlots)为所需的插槽数量创建一个参考网格。网格%包含pdschArray中指定的DM-RS符号。这个函数%返回维数K-by- s - l的REFGRID,其中K是的个数大小载波的%子载波。NSizeGrid,S is the number of symbols%生成nslot, 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 <= size(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;结束结束结束
Baidu
map