주요 콘텐츠

이 페이지는 기계 번역을 사용하여 번역되었습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

5G NR 파형 수집 및 분석

R2026a

이 예제는 5G 파형 생성기 (5G Toolbox) 앱을 사용하여 5G NR 테스트 모델(NR-TM) 파형을 생성하고, 생성된 파형을 Instrument Control Toolbox™ 소프트웨어를 통해 Keysight™ 벡터 신호 생성기로 다운로드하여 무선 전송을 수행하는 방법을 보여줍니다. 그런 다음 Keysight 신호 분석기를 사용하여 무선으로 전송된 신호를 포착하고, MATLAB®에서 해당 신호를 분석합니다.

소개

이 예제는 5G 파형 생성기 앱을 사용하여 5G NR-TM 파형을 생성하고, 해당 파형을 다운로드하여 Keysight 벡터 신호 생성기로 전송한 다음, Keysight 신호 분석기를 통해 파형을 수신하여 MATLAB에서 파형 분석을 수행합니다. 이 다이어그램은 일반적인 워크플로를 보여줍니다.

5g_ict_workflow.png

요구 사항

이 예제를 실행하려면 다음 계측기가 필요합니다.

  • Keysight E4438C ESG 벡터 신호 생성기

  • Keysight N9030A PXA 신호 분석기

5G 파형 생성기 앱을 사용하여 베이스밴드 파형 생성하기

MATLAB에서 앱 탭을 열고 5G 파형 생성기 앱을 클릭합니다.

파형 유형 섹션에서 NR 테스트 모델을 클릭합니다. 앱의 가장 왼쪽 패널에서 선택한 파형의 파라미터를 설정할 수 있습니다. 이 예시의 경우 다음과 같이 설정합니다.

  • 주파수 범위를 FR1 (410 MHz - 7.125 GHz)로 설정

  • 테스트 모델을 NR-FR1-TM3.1 (Full band, uniform 64 QAM)으로 설정

  • 채널 대역폭(MHz)을 10로 설정

  • 부반송파 간격(kHz)을 30로 설정

  • 듀플렉스 모드를 FDD로 설정

  • 서브프레임을 10으로 설정

앱 툴스트립에서 생성을 클릭합니다.

% Set the NR-TM parameters for the receiver
nrtm = "NR-FR1-TM3.1"; % Reference channel
bw   = "10MHz";        % Channel bandwidth
scs  = "30kHz";        % Subcarrier spacing
dm   = "FDD";          % Duplexing mode

이 그림은 기저대역에서 관측되는 10 MHz 5G NR 파형을 보여줍니다.

무선 신호 송신

지원되는 통신 인터페이스 중 하나를 통해 생성된 신호를 RF 신호 생성기로 전송합니다(Instrument Control Toolbox 필요). 이 앱은 TCP/IP 인터페이스를 통해 연결된 신호 생성기를 자동으로 찾아냅니다. 앱의 송신기 탭에서 드라이버 목록에서 Agilent/Keysight Signal Generator SCPI를 선택하십시오. 중심 주파수(Hz) 파라미터를 3.4e9로, 출력 전력(dBm) 파라미터를 -15로 설정하십시오. 이 앱은 생성된 파형에서 베이스밴드 샘플 레이트를 자동으로 추출합니다. 송신을 시작하려면 툴스트립에서 송신을 클릭하십시오.

TCP/IP를 통해 신호 분석기에서 IQ 데이터 읽기

분석을 위해 동상 및 직교(IQ) 데이터를 MATLAB으로 읽어 들이려면, Instrument Control Toolbox 소프트웨어를 사용하여 Keysight N9030A 신호 분석기를 설정하십시오.

측정하려는 신호에 따라 계측기 파라미터를 정의하십시오.

% Set parameters for the spectrum analyzer
centerFrequency = 3.4e9; 
sampleRate = 15.36e6;
measurementTime = 20e-3;
mechanicalAttenuation = 0; %dB
startFrequency = 3.39e9; 
stopFrequency = 3.41e9;
resolutionBandwidth = 220e3; 
videoBandwidth = 220000;

