Пропускная способность NR PUSCH

Этот пример измеряет физический восходящий канал совместно использованный канал (PUSCH) пропускная способность ссылки Нового радио (NR) 5G, как задано 3GPP стандарт NR. Это реализует транспорт (восходящий канал совместно использованный канал, UL-SCH) и физический (PUSCH) каналы. Модель передатчика включает символы ссылки демодуляции PUSCH (DM-RS). Этот пример поддерживает кластеризованную строку задержки (CDL), и распространение коснувшейся строки задержки (TDL) образовывает канал и принимает совершенную синхронизацию и оценку канала.

Введение

Этот пример измеряет пропускную способность PUSCH ссылки 5G, как задано 3GPP стандарт NR [1], [2], [3], [4].

Следующий 5G функции NR моделируется:

  • UL-SCH транспортируют кодирование канала

  • PUSCH и генерация PUSCH DM-RS

  • Переменный интервал поднесущей и нумерология кадра (2^n * 15 кГц)

  • Нормальный и расширенный циклический префикс

  • TDL и модели канала распространения CDL

Другие функции симуляции:

  • Книга шифров и некнига шифров базирующиеся схемы передачи PUSCH

  • Дополнительные PUSCH преобразовывают предварительное кодирование

  • Мудрый слот и не слот мудрый PUSCH и отображение DM-RS

  • Совершенная синхронизация и оценка канала

  • Операция HARQ с 16 процессами

Фигура ниже показов цепочка обработки реализована. Для ясности была не использована генерация DM-RS.

Обратите внимание на то, что совершенная синхронизация и совершенное знание канала приняты, т.е. сигналы PUSCH DM-RS не используются в получателе. Обратите внимание на то, что этот пример не включает адаптацию с обратной связью предварительного кодирования MIMO согласно условиям канала. Предварительное кодирование PUSCH MIMO, используемое в примере, следующие:

  • Для основанной на книге шифров передачи матрица MIMO перед кодированием, используемая в модуляции PUSCH, может быть выбрана с помощью параметра TPMI.

  • Специфичная для реализации матрица MIMO перед кодированием (для основанной на некниге шифров передачи или предварительного кодирования MIMO между портами антенны передачи и антеннами для основанной на книге шифров передачи) является единичной матрицей.

Продолжительность симуляции и точки ОСШ

Установите продолжительность симуляции с точки зрения количества кадров на 10 мс. Большое количество NFrames должно использоваться, чтобы привести к значимым результатам пропускной способности. Установите точки ОСШ моделировать. ОСШ задан на RE и применяется, каждый получает антенну.

simParameters = [];             % Clear simParameters variable
simParameters.NFrames = 2;      % Number of 10ms frames
simParameters.SNRIn = [-5 0 5]; % SNR range

Переменная displaySimulationInformation управляет отображением информации о симуляции, такой как ID процесса HARQ, используемый для каждого подкадра. В случае ошибки CRC также отображено значение индекса к последовательности RV.

displaySimulationInformation = true;

UE и настройка PUSCH

Установите основные параметры симуляции. Они включают:

  • Пропускная способность в блоках ресурса (12 поднесущих на блок ресурса)

  • Интервал поднесущей: 15, 30, 60, 120, 240 (kHz)

  • Циклическая длина префикса: нормальный или расширенный

  • ID ячейки

  • Количество передачи и получает антенны

Подструктура, содержащая UL-SCH и параметры PUSCH, также задана. Это включает:

  • Целевой уровень кода

  • Выделенные блоки ресурса (PRBSet)

  • Схема Modulation: 'pi/2-BPSK', 'QPSK', '16QAM', '64QAM', '256QAM'

  • Количество слоев

  • Преобразуйте предварительное кодирование (позволяют/запрещают)

  • Схема передачи PUSCH и MIMO, предварительно кодирующий матричную индикацию (TPMI)

  • Количество портов антенны

  • PUSCH, сопоставляющий тип

  • Параметры конфигурации DM-RS

