exponenta event banner

Тест соответствия пропускной способности PUSCH

В этом примере показано, как измерить пропускную способность физического общего канала восходящей линии связи (PUSCH) с использованием Toolbox™ LTE в условиях проверки соответствия, определенных в TS36.104.

Введение

TS 36.104 [1] определяет требования к производительности для физического общего канала восходящей линии связи (PUSCH) как минимальную пропускную способность для данного SNR, предполагая повторные передачи гибридного автоматического запроса повторения (HARQ). В этом примере показано, как можно создать тест соответствия с помощью инструментария LTE.

Передача моделируется с использованием модели канала распространения расширенного пешехода A (EPA) с использованием 8 процессов HARQ. Шум канала добавляется к принятому сигналу, который затем демодулируется SC-FDMA, в результате чего получается сетка принятых ресурсов для каждой приемной антенны. Оценка канала выполняется для определения канала между каждой парой передающих/приемных антенн. Выравнивание минимальной среднеквадратической ошибки (MMSE) выполняется на принятой сетке ресурсов с использованием оцененного канала для восстановления сетки ресурсов. Затем данные PUSCH извлекаются и декодируются из этой восстановленной сетки ресурсов. Используя результат блочного CRC, определяют пропускную способность цепочки передачи/приема.

Конфигурация моделирования

Пример выполняется для длины моделирования 1 кадра при SNR -4,1 дБ, -2,0 дБ и 0,1 дБ согласно TS 36.104, таблица 8.2.1.1-1 [1]. Большое количество NFrames следует использовать для получения значимых результатов по производительности. SNRIn может быть массивом значений или скаляром.

NFrames = 1;                % Number of frames to simulate at each SNR
SNRIn = [-4.1, -2.0, 0.1];  % SNR points to simulate

Конфигурация UE

Настройки пользовательского оборудования (UE) указываются в форме структуры.

ue.TotSubframes = 1;    % Total number of subframes to generate a waveform for
ue.NCellID = 10;        % Cell identity
ue.RC = 'A3-2';         % FRC number
ue.PUSCH.NLayers = 1;   % Number of layers
ue.NTxAnts = 1;         % Number of transmit antennas

Конфигурация модели канала распространения

Характеристики модели канала распространения задаются с использованием структуры, содержащей поля, указанные ниже. Они установлены в соответствии с TS 36.104, таблица 8.2.1.1-1 [1].

chcfg.NRxAnts = 2;               % Number of receive antennas
chcfg.DelayProfile = 'EPA';      % Delay profile
chcfg.DopplerFreq = 5.0;         % Doppler frequency
chcfg.MIMOCorrelation = 'Low';   % MIMO correlation
chcfg.Seed = 100;                % Channel seed
chcfg.NTerms = 16;               % Oscillators used in fading model
chcfg.ModelType = 'GMEDS';       % Rayleigh fading model type
chcfg.InitPhase = 'Random';      % Random initial phases
chcfg.NormalizePathGains = 'On'; % Normalize delay profile power
chcfg.NormalizeTxAnts = 'On';    % Normalize for transmit antennas

Конфигурация оценщика канала

Настройки оценки канала определяются с использованием структуры cec. Профиль задержки EPA вызывает медленное изменение отклика канала по частоте. Поэтому используется окно усреднения большой частоты из 13 элементов ресурсов (RE). Опорный сигнал демодуляции (DRS) содержится только в одном символе на слот, поэтому используется окно усреднения времени 1 RE. Это не будет включать в себя пилот-сигналы из соседнего слота при усреднении.

if ue.PUSCH.NLayers == 1
   freqWindow = 13;
else
   freqWindow = 12; % Averaging to take advantage of orthogonal DMRS for multilayer
end
cec.FreqWindow = freqWindow;      % Frequency averaging windows in REs
cec.PilotAverage = 'UserDefined'; % Type of pilot averaging
cec.TimeWindow = 1;               % Time averaging windows in REs
cec.InterpType = 'cubic';         % Interpolation type
cec.Reference = 'Antennas';       % Reference for channel estimation

Конфигурация RMC восходящей линии связи

Для генерации восходящего канала опорной модели (RMC) функции панели инструментов LTE lteRMCUL и lteRMCULTool используются. lteRMCUL создает структуру конфигурации для заданных настроек UE; для данного фиксированного опорного канала (FRC). Эта структура конфигурации построена согласно приложению A [1] TS36.104 и используется lteRMCULTool для генерации модулированного сигнала SC-FDMA. Подструктура PUSCH определяет параметры, связанные с PUSCH; содержит вектор, определяющий пропускную способность транспортных данных на подкадр. Эти длины используются при декодировании общего канала восходящей линии связи (UL-SCH).

