主要内容

5G NR波形采集与分析

此示例演示如何使用5G波形发生器(5 g工具箱)应用程序,并下载生成的波形到Keysight™矢量信号发生器,使用仪器控制工具箱™软件进行空中传输。然后,该示例使用Keysight信号分析仪捕获传输的空中信号,并在MATLAB®中分析信号。

介绍

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

5 g_ict_workflow.png

需求

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

  • Keysight E4438C ESG矢量信号发生器

  • Keysight N9030A PXA信号分析仪

使用5G波形发生器应用程序生成基带波形

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

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

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

  • 测试模型作为NR-FR1-TM3.1(全频带,均匀64 QAM)

  • 信道带宽(MHz)作为10

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

  • 双工模式作为FDD

  • 子帧作为10

在应用程序工具条上,单击生成

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

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

发射空中信号

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

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

要将同相和正交(IQ)数据读取到MATLAB中进行分析,请使用仪表控制工具箱软件配置Keysight N9030A信号分析仪。

根据所测量的信号定义仪器配置参数。

%设置频谱分析仪参数centerFrequency = 3.4e9;sampleRate = 15.36e6;measurementTime = 20e-3;mechanical衰减= 0;% dBstartFrequency = 3.39e9;stopFrequency = 3.41e9;分辨率带宽= 220e3;视频带宽= 220000;

连接频谱分析仪前,请先执行以下步骤。

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

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

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

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

foundVISA = visadevlist;resourceID = foundVISA(foundVISA。模型= =“N9030A”、:).ResourceName;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 ?”);阅读IQ数据writeline (sigAnalyzerObj”:阅读:WAV0 ?”);data = readbinblock(sigAnalyzerObj,“替身”);分离数据,建立复杂IQ向量Inphase = data(1:2:end);正交=数据(2:2:结束);rx波形= inphase+1i*quadrature;

捕获并显示关于最近获得的数据的信息。

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

绘制所获取波形的频谱,以确定所接收信号的带宽。

确保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(nrtm,bw,scs,dm);[~,tmwaveinfo,resourcesInfo] = generate波形(tmwavegen);

基于DM-RS的粗频偏补偿

寻找增量1千赫到100千赫的偏移量。

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

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

寻找5hz到100hz的偏移量

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

维生素与测量

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

  • FDD (frequency division duplexing)一帧DM-RS同步(TDD (time division duplexing)两帧)

  • 解调接收的波形

  • 估计信道

  • 使符号相等

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

属性的配置设置hNRPDSCHEVM函数。

CFG = struct();cfg。PlotEVM = true;绘制EVM统计数据cfg。DisplayEVM = true;打印EVM统计信息cfg。标签= nrtm;%设置为TM捕获波形名称cfg。SampleRate = captureSampleRate;在捕获过程中使用采样率[evmInfo,eqSym,refSym] = hNRPDSCHEVM(tmwavegen.Config, rx波形,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.75% RMS EVM,峰值EVM, slot 11: 5.140 33.408% RMS EVM,峰值EVM, slot 12: 5.101 31.880% RMS EVM,峰值EVM, slot 13: 5.017 24.540% RMS EVM,峰值EVM, slot 14: 5.068 26.508% RMS EVM,峰值EVM, slot 15: 5.180 29.606% RMS EVM,峰值EVM, slot 16: 5.259 29.391% RMS EVM,峰值EVM, slot 17: 5.234 30.314% RMS EVM,峰值EVM, slot 18: 5.229 27.510% RMS EVM,峰值EVM, slot 19: 5.136 30.313%平均RMS EVM帧0:5.149%

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

{

图中包含一个轴对象。标题为均衡化符号星座的axis对象,BWP idx: 1包含2个类型为line的对象。

总体平均RMS EVM: 5.149%总体峰值EVM = 36.0778%

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

本地函数

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

函数[corrected波形,appliedFrequencyCorrection] = DMRSFrequencyCorrection(波形,sampleRate,frequencyCorrectionRange, tmwavgen,resourcesInfo)%波形-要校正的波形。需要是Nx1列向量。% sampleRate -波形的采样率% frequencyCorrectioRange -频率范围和粒度检测校正百分比% tmwavegen and resourcesInfo - generate波形方法的输出[pdschArray,~,carrier] = hListTargetPDSCHs(tmwavegen.Config,resourcesInfo.WaveformResources);bwpCfg = tmwavegen.Config.BandwidthParts{1,1};nSlots = carrier.SlotsPerFrame;生成一个跨度10毫秒(一帧)的参考网格。这个表格%仅包含DM-RS,用于同步。refGrid = referenceGrid(carrier,bwpCfg,pdschArray,nSlots);对指定的波形应用频率偏移% freuqnecyCorrectionRange。nSamples =(0:长度(波形)-1)';frequencyShift = (2*pi*frequencyCorrectionRange.*nSamples)./sampleRate;每一列表示一个偏移波形。偏移波形=波形。*exp(1j*frequencyShift);[~,mag] = nrTimingEstimate(偏移波形,载波。NSizeGrid,母舰。SubcarrierSpacing、nSlots refGrid,“SampleRate”, sampleRate);找出DM-RS相关性最大的频率。[~,index] = max(max(mag));applicedfrequencycorrection = frequencyCorrectionRange(index);corrected波形= offsetWaveforms(:,index);结束函数refGrid = referencgrid (carrier,bwpCfg,pdschArray,nSlots)为所需数量的插槽创建一个参考网格。网格%包含pdschArray中指定的DM-RS符号。这个函数%返回K-by- s - l维度的REFGRID,其中K是的个数%子载波大小载波。NSizeGrid,S is the number of symbols% span nslot, L为层数。nSubcarriers = carrier。NSizeGrid * 12;L = carrier.SymbolsPerSlot*插槽;参考网格中OFDM符号的百分比nLayers = size(pdschArray(1).Resources(1).ChannelIndices,2);bwpStart = bwpCfg.NStartBWP;bwpLen = bwpCfg.NSizeBWP;refGrid = 0 (nSubcarriers,L,nLayers);%空网格bwpGrid =零(bwpLen*12,L,nLayers);rbsPerSlot = bwpLen*12*carrier.SymbolsPerSlot;在所有槽位的参考网格中填充DM-RS符号。的地方% bwpGrid在载体网格中(在适当的位置)% BWP大小与运营商网格不一致slotIdx = carrier。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