Другая симуляция широкие параметры:

  • Модель канала распространения: 'TDL' или 'CDL'

Обратите внимание на то, что, если преобразовывают предварительное кодирование, включен, номер слоев должен быть определен к 1.

% Bandwidth, numerology (SCS and CP type) and other general parameters
simParameters.NRB = 52;                % Bandwidth in number of resource blocks (52RBs at 15kHz SCS for 10MHz BW)
simParameters.SubcarrierSpacing = 15;  % 15, 30, 60, 120, 240 (kHz)
simParameters.CyclicPrefix = 'Normal'; % 'Normal' or 'Extended'
simParameters.NCellID = 0;             % Cell identity
simParameters.NTxAnts = 1;             % Number of transmit antennas
simParameters.NRxAnts = 2;             % Number of receive antennas

% UL-SCH/PUSCH parameters
simParameters.PUSCH.TargetCodeRate = 193 / 1024;      % Code rate used to calculate transport block sizes
simParameters.PUSCH.PRBSet = (0:simParameters.NRB-1); % PUSCH PRB allocation
simParameters.PUSCH.SymbolSet = 0:13;            % PUSCH symbol allocation in each slot
simParameters.PUSCH.NohPRB = 0;                  % Additional RE overhead per PRB
simParameters.PUSCH.EnableHARQ = true;           % Enable/disable HARQ, if disabled, single transmission with RV=0, i.e. no retransmissions
simParameters.PUSCH.Modulation = 'QPSK';         % 'pi/2-BPSK', 'QPSK', '16QAM', '64QAM', '256QAM'
simParameters.PUSCH.NLayers = 1;                 % Number of PUSCH layers
simParameters.PUSCH.RNTI = 1;                    % Radio Network Temporary Identifier
simParameters.PUSCH.TransformPrecoding = false;  % Enable/disable transform precoding
simParameters.PUSCH.TxScheme = 'nonCodebook';    % Transmission scheme ('nonCodebook','codebook')
simParameters.PUSCH.NAntennaPorts = 1;           % Number of antenna ports for codebook based precoding
simParameters.PUSCH.TPMI = 0;                    % Precoding matrix indicator for codebook based precoding
% PUSCH DM-RS configuration
simParameters.PUSCH.PUSCHMappingType = 'A';      % PUSCH mapping type ('A'(slot-wise),'B'(non slot-wise))
simParameters.PUSCH.DMRSTypeAPosition = 2;       % Mapping type A only. First DM-RS symbol position (2,3)
simParameters.PUSCH.DMRSLength = 1;              % Number of front-loaded DM-RS symbols (1(single symbol),2(double symbol))
simParameters.PUSCH.DMRSAdditionalPosition = 1;  % Additional DM-RS symbol positions (max range 0...3)
simParameters.PUSCH.DMRSConfigurationType = 1;   % DM-RS configuration type (1,2)
simParameters.PUSCH.NumCDMGroupsWithoutData = 2; % CDM groups without data
simParameters.PUSCH.NIDNSCID = 0;                % Scrambling identity (0...65535)
simParameters.PUSCH.NSCID = 0;                   % Scrambling initialization (0,1)
simParameters.PUSCH.NRSID = 0;                   % Scrambling ID for low-PAPR sequences (0...1007)
simParameters.PUSCH.GroupHopping = 'Disable';    % Hopping type ('Enable','Disable')

% Define the propagation channel type
simParameters.ChannelType = 'TDL'; % 'CDL' or 'TDL'

Создайте конфигурационную структуру UE ue и конфигурационная структура PUSCH pusch.

ue = simParameters;
pusch = simParameters.PUSCH;

Для ключевых параметров симуляции задайте локальные переменные для удобства.