% Generate FRC configuration structure for A3-2
frc = lteRMCUL(ue);

% Transport block sizes for each subframe within a frame
trBlkSizes = frc.PUSCH.TrBlkSizes;
codedTrBlkSizes = frc.PUSCH.CodedTrBlkSizes;

% Redundancy version sequence
rvSequence = frc.PUSCH.RVSeq;

Установка частоты дискретизации модели канала распространения

Частота дискретизации для модели канала устанавливается с использованием значения, возвращаемого из lteSCFDMAInfo.

info = lteSCFDMAInfo(frc);
chcfg.SamplingRate = info.SamplingRate;

Цикл обработки

Проверка пропускной способности выполняется в ряде точек SNR. Для определения пропускной способности в точке SNR данные PUSCH анализируются на основе подкадра за подкадром, используя следующие шаги:

  • Обновить текущий процесс HARQ. После каждых 8 подкадров данный процесс HARQ либо несет новые транспортные данные, либо повторно передает ранее отправленные транспортные данные в зависимости от подтверждения (ACK) или отрицательного подтверждения (NACK) на основании результатов CRC. Все это обрабатывается планировщиком HARQ, hHARQScheduling.m.

  • Создание формы сигнала передачи. Использование входных данных, сгенерированных планировщиком HARQ, и frc структура, lteRMCULTool формирует модулированный сигнал SC-FDMA и заполненную сетку ресурсов, содержащую физические каналы и сигналы.

  • Шумное моделирование каналов. Сигнал пропускают через канал замирания и добавляют аддитивный белый гауссовый шум (AWGN).

  • Выполните синхронизацию и демодуляцию SC-FDMA. Принятые символы синхронизируются для учета комбинации задержки реализации и расширения задержки канала. Затем символы демодулируются SC-FDMA.

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

  • Выполните выравнивание MMSE. Оценки канала и шума используются для выравнивания принятых символов PUSCH.

  • Декодируйте PUSCH. Восстановленные символы PUSCH для всех пар передающих и приемных антенн вместе с оценкой шума демодулируются и дескремблируются посредством ltePUSCHDecode для получения оценки принятого кодового слова.

  • Канал UL-SCH Decoding._ Вектор декодированных мягких битов передается в lteULSCHDecode; это декодирует кодовое слово и возвращает ошибку блочного CRC, и это используется для определения пропускной способности системы. Содержимое нового мягкого буфера, harqProc(harqID).decState, доступно на выходе этой функции для использования в следующем подкадре. Размер транспортного блока получают из справочной таблицы размеров для каждого подкадра.

% Initialize variables used in the simulation and analysis
totalBLKCRC = zeros(numel(SNRIn), NFrames*10);   % Total block CRC vector
bitThroughput = zeros(numel(SNRIn), NFrames*10); % Total throughput vector
resultIndex = 1;        % Initialize frame counter index