스펙트럼 분석기에 연결하기 전에 다음 단계를 수행하십시오.

  • Keysight N9030A 신호 분석기의 리소스 ID를 찾으십시오.

  • VISA(가상 계측기 소프트웨어 아키텍처) 인터페이스를 사용하여 계측기에 연결하십시오.

  • 계측기에서 반환되는 데이터를 수용할 수 있도록 입력 버퍼 크기를 조정하십시오.

  • 측정 및 데이터 전송에 충분한 시간이 확보되도록 타임아웃을 설정하십시오.

foundVISA = visadevlist;
resourceID = foundVISA(foundVISA.Model == "N9030A",:).ResourceName;
resourceID = resourceID(contains(resourceID,"N9030A"));             % Extract resourceID which contains "N9030A"
sigAnalyzerObj = visadev(resourceID);
sigAnalyzerObj.ByteOrder = "big-endian";
sigAnalyzerObj.Timeout = 20;

프로그래밍 가능한 계측기에 대한 적절한 표준 명령어(SCPI)를 사용하여 계측기를 알려진 상태로 초기화하십시오. 정확한 계측기가 연결되었는지 확인하기 위해 계측기 식별 정보를 쿼리하십시오.

writeline(sigAnalyzerObj,"*RST");
instrumentInfo = writeread(sigAnalyzerObj,"*IDN?");
fprintf("Instrument identification information: %s",instrumentInfo);
Instrument identification information: Agilent Technologies,N9030A,US00071181,A.14.16

X-시리즈 신호 및 스펙트럼 분석기는 스펙트럼 측정뿐만 아니라 IQ 측정도 수행합니다. 이 예제에서는 시간 영역 IQ 데이터를 수집하고, MATLAB를 사용하여 데이터를 시각화한 다음, 수집된 데이터에 대해 신호 분석을 수행합니다. SCPI 명령어는 계측기를 설정하고, 측정이 완료된 후의 데이터 전송 형식을 정의합니다.

% Set up signal analyzer mode to basic IQ mode
writeline(sigAnalyzerObj,":INSTrument:SELect BASIC");

% Set the center frequency
writeline(sigAnalyzerObj,strcat(":SENSe:FREQuency:CENTer ",num2str(centerFrequency)));

% Set the capture sample rate
writeline(sigAnalyzerObj,strcat(":SENSe:WAVeform:SRATe ",num2str(sampleRate)));

% Turn off averaging
writeline(sigAnalyzerObj,":SENSe:WAVeform:AVER OFF");

% Set the spectrum analyzer to take one single measurement after the trigger line goes high
writeline(sigAnalyzerObj,":INIT:CONT OFF"); 

% Set the trigger to external source 1 with positive slope triggering
writeline(sigAnalyzerObj,":TRIGger:WAVeform:SOURce IMMediate");
writeline(sigAnalyzerObj,":TRIGger:LINE:SLOPe POSitive");

% Set the time for which measurement needs to be made
writeline(sigAnalyzerObj,strcat(":WAVeform:SWE:TIME ",num2str(measurementTime)));

% Turn off electrical attenuation 
writeline(sigAnalyzerObj,":SENSe:POWer:RF:EATTenuation:STATe OFF");

% Set the mechanical attenuation level
writeline(sigAnalyzerObj,strcat(":SENSe:POWer:RF:ATTenuation ",num2str(mechanicalAttenuation)));

% Turn IQ signal ranging to auto
writeline(sigAnalyzerObj,":SENSe:VOLTage:IQ:RANGe:AUTO ON");

% Set the endianness of returned data
writeline(sigAnalyzerObj,":FORMat:BORDer NORMal");

% Set the format of the returned data
writeline(sigAnalyzerObj,":FORMat:DATA REAL,64");

측정을 시작하려면 계측기를 작동하십시오. 측정 작업이 완료될 때까지 기다린 다음, 파형을 읽어 들이십시오. 데이터를 처리하기 전에, 계측기에서 수신된 인터리빙된 데이터에서 I 성분과 Q 성분을 분리하고, MATLAB에 복소수 벡터를 생성하십시오.

% Trigger the instrument and initiate measurement
writeline(sigAnalyzerObj,"*TRG");
writeline(sigAnalyzerObj,":INITiate:WAVeform");

