5G NR-агрегацию, демодуляцию и анализ несущей нисходящего канала

Этот пример показывает, как сгенерировать, агрегировать и демодулировать несколько несущих нисходящей линии связи, используя 5G Toolbox™ функции.

Введение

Этот пример генерирует сигнал NR с агрегированием несущей (CA). Чтобы выполнить агрегацию несущей, пример вычисляет смещения частоты для внутрибрюшинного смежного случая CA, как описано в TS 38.104 Section 5.3A. Пример также поддерживает настраиваемые внутрибрюшинные и несмежные и межполосные сценарии CA.

Чтобы сгенерировать агрегированную форму волны нисходящей линии связи, пример конфигурирует совместимый со стандартом нисходящий фиксированный опорный канал (FRC) для каждой несущей компонента. TS 38.101-1 Приложение A.3 определяет физические FRC нисходящего общего канала (PDSCH) для FR1 и TS 38.101-2 приложения A.3 определяет FRC PDSCH для FR2. Для генерации сигналов FRC можно задать пропускную способность канала, интервал между поднесущими, модуляцию, режим дуплекса и идентификатор камеры. Для получения дополнительной информации о том, как сгенерировать FRC DL, смотрите 5G Генерации сигналов NR-TM и FRC.

После генерации несущих компонентов (CCs), пример повторяет форму волны к общей скорости дискретизации и объединяет CCs, чтобы сгенерировать агрегированную форму волны.

Наконец, пример фильтрует и понижает дискретизацию выбранного CC для выполнения измерений EVM и декодирования PDSCH.

Выбор параметров несущей компонента

Векторная ChannelBandwidths задает пропускную способность для каждого CC. Длина этого вектора соответствует количеству CCs. Элементы ChannelBandwidths должны быть в наборе {5, 10, 15, 20, 25, 30, 40, 50, 60, 70, 80, 90 100} МГц для FR1 и в наборе {50, 100, 200, 400} МГц для FR2. TS 38.101-1 Раздел 5.5A.1 Таблица 5.5A.1-1 и TS 38.101-2 Раздел 5.5A.1 Таблица 5.5A.1-1 перечисляют допустимые комбинации полос пропускания для FR1 и FR2 агрегирования несущих, соответственно.

Если на ccSpacings вектор пуст, пример вычисляет интервалы между последовательными несущими, ccSpacings, как описано в TS 38.104. Чтобы выбрать интервалы по своему выбору, добавьте интервалы к ccSpacings вектор.

% Configure three carriers for the aggregation. You can select a different
% number of carriers by modifying the number of elements in the
% |channelBandwidths|, |SCSs|, |modulations|, and |nCellIDs| vectors.
frequencyRange = 'FR1'; % (FR1 or FR2)
channelRaster = 100; % Channel raster in kHz (15, 60 or 100)
channelBandwidths = [60 40 40]; % Channel bandwidths in MHz 
                                % (5, 10, 15, 20, 25, 30, 40, 50, 60, 70, 80, 
                                % 90 or 100 for FR1)
                                % (50, 100, 200 or 400 for FR2)
SCSs = [30 30 30]; % Subcarrier spacings in kHz 
                   % (15, 30 or 60 for FR1) 
                   % (60 or 120 for FR2)
modulations = {'QPSK' '64QAM' '256QAM'}; % ('QPSK', '64QAM' or '256QAM' for FR1)
                                         % ('QPSK', '16QAM' or '64QAM' for FR2)
nCellIDs = [1 2 3]; % Cell IDs          
duplexMode = 'TDD'; % Duplex mode ('TDD' or 'FDD')
sv = '15.2.0'; % Standard version ('15.1.0', '15.2.0' or '15.7.0')
numSubframes = 10; % Number of subframes to generate per carrier

% Choose the spacings between consecutive carriers, |ccSpacings|, or leave
% the vector empty for calculating the spacings, as described in TS 38.104
% Section 5.3A
ccSpacings = []; % MHz