snrIn = simParameters.SNRIn;
nTxAnts = simParameters.NTxAnts;
nRxAnts = simParameters.NRxAnts;
channelType = simParameters.ChannelType;

Настройка модели канала распространения

Создайте объект модели канала. И CDL и модели канала TDL поддерживаются [5].

if strcmpi(channelType,'CDL')

    channel = nrCDLChannel;
    channel.DelayProfile = 'CDL-A';
    [txsize,rxsize] = hArrayGeometry(nTxAnts,nRxAnts,'uplink');
    channel.TransmitAntennaArray.Size = txsize;
    channel.ReceiveAntennaArray.Size = rxsize;

else

    channel = nrTDLChannel;
    channel.DelayProfile = 'TDL-A';
    channel.NumTransmitAntennas = nTxAnts;
    channel.NumReceiveAntennas = nRxAnts;

end

channel.DelaySpread = 30e-9; % in seconds
channel.MaximumDopplerShift = 10; % in Hz

Уровень выборки для модели канала установлен с помощью значения, возвращенного от hOFDMInfo.

waveformInfo = hOFDMInfo(ue);
channel.SampleRate = waveformInfo.SamplingRate;

Получите максимальное количество задержанных выборок каналом многопутевой компонент. Это вычисляется от пути к каналу с самой большой задержкой и задержкой реализации фильтра канала. Это требуется позже сбросить фильтр канала, чтобы получить полученный сигнал.

chInfo = info(channel);
maxChDelay = ceil(max(chInfo.PathDelays*channel.SampleRate));
maxChDelay = maxChDelay + chInfo.ChannelFilterDelay;

Обработка цикла

Чтобы определить пропускную способность в каждой точке ОСШ, данные PUSCH анализируются на экземпляр передачи с помощью следующих шагов:

  • Обновите текущий процесс HARQ. Проверяйте CRC предыдущей передачи для данного процесса HARQ. Определите, требуется ли повторная передача. Если это не так сгенерируйте новые данные.

  • Сгенерируйте сетку ресурса. Кодирование канала выполняется nrULSCH. Это работает с входным транспортным обеспеченным блоком. Внутренне, это сохраняет копию транспортного блока в случае, если повторная передача требуется. Закодированные биты модулируются nrPUSCH. Специфичное для реализации предварительное кодирование MIMO применяется к получившемуся сигналу. Обратите внимание на то, что, если TxScheme='codebook', основанное на книге шифров предварительное кодирование MIMO будет уже применено в nrPUSCH, и специфичное для реализации предварительное кодирование MIMO является дополнительным этапом предварительного кодирования MIMO.

  • Сгенерируйте форму волны. Сгенерированной сеткой является затем модулируемый OFDM.

  • Образцовый шумный канал. Форма волны передается через CDL или TDL, исчезающий канал. AWGN добавляется. ОСШ для каждого слоя задан на RE, и на получают антенну.

  • Выполните синхронизацию и демодуляцию OFDM. Информация, возвращенная каналом, используется для совершенной синхронизации. Синхронизируемым сигналом является затем демодулируемый OFDM.

  • Выполните совершенную оценку канала. Совершенная оценка канала используется.

  • Извлеките PUSCH и выполните коррекцию. Элементы ресурса, соответствующие выделению PUSCH, извлечены от полученной сетки ресурса OFDM и оценки канала с помощью nrExtractResources. Полученными элементами ресурса PUSCH является затем MMSE, компенсируемый с помощью nrEqualizeMMSE.

  • Декодируйте PUSCH. Компенсируемые символы PUSCH, наряду с шумовой оценкой, демодулируются и дескремблированы nrPUSCHDecode, чтобы получить оценку полученных кодовых комбинаций.

  • Декодируйте Восходящий Разделяемый Канал (UL-SCH) и сохраните ошибку блока CRC для процесса HARQ. Вектор декодируемых мягких битов передается nrULSCHDecoder, который декодирует кодовую комбинацию и возвращается, ошибка блока CRC раньше определяла пропускную способность системы.