% Wait until measure operation is complete
measureComplete = writeread(sigAnalyzerObj,"*OPC?");

% Read the IQ data
writeline(sigAnalyzerObj,":READ:WAV0?");
data = readbinblock(sigAnalyzerObj,"double");

% Separate the data and build the complex IQ vector
inphase = data(1:2:end);
quadrature = data(2:2:end);
rxWaveform = inphase+1i*quadrature;

가장 최근에 수집된 데이터에 대한 정보를 가져와 표시합니다.

writeline(sigAnalyzerObj,":FETCH:WAV1?");
signalSpec = readbinblock(sigAnalyzerObj,"double");

% Display the measurement information
captureSampleRate = 1/signalSpec(1);
fprintf("Sample Rate (Hz) = %s",num2str(captureSampleRate));
Sample Rate (Hz) = 15360000
fprintf("Number of points read = %s",num2str(signalSpec(4)));
Number of points read = 307201
fprintf("Max value of signal (dBm) = %s",num2str(signalSpec(6)));
Max value of signal (dBm) = -29.4588
fprintf("Min value of signal (dBm) = %s",num2str(signalSpec(7)));
Min value of signal (dBm) = -91.9621

획득한 파형의 주파수 응답을 플로팅하여 수신 신호의 대역폭을 확인하십시오.

% Ensure rxWaveform is a column vector
if ~iscolumn(rxWaveform)
    rxWaveform = rxWaveform.';
end

% Plot the power spectral density (PSD) of the acquired signal
spectrumPlotRx = spectrumAnalyzer;
spectrumPlotRx.SampleRate = captureSampleRate;
spectrumPlotRx.SpectrumType = "Power density";
spectrumPlotRx.YLimits = [-135 -85];
spectrumPlotRx.YLabel = "PSD";
spectrumPlotRx.Title = "Received Signal Spectrum: 10 MHz 5G NR-TM Waveform";
spectrumPlotRx(rxWaveform);

계측기를 스펙트럼 분석기 모드로 전환하고 MATLAB에서 생성된 스펙트럼 뷰를 신호 분석기의 뷰와 비교합니다. 추가 SCPI 명령을 사용하여 계측기 측정 및 디스플레이 설정을 구성합니다.

% Switch back to the spectrum analyzer view
writeline(sigAnalyzerObj,":INSTrument:SELect SA");

% Set the mechanical attenuation level
writeline(sigAnalyzerObj,strcat(":SENSe:POWer:RF:ATTenuation ",num2str(mechanicalAttenuation)));

% Set the center frequency, RBW, and VBW
writeline(sigAnalyzerObj,strcat(":SENSe:FREQuency:CENTer ",num2str(centerFrequency)));
writeline(sigAnalyzerObj,strcat(":SENSe:FREQuency:STARt ",num2str(startFrequency)));
writeline(sigAnalyzerObj,strcat(":SENSe:FREQuency:STOP ",num2str(stopFrequency)));
writeline(sigAnalyzerObj,strcat(":SENSe:BANDwidth:RESolution ",num2str(resolutionBandwidth)));
writeline(sigAnalyzerObj,strcat(":SENSe:BANDwidth:VIDeo ",num2str(videoBandwidth)));

% Enable continuous measurement on the spectrum analyzer
writeline(sigAnalyzerObj,":INIT:CONT ON"); 

% Begin receiving the over-the-air signal
writeline(sigAnalyzerObj,"*TRG");

계측기를 정리하려면 계측기 연결을 지웁니다.

clear sigAnalyzerObj;

5G NR-TM 파형 전송을 중지하려면 앱 툴스트립의 계측기 섹션에서 Stop Transmission을 클릭하십시오.

수신된 5G 파형 측정 수행

hNRReferenceWaveformGenerator 헬퍼 파일을 사용하여 특정 TM에 대한 nrDLCarrierConfig (5G Toolbox) 객체를 생성하고 추출합니다.

tmwavegen = hNRReferenceWaveformGenerator(nrtm,bw,scs,dm);
cfgDL = tmwavegen.Config;

EVM 측정값