% Select the CC to demodulate
CCofInterest = 2;

% Verify the number of CCs, channel bandwidths, subcarrier spacings,
% modulations, and spacings. Additionally, check that the spacings are
% greater than 0.
hNRVerifyCarrierParameters(length(channelBandwidths),length(SCSs),...
    length(modulations),length(nCellIDs),ccSpacings);

Строение несущей компонента

Сгенерируйте структуру строения для каждого CC, используя hNRReferenceWaveformGenerator. Сохраните структуры строения для всех CC в массиве ячеек.

% Establish the number of component carriers 
numCC = length(channelBandwidths);

% CC configuration
referenceChannel = cell(1,numCC);
wavegen = cell(1,numCC);
for i = 1:numCC
    % Select a reference channel, FRC, based on the chosen modulation and
    % frequency range
    referenceChannel{i} = strcat('DL-FRC-',frequencyRange,'-',modulations{i});
    
    % Create a generator object for the above PDSCH FRC reference channel
    wavegen{i} = hNRReferenceWaveformGenerator(referenceChannel{i},...
        channelBandwidths(i),SCSs(i),duplexMode,nCellIDs(i),sv);
end

Вычисление параметров агрегации несущих

Для выполнения агрегирования несущей необходимо вычислить частотные параметры, описанные в TS 38.104, разделы 5.3 и 5.4.

  • Fc_offset - вектор, содержащий центральную частоту каждого CC в основной полосе частот

  • F_offset_low - смещение частоты от нижнего Fc_offset к нижнему агрегированному ребру полосы пропускания

  • F_offset_high - смещение частоты от верхней Fc_offset к верхнему агрегированному ребру полосы пропускания канала

  • F_edge_low - нижнее ребро агрегированной полосы пропускания канала

  • F_edge_high - верхнее ребро совокупной полосы пропускания канала

  • BW_channel_CA - агрегированная пропускная способность канала всех CC

Центрируйте компонент нижней несущей в основной полосе частот (Fc_offset(1) = 0 Гц) и вычислите центральную частоту для остальных CC. Чтобы определить центральные частоты путем следования методу, описанному в TS 38.104 Section 5.3A, необходимо вычислить минимальные полосы защиты и минимальные интервалы CC. Кроме того, чтобы выбрать свои собственные центральные частоты, выберите непустое ccSpacings вектор.

% Get the largest SCS configuration, |SCSConfig|, among the SCS
% configurations supported for each two consecutive channel bandwidths to
% obtain the minimum guardband, as described in TS 38.104 Section 5.4.1.2.
table = hGetGBTable(frequencyRange); % Minimum guardband table
if isequal(frequencyRange,'FR1')
    if any(channelBandwidths(:) == 5)
        SCSConfig = 1; 
    else
        SCSConfig = 2; 
    end
else
    SCSConfig = 3;
end

% Calculate the minimum guardband, as described in TS 38.104 Section 5.3.3
% Table 5.3.3-1 for FR1 and Table 5.3.3-1 for FR2, to obtain the minimum CC
% spacings.
minimumGuardBand = zeros(1,numCC);
NDLRB = zeros(1,numCC);
scs = strcat(num2str(2^SCSConfig*15),'kHz'); % Common SCS in kHz to extract 
                                             % minimum guardband 
for i = 1:numCC 
    NDLRB(i) = wavegen{i}.Config.SCSCarriers{1}.NSizeGrid;
    minimumGuardBand(i) = table{{scs},{strcat(num2str(channelBandwidths(i)),...
        'MHz');}}; % kHz
    minimumGuardBand(i) = minimumGuardBand(i)*1e-3; % MHz
end

