이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
5G의 물리 채널과 물리 신호를 리소스 그리드에 매핑하기
이 예제에서는 5G Toolbox™ 기능을 사용하여 5G NR(New Radio)의 물리 채널과 물리 신호를 생성하고, 리소스 그리드에 매핑하는 방법을 보여줍니다.
소개
아래 그림은 5G 다운링크 링크의 컨텍스트에서, 이 예제에서 모델링되는 링크 요소를 보여줍니다. 해당 요소는 다음과 같습니다.
PDSCH(physical downlink shared channel)와 PDSCH의 DM-RS(복조 기준 신호) 생성
리소스 그리드에 대한 PDSCH와 PDSCH DM-RS의 MIMO 프리코딩 및 매핑
OFDM 변조
반송파 구성
송신 안테나 수를 지정하고 반송파 구성 객체를 만듭니다. 이 객체는 리소스 그리드의 크기만 제어합니다. 문제를 단순화하기 위해 디폴트 반송파 구성 객체를 사용합니다.
nTxAnts = 4; carrier = nrCarrierConfig
carrier = nrCarrierConfig with properties: NCellID: 1 SubcarrierSpacing: 15 CyclicPrefix: 'normal' NSizeGrid: 52 NStartGrid: 0 NSlot: 0 NFrame: 0 IntraCellGuardBands: [0x2 double] Read-only properties: SymbolsPerSlot: 14 SlotsPerSubframe: 1 SlotsPerFrame: 10
PDSCH와 PDSCH DM-RS 구성
PDSCH 구성 객체를 만듭니다. 이 객체는 PDSCH 관련 파라미터를 지정합니다. 16-QAM 변조, 2개의 계층, 전대역 할당을 지정합니다. 이 구성은 PDSCH를 반송파와 크기가 동일한 BWP(부분 대역폭)로 매핑합니다. 이 객체를 사용하여 다른 시간 할당 파라미터와 DM-RS 설정을 지정할 수도 있습니다.
pdsch = nrPDSCHConfig; pdsch.Modulation = "16QAM"; pdsch.NumLayers = 2; pdsch.PRBSet = 0:carrier.NSizeGrid-1; % Full band allocation
PDSCH와 PDSCH DM-RS 파라미터를 표시합니다.
pdsch
pdsch = nrPDSCHConfig with properties: NSizeBWP: [] NStartBWP: [] ReservedPRB: {[1x1 nrPDSCHReservedConfig]} ReservedRE: [] Modulation: '16QAM' NumLayers: 2 MappingType: 'A' SymbolAllocation: [0 14] PRBSet: [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51] PRBSetType: 'VRB' VRBToPRBInterleaving: 0 VRBBundleSize: 2 NID: [] RNTI: 1 DMRS: [1x1 nrPDSCHDMRSConfig] EnablePTRS: 0 PTRS: [1x1 nrPDSCHPTRSConfig] Read-only properties: NumCodewords: 1
pdsch.DMRS
ans = nrPDSCHDMRSConfig with properties: DMRSConfigurationType: 1 DMRSReferencePoint: 'CRB0' DMRSTypeAPosition: 2 DMRSAdditionalPosition: 0 DMRSLength: 1 CustomSymbolSet: [] DMRSPortSet: [] NIDNSCID: [] NSCID: 0 NumCDMGroupsWithoutData: 2 DMRSDownlinkR16: 0 DMRSEnhancedR18: 0 Read-only properties: CDMGroups: [0 0] DeltaShifts: [0 0] FrequencyWeights: [2x2 double] TimeWeights: [2x2 double] DMRSSubcarrierLocations: [6x2 double] CDMLengths: [2 1]
PDSCH 생성
PDSCH를 그리드에 매핑하기 위한 인덱스를 생성합니다.
[pdschIndices,pdschInfo] = nrPDSCHIndices(carrier,pdsch);
랜덤 PDSCH 비트를 생성하고 PDSCH 심볼에 매핑합니다. 입력 인수 pdschInfo.G
는 PDSCH의 비트 용량을 지정하며, 이는 채널 코딩 단계의 코드워드 길이입니다. pdschInfo.G
는 PDSCH 송신을 위해 사용 가능한 RE(리소스 요소)를 고려합니다. 문제를 단순화하기 위해 이 예제는 DL-SCH(downlink shared channel) 모델링을 포함하지 않습니다.
pdschBits = randi([0 1],pdschInfo.G,1);
PDSCH 심볼을 생성합니다. PDSCH 심볼은 행렬 크기 ×로 저장되며, 여기서 는 심볼 개수이고 는 계층 개수입니다.
pdschSymbols = nrPDSCH(carrier,pdsch,pdschBits); size(pdschSymbols)
ans = 1×2
8112 2
PDSCH DM-RS 생성
DM-RS 심볼 및 인덱스를 생성합니다.
dmrsSymbols = nrPDSCHDMRS(carrier,pdsch); dmrsIndices = nrPDSCHDMRSIndices(carrier,pdsch);
PDSCH와 PDSCH DM-RS 심볼로 성상도 플로팅을 표시합니다.
plot(pdschSymbols(:),"o");hold on plot(dmrsSymbols(:),"xr");hold off title("PDSCH and PDSCH DM-RS Symbols");xlabel("In-Phase Amplitude");ylabel("Quadrature Amplitude") legend("PDSCH","PDSCH DM-RS")
MIMO 프리코딩 및 리소스 그리드에 매핑
프리코딩을 적용합니다. 채널 측정값은 프리 코딩 가중치(빔포밍 가중치라고도 함)를 결정합니다. 그러나 이 예제는 전파 채널을 모델링하지 않습니다. 이 예제에서는 프리코딩 가중치를 알고 있다고 가정합니다.
% Precoding weights W = fft(eye(nTxAnts))/sqrt(nTxAnts); % Unitary precoding matrix w = W(1:pdsch.NumLayers,:)/sqrt(pdsch.NumLayers); % Normalize by number of layers
프리코딩 행렬 w
의 행렬 크기는 ×여야 하며, 여기서 는 계층 개수이고 는 송신 안테나 개수입니다.
size(pdschSymbols)
ans = 1×2
8112 2
size(w)
ans = 1×2
2 4
PDSCH 심볼을 프리코딩합니다.
pdschSymbolsPrecoded = pdschSymbols*w;
pdschSymbolsPrecoded
행렬의 행 수는 PDSCH 심볼 개수에 대응하고 열 수는 안테나 수에 대응합니다.
size(pdschSymbolsPrecoded)
ans = 1×2
8112 4
빈 리소스 그리드를 생성합니다. 이 그리드의 범위는 하나의 슬롯입니다.
pdschGrid = nrResourceGrid(carrier,nTxAnts);
PDSCH 심볼을 리소스 그리드에 매핑할 때, nrPDSCHIndices
함수에 의해 생성된 PDSCH 인덱스는 안테나가 아니라 계층을 참조한다는 점을 고려해야 합니다. 이 형식은 PDSCH 심볼을 계층에 직접 매핑할 때 유용합니다. 이 경우, 결과로 생성되는 리소스 그리드는 프리코딩되지 않습니다.
이 예제는 리소스 그리드에 매핑하기 전에 PDSCH 심볼에 프리코딩을 적용하므로, 프리코딩된 PDSCH 심볼은 계층이 아닌 안테나에 매핑됩니다. 계층 인덱스를 안테나 인덱스로 변환하려면 nrExtractResources
함수를 사용합니다.
[~,pdschAntIndices] = nrExtractResources(pdschIndices,pdschGrid); pdschGrid(pdschAntIndices) = pdschSymbolsPrecoded;
첫 번째 안테나의 리소스 그리드를 표시합니다. 파란색 간격은 DM-RS용으로 남겨져 있습니다.
imagesc([0 carrier.SymbolsPerSlot-1],[0 carrier.NSizeGrid*12-1],abs(pdschGrid(:,:,1))); axis xy;title("Resource Grid (First Antenna) - PDSCH");xlabel("OFDM Symbol");ylabel("Subcarrier")
DM-RS 심볼을 프리코딩하고 그리드에 매핑합니다. PDSCH 인덱스와 유사하게 DM-RS 인덱스는 계층을 참조합니다. 이러한 계층을 다중 안테나 인덱스로 변환하려면 nrExtractResources
함수를 사용합니다.
% PDSCH DM-RS precoding and mapping for p = 1:size(dmrsSymbols,2) [~,dmrsAntIndices] = nrExtractResources(dmrsIndices(:,p),pdschGrid); pdschGrid(dmrsAntIndices) = pdschGrid(dmrsAntIndices) + dmrsSymbols(:,p)*w(p,:); end
첫 번째 안테나의 리소스 그리드를 표시합니다.
imagesc([0 carrier.SymbolsPerSlot-1],[0 carrier.NSizeGrid*12-1],abs(pdschGrid(:,:,1))); axis xy;title("Resource Grid (First Antenna) - PDSCH and PDSCH DM-RS"); xlabel("OFDM Symbol");ylabel("Subcarrier")
리소스 그리드의 단일 RB(Resource Block)를 표시합니다. 다음 보기의 확대된 단일 RB에서 RE의 내용을 자세히 볼 수 있습니다.
imagesc(abs(pdschGrid(1:12,:,1)));view(2) axis xy;title("Resource Block - PDSCH and PDSCH DM-RS");ylabel("Subcarrier");xlabel("OFDM Symbol")
OFDM 변조
리소스 그리드를 OFDM 변조하고 첫 번째 안테나의 시간 영역 파형을 표시합니다.
[txWaveform,waveformInfo] = nrOFDMModulate(carrier,pdschGrid); plot(abs(txWaveform(:,1)));title("Time Domain Waveform (First Antenna)");xlabel("Sample Number");ylabel("Magnitude")
waveformInfo
출력값은 샘플링 레이트와 같은 시간 영역 파형에 대한 정보를 포함합니다.
waveformInfo
waveformInfo = struct with fields:
Nfft: 1024
SampleRate: 15360000
CyclicPrefixLengths: [80 72 72 72 72 72 72 80 72 72 72 72 72 72]
SymbolLengths: [1104 1096 1096 1096 1096 1096 1096 1104 1096 1096 1096 1096 1096 1096]
Windowing: 36
SymbolPhases: [0 0 0 0 0 0 0 0 0 0 0 0 0 0]
SymbolsPerSlot: 14
SlotsPerSubframe: 1
SlotsPerFrame: 10