hNRDownlinkEVM 함수를 사용하여 파형을 분석하십시오. 이 함수는 다음 단계를 수행합니다.

  • 주파수 편차를 예측하고 보정합니다

  • I/Q 불균형을 추정하고 보정합니다

  • FDD(주파수 분할 이중화)의 경우 DM-RS를 1개 프레임 단위로 동기화하며 TDD(시분할 이중화)의 경우 2개 프레임 단위로 동기화합니다

  • 수신된 파형을 복조합니다

  • DC 부반송파 성분을 제거한다

  • 채널을 추정합니다

  • 기호를 균등하게 배열합니다

  • 일반적인 위상 오차(CPE)를 추정하고 보정합니다

  • 물리적 하향 링크 공유 채널(PDSCH)의 EVM을 계산합니다

  • 물리 하향 링크 제어 채널(PDCCH)의 EVM을 계산합니다

hNRDownlinkEVM 함수에 대한 자세한 내용은 EVM Measurement of 5G NR Downlink Waveforms with RF Impairments (5G Toolbox) 예제를 참조하십시오.

hNRDownlinkEVM 함수의 구성 설정을 정의하십시오.

cfg = struct();
cfg.PlotEVM = true;                 % Plot EVM statistics 
cfg.DisplayEVM = true;              % Print EVM statistics
cfg.Label = nrtm;                   % Set to TM name of captured waveform
cfg.SampleRate = captureSampleRate; % Use sample rate during capture
cfg.IQImbalance = true;
cfg.CorrectCoarseFO = true;
cfg.CorrectFineFO = true;
cfg.ExcludeDC = true;

[evmInfo,eqSym,refSym] = hNRDownlinkEVM(cfgDL,rxWaveform,cfg);
EVM stats for BWP idx : 1
PDSCH RMS EVM, Peak EVM, slot 0: 2.666 9.007%
PDSCH RMS EVM, Peak EVM, slot 1: 2.653 8.812%
PDSCH RMS EVM, Peak EVM, slot 2: 2.615 7.824%
PDSCH RMS EVM, Peak EVM, slot 3: 2.661 8.099%
PDSCH RMS EVM, Peak EVM, slot 4: 2.703 7.532%
PDSCH RMS EVM, Peak EVM, slot 5: 2.715 8.699%
PDSCH RMS EVM, Peak EVM, slot 6: 2.741 8.065%
PDSCH RMS EVM, Peak EVM, slot 7: 2.677 8.297%
PDSCH RMS EVM, Peak EVM, slot 8: 2.667 8.566%
PDSCH RMS EVM, Peak EVM, slot 9: 2.672 9.212%
PDSCH RMS EVM, Peak EVM, slot 10: 2.689 8.082%
PDSCH RMS EVM, Peak EVM, slot 11: 2.711 9.935%
PDSCH RMS EVM, Peak EVM, slot 12: 2.606 7.931%
PDSCH RMS EVM, Peak EVM, slot 13: 2.641 7.583%
PDSCH RMS EVM, Peak EVM, slot 14: 2.810 11.276%
PDSCH RMS EVM, Peak EVM, slot 15: 2.710 8.925%
PDSCH RMS EVM, Peak EVM, slot 16: 2.652 7.819%
PDSCH RMS EVM, Peak EVM, slot 17: 2.615 9.181%
PDSCH RMS EVM, Peak EVM, slot 18: 2.617 7.642%
PDSCH RMS EVM, Peak EVM, slot 19: 2.675 7.504%
PDSCH RMS EVM, Peak EVM, slot 20: 2.672 8.327%
PDSCH RMS EVM, Peak EVM, slot 21: 2.550 7.932%
PDSCH RMS EVM, Peak EVM, slot 22: 2.663 10.029%
PDSCH RMS EVM, Peak EVM, slot 23: 2.710 9.863%
PDSCH RMS EVM, Peak EVM, slot 24: 2.652 7.724%
PDCCH RMS EVM, Peak EVM, slot 0: 4.091 7.352%
PDCCH RMS EVM, Peak EVM, slot 1: 3.288 8.030%
PDCCH RMS EVM, Peak EVM, slot 2: 3.315 5.373%
PDCCH RMS EVM, Peak EVM, slot 3: 3.548 6.459%
PDCCH RMS EVM, Peak EVM, slot 4: 3.178 7.353%
PDCCH RMS EVM, Peak EVM, slot 5: 3.404 8.247%
PDCCH RMS EVM, Peak EVM, slot 6: 2.877 5.912%
PDCCH RMS EVM, Peak EVM, slot 7: 3.171 6.461%
PDCCH RMS EVM, Peak EVM, slot 8: 3.578 8.686%
PDCCH RMS EVM, Peak EVM, slot 9: 3.477 6.330%
PDCCH RMS EVM, Peak EVM, slot 10: 3.628 7.232%
PDCCH RMS EVM, Peak EVM, slot 11: 3.410 8.697%
PDCCH RMS EVM, Peak EVM, slot 12: 3.333 6.797%
PDCCH RMS EVM, Peak EVM, slot 13: 3.160 6.639%
PDCCH RMS EVM, Peak EVM, slot 14: 3.157 6.172%
PDCCH RMS EVM, Peak EVM, slot 15: 3.619 8.186%
PDCCH RMS EVM, Peak EVM, slot 16: 2.911 5.377%
PDCCH RMS EVM, Peak EVM, slot 17: 3.136 9.346%
PDCCH RMS EVM, Peak EVM, slot 18: 3.348 9.101%
PDCCH RMS EVM, Peak EVM, slot 19: 3.425 6.827%
PDCCH RMS EVM, Peak EVM, slot 20: 3.321 6.858%
PDCCH RMS EVM, Peak EVM, slot 21: 3.347 5.715%
PDCCH RMS EVM, Peak EVM, slot 22: 3.254 8.079%
PDCCH RMS EVM, Peak EVM, slot 23: 2.989 7.005%
PDCCH RMS EVM, Peak EVM, slot 24: 3.299 6.602%
Averaged RMS EVM frame 0: 2.675%