% Compute the minimum CC spacings, as defined in TS 38.104 Section
% 5.4.1.2. Use these spacings to calculate the center frequencies and for
% filtering each CC.
minCCSpacings = zeros(1,numCC-1); % Minimum CC spacing
for k = 2:numCC
    minCCSpacings(k-1) = hNRCarrierAggregationChannelSpacing( ...
        channelBandwidths(k-1), channelBandwidths(k), minimumGuardBand(k-1), ...
        minimumGuardBand(k),channelRaster,SCSConfig); % MHz
end

% Determine the center frequency for each CC with respect to 0 Hz.
% Initially, the lower carrier frequency is at baseband (Fc_offset(1) = 0 Hz).
Fc_offset = zeros(1,numCC);
if isempty(ccSpacings)
    ccSpacings = minCCSpacings;
end
for k = 2:numCC
    Fc_offset(k) = Fc_offset(k-1) + ccSpacings(k-1); % MHz
end

Вычислите смещения частоты от нижней и верхней центральных частот к нижней и верхней агрегированным ребрам полосы пропускания, соответственно, как описано в TS 38.104 Section 5.3A.

F_offset_low = (NDLRB(1)*12+1)*(SCSs(1)*1e-3)/2 + minimumGuardBand(1); % MHz
F_offset_high = (NDLRB(end)*12-1)*(SCSs(end)*1e-3)/2 + minimumGuardBand(end); %MHz

Вычислите нижние и верхние ребра агрегированной полосы пропускания канала, раздел 5.3A TS 38.104.

F_edge_low = Fc_offset(1) - F_offset_low; % MHz
F_edge_high = Fc_offset(end) + F_offset_high; % MHz

Вычислите агрегированную пропускную способность канала, раздел TS 38.104 5.3A

BW_channel_CA = F_edge_high - F_edge_low; % MHz
fprintf('BW_channel_CA: %0.4f MHz\n',BW_channel_CA);
BW_channel_CA: 141.0800 MHz

Определите сдвиг частоты к центру агрегированной полосы пропускания канала в полосе частот основной полосы (0 Гц).

shiftToCenter = -1*(BW_channel_CA/2 + F_edge_low);

% Center aggregated bandwidth at baseband
Fc_offset = Fc_offset + shiftToCenter;
F_edge_low = Fc_offset(1) - F_offset_low;
F_edge_high = Fc_offset(end) + F_offset_high;

% Display frequency band edges
fprintf('F_edge_low:  %0.4f MHz\n',F_edge_low);
F_edge_low:  -70.5400 MHz
fprintf('F_edge_high: %0.4f MHz\n',F_edge_high);
F_edge_high: 70.5400 MHz
fprintf('F_offset_low:  %0.4f MHz\n',F_offset_low);
F_offset_low:  30.7050 MHz
fprintf('F_offset_high: %0.4f MHz\n',F_offset_high);
F_offset_high: 20.6750 MHz
% Display carrier frequencies
fprintf('\n');
for i = 1:numCC
    fprintf('Component Carrier %d:\n',i);
    fprintf('   Fc: %0.4f MHz\n', Fc_offset(i));
end
Component Carrier 1:
   Fc: -39.8350 MHz
Component Carrier 2:
   Fc: 9.9650 MHz
Component Carrier 3:
   Fc: 49.8650 MHz

Вычисление скорости сверхчастоты дискретизации

Вычислите необходимые коэффициенты передискретизации для каждой несущей компонента, OSRs, чтобы использовать общую частоту дискретизации для агрегированной формы волны.

% Obtain sample rates of the component carriers
CCSR = zeros(1,numCC);
carriers = cell(1,numCC);
for i = 1:numCC
    carriers{i} = nrCarrierConfig;
    carriers{i}.NCellID = nCellIDs(i);
    carriers{i}.NSizeGrid = NDLRB(i);
    carriers{i}.SubcarrierSpacing = SCSs(i);
    carriers{i}.CyclicPrefix = wavegen{i}.Config.BandwidthParts{1}.CyclicPrefix;
    info = nrOFDMInfo(carriers{i});
    CCSR(i) = info.SampleRate; % Hz