% Array to store the maximum throughput for all SNR points
maxThroughput = zeros(length(snrIn),1);
% Array to store the simulation throughput for all SNR points
simThroughput = zeros(length(snrIn),1);

% Set up Redundancy Version (RV) sequence, number of HARQ processes and
% the sequence in which the HARQ processes are used
if pusch.EnableHARQ
    % From PUSCH demodulation requirements in RAN WG4 meeting #88bis
    % (R4-1814062)
    rvSeq = [0 2 3 1];
else
    % HARQ disabled - single transmission with RV=0, no retransmissions
    rvSeq = 0;
end
% Specify the order in which we cycle through the HARQ processes
NHARQProcesses = 16;
harqSequence = 1:NHARQProcesses;

% Create UL-SCH encoder System object
encodeULSCH = nrULSCH;
encodeULSCH.MultipleHARQProcesses = true;
encodeULSCH.TargetCodeRate = pusch.TargetCodeRate;

% Create UL-SCH decoder System object
decodeULSCH = nrULSCHDecoder;
decodeULSCH.MultipleHARQProcesses = true;
decodeULSCH.TargetCodeRate = pusch.TargetCodeRate;

for snrIdx = 1:numel(snrIn)

    % Reset the random number generator and channel, so that each SNR point
    % will experience the same noise and channel realizations
    rng('default');
    reset(channel);

    % Initialize the state of all HARQ processes and reset the UL-SCH
    % decoder
    harqProcesses = hNewHARQProcesses(NHARQProcesses,rvSeq,1);
    harqProcCntr = 0; % HARQ process counter
    reset(decodeULSCH);

    SNRdB = snrIn(snrIdx);
    fprintf('\nSimulating %s-based transmission scheme (%dx%d) and SCS=%dkHz with %s channel at %gdB SNR for %d 10ms frame(s)\n',pusch.TxScheme,nTxAnts,nRxAnts,ue.SubcarrierSpacing,channelType,SNRdB,ue.NFrames);

    % Total number of OFDM symbols in the simulation period
    NSymbols = ue.NFrames * 10 * waveformInfo.SymbolsPerSubframe;

    % OFDM symbol number associated with start of each PUSCH transmission
    ue.NSymbol = 0;

    % Running counter of the number of PUSCH transmission instances
    % The simulation will use this counter as the slot number for each
    % PUSCH
    pusch.NSlot = 0;

    while ue.NSymbol < NSymbols

        % Calculate the transport block size for this slot
        [puschIndices,dmrsIndices,dmrsSymbols,puschIndicesInfo] = hPUSCHResources(ue,pusch);
        TBS = hPUSCHTBS(pusch,puschIndicesInfo.NREPerPRB - pusch.NohPRB);

        % Get HARQ process index for the current PUSCH from the HARQ index
        % table
        harqProcIdx = harqSequence(mod(harqProcCntr,length(harqSequence))+1);

        % Update current HARQ process information (this updates the RV
        % depending on CRC pass or fail in the previous transmission for
        % this HARQ process)
        harqProcesses(harqProcIdx) = hUpdateHARQProcess(harqProcesses(harqProcIdx),1);

        % HARQ: check CRC from previous transmission, i.e. is a
        % retransmission required?
        NDI = false;
        if harqProcesses(harqProcIdx).blkerr % errored
            if (harqProcesses(harqProcIdx).RVIdx==1) % end of rvSeq
                resetSoftBuffer(decodeULSCH,harqProcIdx-1);
                NDI = true;
            end
        else % no error
            NDI = true;
        end
        if NDI
            trBlk = randi([0 1],TBS,1);
            setTransportBlock(encodeULSCH,trBlk,harqProcIdx-1);
        end

        % UL-SCH encoding
        codedTrBlock = encodeULSCH(pusch.Modulation,pusch.NLayers,puschIndicesInfo.G,harqProcesses(harqProcIdx).RV,harqProcIdx-1);

        % PUSCH modulation, including codebook based MIMO precoding if
        % TxScheme = 'codebook'
        MRB = numel(pusch.PRBSet);
        puschSymbols = nrPUSCH(codedTrBlock,pusch.Modulation,pusch.NLayers,ue.NCellID,pusch.RNTI,pusch.TransformPrecoding,MRB,pusch.TxScheme,pusch.NAntennaPorts,pusch.TPMI);

        % Create resource grid associated with PUSCH transmission period
        puschGrid = zeros(waveformInfo.NSubcarriers,waveformInfo.SymbolsPerSlot,nTxAnts);

        % Implementation-specific PUSCH MIMO precoding and mapping. This
        % MIMO precoding step is in addition to any codebook based
        % MIMO precoding done during PUSCH modulation above
        if (strcmpi(pusch.TxScheme,'codebook'))
            % codebook based MIMO precoding, F precodes between PUSCH
            % transmit antenna ports and transmit antennas
            F = eye(pusch.NAntennaPorts,nTxAnts);
        else
            % non-codebook based MIMO precoding, F precodes between PUSCH
            % layers and transmit antennas
            F = eye(pusch.NLayers,nTxAnts);
        end
        [~,puschAntIndices] = nrExtractResources(puschIndices,puschGrid);
        puschGrid(puschAntIndices) = puschSymbols * F;

        % Implementation-specific PUSCH DM-RS MIMO precoding and mapping.
        % The DM-RS creation in hPUSCHResources above includes codebook
        % based MIMO precoding if applicable
        for p = 1:size(dmrsSymbols,2)
            [~,dmrsAntIndices] = nrExtractResources(dmrsIndices(:,p),puschGrid);
            puschGrid(dmrsAntIndices) = puschGrid(dmrsAntIndices) + dmrsSymbols(:,p) * F(p,:);
        end

        % OFDM modulation
        txWaveform = hOFDMModulate(ue,puschGrid);

        % Pass data through channel model. Append zeros at the end of the
        % transmitted waveform to flush channel content. These zeros take
        % into account any delay introduced in the channel. This is a mix
        % of multipath delay and implementation delay. This value may
        % change depending on the sampling rate, delay profile and delay
        % spread
        txWaveform = [txWaveform; zeros(maxChDelay,size(txWaveform,2))]; %#ok<AGROW>
        [rxWaveform,pathGains,sampleTimes] = channel(txWaveform);

        % Add AWGN to the received time domain waveform
        % Normalize noise power by the IFFT size used in OFDM modulation,
        % as the OFDM modulator applies this normalization to the
        % transmitted waveform. Also normalize by the number of receive
        % antennas, as the default behaviour of the channel model is to
        % apply this normalization to the received waveform
        SNR = 10^(SNRdB/20);
        N0 = 1/(sqrt(2.0*nRxAnts*double(waveformInfo.Nfft))*SNR);
        noise = N0*complex(randn(size(rxWaveform)),randn(size(rxWaveform)));
        rxWaveform = rxWaveform + noise;

        % Perfect synchronization. Use information provided by the channel
        % to find the strongest multipath component
        pathFilters = getPathFilters(channel);
        [offset,mag] = nrPerfectTimingEstimate(pathGains,pathFilters);
        rxWaveform = rxWaveform(1+offset:end,:);

        % Perform OFDM demodulation on the received data to recreate the
        % resource grid
        rxGrid = hOFDMDemodulate(ue,rxWaveform);

        % Perfect channel estimation, use the value of the path gains
        % provided by the channel
        estChannelGrid = nrPerfectChannelEstimate(pathGains,pathFilters,ue.NRB,ue.SubcarrierSpacing,pusch.NSlot,offset,sampleTimes,ue.CyclicPrefix);

        % Get perfect noise estimate (from the noise realization)
        noiseGrid = hOFDMDemodulate(ue,noise(1+offset:end,:));
        noiseEst = var(noiseGrid(:));

        % Apply MIMO precoding to estChannelGrid
        % Linearize 4D matrix and reshape after multiplication
        K = size(estChannelGrid,1);
        estChannelGrid = reshape(estChannelGrid,K*waveformInfo.SymbolsPerSlot*nRxAnts,nTxAnts);
        estChannelGrid = estChannelGrid * F.';
        if (strcmpi(pusch.TxScheme,'codebook'))
            W = nrPUSCHCodebook(pusch.NLayers,pusch.NAntennaPorts,pusch.TPMI,pusch.TransformPrecoding);
            estChannelGrid = estChannelGrid * W.';
        end
        estChannelGrid = reshape(estChannelGrid,K,waveformInfo.SymbolsPerSlot,nRxAnts,[]);

        % Get PUSCH resource elements from the received grid
        [puschRx,puschHest] = nrExtractResources(puschIndices,rxGrid,estChannelGrid);

        % Equalization
        [puschEq,csi] = nrEqualizeMMSE(puschRx,puschHest,noiseEst);

        % Decode PUSCH physical channel
        [ulschLLRs,rxSymbols] = nrPUSCHDecode(puschEq,pusch.Modulation,ue.NCellID,pusch.RNTI,noiseEst,pusch.TransformPrecoding,MRB);

        % Apply channel state information (CSI) produced by the equalizer,
        % including the effect of transform precoding if enabled
        if (pusch.TransformPrecoding)
            MSC = MRB * 12;
            csi = nrTransformDeprecode(csi,MRB) / sqrt(MSC);
            csi = repmat(csi((1:MSC:end).'),1,MSC).';
            csi = reshape(csi,size(rxSymbols));
        end
        csi = nrLayerDemap(csi);
        Qm = length(ulschLLRs) / length(rxSymbols);
        csi = reshape(repmat(csi{1}.',Qm,1),[],1);
        ulschLLRs = ulschLLRs .* csi;

        % Decode the UL-SCH transport channel
        decodeULSCH.TransportBlockLength = TBS;
        [decbits,harqProcesses(harqProcIdx).blkerr] = decodeULSCH(ulschLLRs,pusch.Modulation,pusch.NLayers,harqProcesses(harqProcIdx).RV,harqProcIdx-1);

        % Store values to calculate throughput
        simThroughput(snrIdx) = simThroughput(snrIdx) + (~harqProcesses(harqProcIdx).blkerr * TBS);
        maxThroughput(snrIdx) = maxThroughput(snrIdx) + TBS;

        % Display transport block error information
        if (displaySimulationInformation)
            fprintf('\n(%3.2f%%) HARQ Proc %d: ',100*(ue.NSymbol+size(puschGrid,2))/NSymbols,harqProcIdx);
            estrings = {'passed','failed'};
            rvi = harqProcesses(harqProcIdx).RVIdx;
            if rvi == 1
                ts = sprintf('Initial transmission (RV=%d)',rvSeq(rvi));
            else
                ts = sprintf('Retransmission #%d (RV=%d)',rvi-1,rvSeq(rvi));
            end
            fprintf('%s %s. ',ts,estrings{1+harqProcesses(harqProcIdx).blkerr});
        end

        % Update starting symbol number of next PUSCH transmission
        ue.NSymbol = ue.NSymbol + size(puschGrid,2);

        % Update count of overall number of PUSCH transmissions
        pusch.NSlot = pusch.NSlot + 1;

        % Update HARQ process counter
        harqProcCntr = harqProcCntr + 1;

    end

    % Display the results dynamically in the command window
    if (displaySimulationInformation)
        fprintf('\n');
    end
    fprintf([['\nThroughput(Mbps) for ' num2str(ue.NFrames) ' frame(s) '],'= %.4f\n'], 1e-6*simThroughput(snrIdx)/(ue.NFrames*10e-3));
    fprintf(['Throughput(%%) for ' num2str(ue.NFrames) ' frame(s) = %.4f\n'],simThroughput(snrIdx)*100/maxThroughput(snrIdx));

end
Simulating nonCodebook-based transmission scheme (1x2) and SCS=15kHz with TDL channel at -5dB SNR for 2 10ms frame(s)

(5.00%) HARQ Proc 1: Initial transmission (RV=0) passed. 
(10.00%) HARQ Proc 2: Initial transmission (RV=0) passed. 
(15.00%) HARQ Proc 3: Initial transmission (RV=0) failed. 
(20.00%) HARQ Proc 4: Initial transmission (RV=0) failed. 
(25.00%) HARQ Proc 5: Initial transmission (RV=0) failed. 
(30.00%) HARQ Proc 6: Initial transmission (RV=0) failed. 
(35.00%) HARQ Proc 7: Initial transmission (RV=0) failed. 
(40.00%) HARQ Proc 8: Initial transmission (RV=0) failed. 
(45.00%) HARQ Proc 9: Initial transmission (RV=0) failed. 
(50.00%) HARQ Proc 10: Initial transmission (RV=0) failed. 
(55.00%) HARQ Proc 11: Initial transmission (RV=0) failed. 
(60.00%) HARQ Proc 12: Initial transmission (RV=0) failed. 
(65.00%) HARQ Proc 13: Initial transmission (RV=0) failed. 
(70.00%) HARQ Proc 14: Initial transmission (RV=0) failed. 
(75.00%) HARQ Proc 15: Initial transmission (RV=0) failed. 
(80.00%) HARQ Proc 16: Initial transmission (RV=0) failed. 
(85.00%) HARQ Proc 1: Initial transmission (RV=0) failed. 
(90.00%) HARQ Proc 2: Initial transmission (RV=0) failed. 
(95.00%) HARQ Proc 3: Retransmission #1 (RV=2) passed. 
(100.00%) HARQ Proc 4: Retransmission #1 (RV=2) passed. 

Throughput(Mbps) for 2 frame(s) = 0.5712
Throughput(%) for 2 frame(s) = 20.0000

Simulating nonCodebook-based transmission scheme (1x2) and SCS=15kHz with TDL channel at 0dB SNR for 2 10ms frame(s)

(5.00%) HARQ Proc 1: Initial transmission (RV=0) passed. 
(10.00%) HARQ Proc 2: Initial transmission (RV=0) passed. 
(15.00%) HARQ Proc 3: Initial transmission (RV=0) passed. 
(20.00%) HARQ Proc 4: Initial transmission (RV=0) passed. 
(25.00%) HARQ Proc 5: Initial transmission (RV=0) passed. 
(30.00%) HARQ Proc 6: Initial transmission (RV=0) passed. 
(35.00%) HARQ Proc 7: Initial transmission (RV=0) passed. 
(40.00%) HARQ Proc 8: Initial transmission (RV=0) passed. 
(45.00%) HARQ Proc 9: Initial transmission (RV=0) passed. 
(50.00%) HARQ Proc 10: Initial transmission (RV=0) passed. 
(55.00%) HARQ Proc 11: Initial transmission (RV=0) passed. 
(60.00%) HARQ Proc 12: Initial transmission (RV=0) passed. 
(65.00%) HARQ Proc 13: Initial transmission (RV=0) passed. 
(70.00%) HARQ Proc 14: Initial transmission (RV=0) passed. 
(75.00%) HARQ Proc 15: Initial transmission (RV=0) passed. 
(80.00%) HARQ Proc 16: Initial transmission (RV=0) passed. 
(85.00%) HARQ Proc 1: Initial transmission (RV=0) passed. 
(90.00%) HARQ Proc 2: Initial transmission (RV=0) passed. 
(95.00%) HARQ Proc 3: Initial transmission (RV=0) passed. 
(100.00%) HARQ Proc 4: Initial transmission (RV=0) passed. 

Throughput(Mbps) for 2 frame(s) = 2.8560
Throughput(%) for 2 frame(s) = 100.0000

Simulating nonCodebook-based transmission scheme (1x2) and SCS=15kHz with TDL channel at 5dB SNR for 2 10ms frame(s)

(5.00%) HARQ Proc 1: Initial transmission (RV=0) passed. 
(10.00%) HARQ Proc 2: Initial transmission (RV=0) passed. 
(15.00%) HARQ Proc 3: Initial transmission (RV=0) passed. 
(20.00%) HARQ Proc 4: Initial transmission (RV=0) passed. 
(25.00%) HARQ Proc 5: Initial transmission (RV=0) passed. 
(30.00%) HARQ Proc 6: Initial transmission (RV=0) passed. 
(35.00%) HARQ Proc 7: Initial transmission (RV=0) passed. 
(40.00%) HARQ Proc 8: Initial transmission (RV=0) passed. 
(45.00%) HARQ Proc 9: Initial transmission (RV=0) passed. 
(50.00%) HARQ Proc 10: Initial transmission (RV=0) passed. 
(55.00%) HARQ Proc 11: Initial transmission (RV=0) passed. 
(60.00%) HARQ Proc 12: Initial transmission (RV=0) passed. 
(65.00%) HARQ Proc 13: Initial transmission (RV=0) passed. 
(70.00%) HARQ Proc 14: Initial transmission (RV=0) passed. 
(75.00%) HARQ Proc 15: Initial transmission (RV=0) passed. 
(80.00%) HARQ Proc 16: Initial transmission (RV=0) passed. 
(85.00%) HARQ Proc 1: Initial transmission (RV=0) passed. 
(90.00%) HARQ Proc 2: Initial transmission (RV=0) passed. 
(95.00%) HARQ Proc 3: Initial transmission (RV=0) passed. 
(100.00%) HARQ Proc 4: Initial transmission (RV=0) passed. 

Throughput(Mbps) for 2 frame(s) = 2.8560
Throughput(%) for 2 frame(s) = 100.0000

Результаты

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

figure;
plot(snrIn,simThroughput*100./maxThroughput,'o-.')
xlabel('SNR (dB)'); ylabel('Throughput (%)'); grid on;
if (pusch.TransformPrecoding)
    ofdmType = 'DFT-s-OFDM';
else
    ofdmType = 'CP-OFDM';
end
title(sprintf('%s / NRB=%d / SCS=%dkHz / %s %d/1024 / %dx%d', ...
    ofdmType,ue.NRB,ue.SubcarrierSpacing,pusch.Modulation, ...
    round(pusch.TargetCodeRate*1024),nTxAnts,nRxAnts));

simResults.simParameters = simParameters;
simResults.simThroughput = simThroughput;
simResults.maxThroughput = maxThroughput;

Фигура ниже результатов пропускной способности показов, полученных, моделируя 10 000 подкадров (NFrames = 1000, SNRIn = -16:2:6).

Приложение

Этот пример использует следующие функции помощника:

Выбранная библиография

  1. 3GPP TS 38.211. "NR; Физические каналы и модуляция (Релиз 15)". Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.

  2. 3GPP TS 38.212. "NR; Мультиплексирование и кодирование канала (Релиз 15)". Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.

  3. 3GPP TS 38.213. "NR; процедуры Физического уровня для управления (Релиз 15)". Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.

  4. 3GPP TS 38.214. "NR; процедуры Физического уровня для данных (Релиз 15)". Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.

  5. 3GPP TR 38.901. "Исследование модели канала для частот от 0,5 до 100 ГГц (Релиз 15)". Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.

Смотрите также

Системные объекты

Функции

Для просмотра документации необходимо авторизоваться на сайте