Figure contains 3 axes objects. Axes object 1 with title PDSCH EVM vs OFDM symbol, BWP index : 1, xlabel Symbol number, ylabel EVM (%) contains 2 objects of type line. These objects represent rms EVM, peak EVM. Axes object 2 with title PDSCH EVM vs Slot, BWP index : 1, xlabel Slot number, ylabel EVM (%) contains 2 objects of type line. These objects represent rms EVM, peak EVM. Axes object 3 with title PDSCH EVM vs Subcarrier, BWP index : 1, xlabel Subcarrier number, ylabel EVM (%) contains 2 objects of type line. These objects represent rms EVM, peak EVM.

Figure EVM (%) contains an axes object. The axes object with title PDSCH EVM Resource Grid, BWP index : 1, xlabel OFDM symbols, ylabel Subcarriers contains an object of type surface.

Figure contains an axes object. The axes object with title PDSCH Equalized Symbols Constellation, BWP index : 1 contains 2 objects of type line. One or more of the lines displays its values using only markers

Figure contains 3 axes objects. Axes object 1 with title PDCCH EVM vs OFDM symbol, BWP index : 1, xlabel Symbol number, ylabel EVM (%) contains 2 objects of type line. These objects represent rms EVM, peak EVM. Axes object 2 with title PDCCH EVM vs Slot, BWP index : 1, xlabel Slot number, ylabel EVM (%) contains 2 objects of type line. These objects represent rms EVM, peak EVM. Axes object 3 with title PDCCH EVM vs Subcarrier, BWP index : 1, xlabel Subcarrier number, ylabel EVM (%) contains 2 objects of type line. These objects represent rms EVM, peak EVM.

Figure EVM (%) contains an axes object. The axes object with title PDCCH EVM Resource Grid, BWP index : 1, xlabel OFDM symbols, ylabel Subcarriers contains an object of type surface.

Figure contains an axes object. The axes object with title PDCCH Equalized Symbols Constellation, BWP index : 1 contains 2 objects of type line. One or more of the lines displays its values using only markers

Averaged overall PDSCH RMS EVM: 2.675%
Overall PDSCH Peak EVM = 11.2764%
Averaged overall PDCCH RMS EVM: 3.363%
Overall PDCCH Peak EVM = 9.3461%

hNRDownlinkEVM 함수의 출력 결과를 보면, 수신된 파형의 복조가 성공적으로 이루어졌음을 알 수 있습니다.