end

% Calculate the oversampling ratio for the largest BW CC to ensure the
% waveform occupies a maximum of 85% of the total bandwidth, |bwfraction|
bwfraction = 0.85; % Bandwidth utilization of 85%
OSR = (BW_channel_CA/bwfraction)/(max(CCSR)/1e6);

% To simplify the resampling operation, choose an oversampling ratio which
% is a power of 2: calculate the next power of two above OSR
OSR = 2^ceil(log2(OSR));

% Calculate the overall sample rate for the aggregated waveform
SR = OSR*max(CCSR); % Hz
fprintf('\nOutput sample rate: %0.4f Ms/s\n\n',SR/1e6);
Output sample rate: 245.7600 Ms/s
% Calculate the individual oversampling factors for the component carriers
OSRs = SR./CCSR;

Генерация сигналов и агрегация несущих

Вызовите generateWaveform функцию из hNRReferenceWaveformGenerator helper файл, чтобы сгенерировать форму волны для каждого CC. Переопределите каждую несущую на общую частоту дискретизации, частотно модулируйте несущие на соответствующую центральную частоту и, наконец, агрегируйте CC, чтобы сформировать объединенную форму волны.

% Generate and aggregate the component carriers
waveform = 0;
tmwaveinfo = cell(1,numCC);
waveInfo = cell(1,numCC);
resourcesInfo = cell(1,numCC);
frequencyShifter = comm.PhaseFrequencyOffset('SampleRate',SR);
for i = 1:numCC
    % Generate each CC
    [wf,waveInfo{i},resourcesInfo{i}] = generateWaveform(wavegen{i},...
        numSubframes);
    
    % Resample the CCs so that they have the same sample rate  
    wf = resample(wf,OSRs(i),1)/OSRs(i);
    
    % Frequency modulate each CC to the appropiate center frequency
    frequencyShifter.FrequencyOffset = Fc_offset(i)*1e6;
    wf = frequencyShifter(wf);
    frequencyShifter.release();
    
    % Aggregate the CCs to form the combined signal
    waveform = waveform + wf;
end

Построение совокупного спектра несущих

Отобразите спектр агрегированного сигнала несущей при помощи hNRCarrierAggregationPlotSpectrum вспомогательная функция. График спектра показывает отдельные полосы пропускания несущей. Этот пример не преобразует форму волны вверх к радиочастоте (RF), центр агрегированной полосы пропускания находится в полосе модулирующих частот (0 Гц).

specPlot = hNRCarrierAggregationPlotSpectrum(waveform,SR,...
    'Power Spectrum of Carrier Aggregation',{'Signal spectrum'});

Figure Spectrum Analyzer contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes with title Power Spectrum of Carrier Aggregation contains an object of type line. This object represents Signal spectrum.

Демодуляция и фильтрация CC

Выберите CC, затем демодулируйте, фильтруйте и понижайте значение CC по вашему выбору, следуя этим шагам.

  • Вывод CC на полосу частот (0 Гц)

  • Вычислите частоты полосы пропускания и полосы упора фильтра

  • Отфильтровывайте соседние CC с помощью спроектированного фильтра и понижайте значение CC.

% Verify carrier of interest ID
if CCofInterest > numCC || CCofInterest <= 0 || mod(CCofInterest,1) ~= 0
    error('nr5g:NRDownlinkCarrierAggregationExample:CCOutOfRange',...
        'Cannot demodulate CC number %d, choose an integer number that falls between 1 and %d\n',...
        CCofInterest, numCC) ;
end
fprintf(1,'Extracting CC number %d: \n', CCofInterest);
Extracting CC number 2: 
% Define downsampling filter order
filterOrder = 201;

% Precalculate the filter passband and stopband values for all CC
firPassbandVec = (NDLRB*12-1).*(SCSs*1e-3)/2 / (SR/1e6/2);
firStopbandVec = hNRCarrierAggregationStopband(minCCSpacings,NDLRB,SR,SCSs);