for SNRdB = SNRIn

    fprintf('\nSimulating at %g dB SNR for a total %d Frame(s)', ...
        SNRdB, NFrames);

    % Calculate required AWGN channel noise
    SNR = 10^(SNRdB/20);
    N = 1/(SNR*sqrt(double(info.Nfft)))/sqrt(2.0);
    rng('default');

    % Store results for every subframe at SNR point
    bitTp = zeros(1, NFrames*10);  % Intermediate bit throughput vector
    blkCRC = zeros(1, NFrames*10); % Intermediate block CRC vector

    % Initialize state of all HARQ processes
    harqProcesses = hNewHARQProcess(frc);
    % Initialize HARQ process IDs to 1 as the first non-zero transport
    % block will always be transmitted using the first HARQ process. This
    % will be updated with the full sequence output by lteRMCULTool after
    % the first call to the function
    harqProcessSequence = 1;

    offsetused = 0;
    for subframeNo = 0:(NFrames*10-1)

        % Update subframe number
        frc.NSubframe = subframeNo;

        % Get HARQ process ID for the subframe from HARQ process sequence
        harqID = harqProcessSequence(mod(subframeNo, length(harqProcessSequence))+1);

        % If there is a transport block scheduled in the current subframe
        % (indicated by non-zero 'harqID'), perform transmission and
        % reception. Otherwise continue to the next subframe
        if harqID == 0
            continue;
        end

        % Update current HARQ process
        harqProcesses(harqID) = hHARQScheduling(...
            harqProcesses(harqID), subframeNo, rvSequence);

        % Update the PUSCH transmission config with HARQ process state
        frc.PUSCH = harqProcesses(harqID).txConfig;
        data = harqProcesses(harqID).data;

        % Create transmit waveform and get the HARQ scheduling ID sequence
        % from 'frcOut' structure output which also contains the waveform
        % configuration and OFDM modulation parameters
        [txWaveform,~,frcOut] = lteRMCULTool(frc, data);

        % Add 25 sample padding. This is to cover the range of delays
        % expected from channel modeling (a combination of
        % implementation delay and channel delay spread)
        txWaveform =  [txWaveform; zeros(25, frc.NTxAnts)]; %#ok<AGROW>

        % Get the HARQ ID sequence from 'frcOut' for HARQ processing
        harqProcessSequence = frcOut.PUSCH.HARQProcessSequence;

        % The initialization time for channel modeling is set each subframe
        % to simulate a continuously varying channel
        chcfg.InitTime = subframeNo/1000;

        % Pass data through channel model
        rxWaveform = lteFadingChannel(chcfg, txWaveform);

        % Add noise at the receiver
        v = N*complex(randn(size(rxWaveform)), randn(size(rxWaveform)));
        rxWaveform = rxWaveform+v;

        % Calculate synchronization offset
        offset = lteULFrameOffset(frc, frc.PUSCH, rxWaveform);
        if (offset < 25)
            offsetused = offset;
        end

        % SC-FDMA demodulation
        rxSubframe = lteSCFDMADemodulate(frc, ...
            rxWaveform(1+offsetused:end, :));

        % Channel and noise power spectral density estimation
        [estChannelGrid, noiseEst] = lteULChannelEstimate(frc, ...
            frc.PUSCH, cec, rxSubframe);

        % Extract REs corresponding to the PUSCH from the given subframe
        % across all receive antennas and channel estimates
        puschIndices = ltePUSCHIndices(frc, frc.PUSCH);
        [puschRx, puschEstCh] = lteExtractResources( ...
            puschIndices, rxSubframe, estChannelGrid);

        % MMSE equalization and symbol scaling
        rxSymbols = lteEqualizeMMSE(puschRx, puschEstCh, noiseEst);
        rxSymbols = rxSymbols*(double(frc.NTxAnts/frc.PUSCH.NLayers));

        % Update frc.PUSCH to carry complete information of the UL-SCH
        % coding configuration
        trBlkSize = trBlkSizes(mod(subframeNo, 10)+1);
        frc.PUSCH = lteULSCHInfo(frc, frc.PUSCH, trBlkSize, 'chsconcat');

        % Decode the PUSCH
        rxEncodedBits = ltePUSCHDecode(frc, frc.PUSCH, rxSymbols);

        % Decode the UL-SCH channel and store the block CRC error for given
        % HARQ process
        [rxDecodedBits, harqProcesses(harqID).blkerr, ...
            harqProcesses(harqID).decState] = lteULSCHDecode(...
            frc, frc.PUSCH, trBlkSize, ...
            rxEncodedBits, harqProcesses(harqID).decState);

        % Store the CRC calculation and total number of bits per subframe
        % successfully decoded
        blkCRC(subframeNo+1) = harqProcesses(harqID).blkerr;
        bitTp(subframeNo+1) = trBlkSize.*(1-harqProcesses(harqID).blkerr);

    end

    % Record the block CRC error and bit throughput for the total number of
    % frames simulated at a particular SNR
    totalBLKCRC(resultIndex, :) = blkCRC;
    bitThroughput(resultIndex, :) = bitTp;
    resultIndex = resultIndex + 1;
end
Simulating at -4.1 dB SNR for a total 1 Frame(s)
Simulating at -2 dB SNR for a total 1 Frame(s)
Simulating at 0.1 dB SNR for a total 1 Frame(s)

Результаты отображения пропускной способности

Результаты пропускной способности строятся как процент от общей пропускной способности и фактической битовой пропускной способности для диапазона значений SNR, вводимых с помощью hPUSCHResults.m.

% Throughput calculation as a percentage
throughput = 100*(1-mean(totalBLKCRC, 2)).';

hPUSCHResults(SNRIn, NFrames, trBlkSizes, throughput, bitThroughput);

Приложение

В этом примере используются эти вспомогательные функции.

Избранная библиография

  1. 3GPP TS 36.104 «Радиопередача и прием базовой станции (BS)»