% Choose the passband and stopband values for the carrier of interest
firPassband = firPassbandVec(CCofInterest);
firStopband = firStopbandVec(CCofInterest);

% Pad signal with zeros to consider filter transient response length
waveform = [waveform; zeros(filterOrder*2,size(waveform,2))];

% Center the carrier of interest at 0 Hz
frequencyShifter.FrequencyOffset = -Fc_offset(CCofInterest)*1e6;
demodulatedCC = frequencyShifter(waveform);

% To ease the filter design requirements, apply the downsampling in two
% stages if necessary. Use a downsampling factor of 4 in the initial stage.
% If the quality of the resulting signal is not as required, consider a
% different filter design in this initial stage.
if (firStopband < 0.1)
    % Downsample by 4 in the initial stage
    SRC = 4;
    demodulatedCC = resample(demodulatedCC,1,SRC);
    % Update passband and stopband values
    firPassband = firPassband * SRC;
    firStopband = firStopband * SRC;
else
    % Do not apply an extra downsampling 
    SRC = 1;
end

% Design the lowpass filter to filter out the CC of your choice
frEdges = [0 firPassband firStopband 1];
firFilter = dsp.FIRFilter;
firFilter.Numerator = firpm(filterOrder,frEdges,[1 1 0 0]);

% Display the response of the designed filter
fvtool(firFilter,'Analysis','freq');

Figure Filter Visualization Tool - Magnitude Response (dB) and Phase Response contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) and Phase Response contains an object of type line.

% Filter the signal to extract the component of interest
rxWaveform  = firFilter(demodulatedCC);

% Plot the demodulated and filtered spectra
filteredSpecPlot = ...
    hNRCarrierAggregationPlotSpectrum([demodulatedCC, rxWaveform],SR,...
            'Demodulated and Filtered Waveform Power Spectrum',...
            {'Carrier aggregated signal' 'Filtered signal'});

Figure Spectrum Analyzer contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes with title Demodulated and Filtered Waveform Power Spectrum contains 2 objects of type line. These objects represent Carrier aggregated signal, Filtered signal.

% Downsample the filtered carrier to its baseband rate
rxWaveform = downsample(rxWaveform,OSRs(CCofInterest)/SRC);

Измерения EVM

The hNRPDSCHEVM функция helper возвращает PDSCH EVM путем выполнения синхронизации, демодуляции OFDM, оценки канала и эквализации. Функция отображает EVM для каждого паза и системы координат и общее EVM, усредненное по всей входной форме волны. Функция также строит графики: EVM на символ OFDM, паз, поднесущая и общий EVM.

% Parameterize the channel estimator configuration using the structure |cfg|
cfg = struct();
cfg.Evm3GPP = true; % To measure EVM as defined in TS 38.104, Annex B(FR1) 
                    % / Annex C(FR2) set |Evm3GPP| to |true|. 
cfg.TargetRNTIs = [];
cfg.PlotEVM = true;
cfg.DisplayEVM = true;
cfg.Label = wavegen{CCofInterest}.ConfiguredModel{1};

% Perform EVM measurements and plot results
[evmInfo,eqSym,refSym] = hNRPDSCHEVM(wavegen{CCofInterest}.Config,...
    rxWaveform,cfg);
Low edge RMS EVM, Peak EVM, slot 1: 3.092 8.591%
High edge RMS EVM, Peak EVM, slot 1: 2.795 8.020%
Low edge RMS EVM, Peak EVM, slot 2: 2.996 8.556%
High edge RMS EVM, Peak EVM, slot 2: 2.774 7.533%
Low edge RMS EVM, Peak EVM, slot 3: 3.114 9.851%
High edge RMS EVM, Peak EVM, slot 3: 2.796 7.604%
Low edge RMS EVM, Peak EVM, slot 4: 2.972 8.648%
High edge RMS EVM, Peak EVM, slot 4: 2.784 7.600%
Low edge RMS EVM, Peak EVM, slot 5: 2.949 8.783%
High edge RMS EVM, Peak EVM, slot 5: 2.774 7.659%
Low edge RMS EVM, Peak EVM, slot 6: 3.079 9.422%
High edge RMS EVM, Peak EVM, slot 6: 2.783 7.265%
Low edge RMS EVM, Peak EVM, slot 10: 3.118 10.700%
High edge RMS EVM, Peak EVM, slot 10: 2.779 8.086%
Low edge RMS EVM, Peak EVM, slot 11: 3.070 9.473%
High edge RMS EVM, Peak EVM, slot 11: 2.767 7.837%
Low edge RMS EVM, Peak EVM, slot 12: 3.053 8.774%
High edge RMS EVM, Peak EVM, slot 12: 2.780 7.284%
Low edge RMS EVM, Peak EVM, slot 13: 2.993 8.781%
High edge RMS EVM, Peak EVM, slot 13: 2.792 7.980%
Low edge RMS EVM, Peak EVM, slot 14: 2.981 8.352%
High edge RMS EVM, Peak EVM, slot 14: 2.789 7.437%
Low edge RMS EVM, Peak EVM, slot 15: 2.930 8.303%
High edge RMS EVM, Peak EVM, slot 15: 2.791 7.852%
Low edge RMS EVM, Peak EVM, slot 16: 3.023 8.961%
High edge RMS EVM, Peak EVM, slot 16: 2.788 7.686%
Averaged low edge RMS EVM, frame 0: 3.029%
Averaged high edge RMS EVM, frame 0: 2.784%
Averaged RMS EVM frame 0: 3.029%

Figure contains 3 axes. Axes 1 with title EVM vs OFDM symbol contains 2 objects of type line. These objects represent rms EVM, peak EVM. Axes 2 with title EVM vs slot contains 2 objects of type line. These objects represent rms EVM, peak EVM. Axes 3 with title EVM vs subcarrier contains 2 objects of type line. These objects represent rms EVM, max EVM.

Figure EVM (%) contains an axes. The axes with title EVM resource grid contains an object of type surface.

Figure contains an axes. The axes with title Equalized symbols constellation contains 3 objects of type line.

Averaged overall RMS EVM: 3.029%
Overall Peak EVM = 10.7004%

Декодирование PDSCH

Декодируйте PDSCH восстановленного сигнала и проверьте результат CRC на наличие ошибок.

% Perform time synchronization on the input waveform
offset = nrTimingEstimate(carriers{CCofInterest},rxWaveform,...
    waveInfo{CCofInterest}.ResourceGridBWP);
rxWaveform = rxWaveform(1+offset:end,:);

% Perform OFDM demodulation
rxGrid = nrOFDMDemodulate(carriers{CCofInterest},rxWaveform);

% Get the allocated slots and OFDM symbols per slot
allocatedSlots = zeros(1,size(resourcesInfo{CCofInterest}.WaveformResources.PDSCH.Resources,2));
for i=1:length(allocatedSlots)
    allocatedSlots(i) = resourcesInfo{CCofInterest}.WaveformResources.PDSCH.Resources(i).NSlot;
end
L = carriers{CCofInterest}.SymbolsPerSlot; % OFDM symbols per slot

% Create a DLSCH decoder System object
decodeDLSCH = nrDLSCHDecoder;
decodeDLSCH.MultipleHARQProcesses = false;
decodeDLSCH.TargetCodeRate = wavegen{CCofInterest}.Config.PDSCH{1}.TargetCodeRate;
decodeDLSCH.LDPCDecodingAlgorithm = 'Layered belief propagation';
decodeDLSCH.MaximumLDPCIterationCount = 6;

for NSlot=1:length(allocatedSlots)
    % Extract slot
    SlotID = allocatedSlots(NSlot);
    rxSlot = rxGrid(:,(1:L)+(SlotID*L),:);
    refSlot = waveInfo{CCofInterest}.ResourceGridBWP(:,(1:L)+(SlotID*L),:);
    
    % Perform channel estimation
    [estChannelGrid,noiseEst] = nrChannelEstimate(carriers{CCofInterest},...
        rxSlot,refSlot);
            
    % Get PDSCH resource elements from the received grid and channel estimate
    pdschIndices = resourcesInfo{CCofInterest}.WaveformResources.PDSCH.Resources(NSlot).ChannelIndices;
    [pdschRx,pdschHest] = nrExtractResources(pdschIndices,rxSlot,estChannelGrid);
    
    % Perform equalization
    [pdschEq,csi] = nrEqualizeMMSE(pdschRx,pdschHest,noiseEst);
    
    % Perform layer demapping, symbol demodulation, and descrambling
    modulation = wavegen{CCofInterest}.Config.PDSCH{1}.Modulation;
    RNTI = wavegen{CCofInterest}.Config.PDSCH{1}.RNTI;
    [dlschLLRs,rxSymbols] = nrPDSCHDecode(pdschEq,modulation,...
        carriers{CCofInterest}.NCellID,RNTI,noiseEst);
    
    % Scale LLRs by CSI
    csi = nrLayerDemap(csi); % CSI layer demapping
    NumCW = size(resourcesInfo{CCofInterest}.WaveformResources.PDSCH.Resources(NSlot).Codeword,2);
    for cwIdx = 1:NumCW
        Qm = length(dlschLLRs{cwIdx})/length(rxSymbols{cwIdx}); % Bits per symbol
        csi{cwIdx} = repmat(csi{cwIdx}.',Qm,1);   % Expand by each bit per symbol
        dlschLLRs{cwIdx} = dlschLLRs{cwIdx} .* csi{cwIdx}(:);   % Scaled symbols
    end  
    
    % Calculate the transport block sizes for the codewords in the slot
    trBlkSize = resourcesInfo{CCofInterest}.WaveformResources.PDSCH.Resources(NSlot).TransportBlockSize;
    
    % Decode the DL-SCH transport channel
    decodeDLSCH.TransportBlockLength = trBlkSize;
    NLayers = wavegen{CCofInterest}.Config.PDSCH{1}.NumLayers;
    RVSequence = wavegen{CCofInterest}.Config.PDSCH{1}.RVSequence;
    [decbits,crc] = decodeDLSCH(dlschLLRs,modulation,NLayers,RVSequence);
     
    % Display the CRC status
    if crc
        disp(['Slot ' num2str(SlotID) ': CRC failed']);
    else
        disp(['Slot ' num2str(SlotID) ': CRC passed']);
    end
end
Slot 1: CRC passed
Slot 2: CRC passed
Slot 3: CRC passed
Slot 4: CRC passed
Slot 5: CRC passed
Slot 6: CRC passed
Slot 10: CRC passed
Slot 11: CRC passed
Slot 12: CRC passed
Slot 13: CRC passed
Slot 14: CRC passed
Slot 15: CRC passed
Slot 16: CRC passed

Библиография

  1. 3GPP ТС 38.104 "НР; радиопередача и прием базовой станции (BS) "3-ья Генерация партнерский проект; Группа технических спецификаций Радиосеть доступ.

  2. 3GPP ТС 38.101-1 "НР; радиопередача и прием пользовательского оборудования (UE); Часть 1: Область значений 1 Standalone ". 3rd Генерация Partnership Project; Группа технических спецификаций Радиосеть доступ.

  3. 3GPP ТС 38.101-2 "НР; Абонентское оборудование (UE) радиопередача и прием: Часть 2: Область значений 2 Автономный ". 3-ья Генерация Партнерский проект; Группа технических спецификаций Радиосеть доступ.

См. также

Функции

Похожие темы