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

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

Введение

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

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

Область Строения

Пример выполняется для длины симуляции 1 система координат при ОСШ -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

Модели канала распространения Строения

Характеристики модели канала распространения устанавливаются с помощью структуры, содержащей поля, указанные ниже. Они устанавливаются в соответствии с ТС 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 Toolbox lteRMCUL и lteRMCULTool используются. lteRMCUL создает структуру строения для заданных настроек UE; характерный для данного Фиксированного Опорного Канала (FRC). Эта конфигурационная структура построена согласно TS36.104 A [1] и используется 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;

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

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

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

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

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

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

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

  • Выполните Эквализация. Оценки канала и шума используются для выравнивания принятых символов 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)

Отображение результатов пропускной способности

Результаты пропускной способности строятся как процент от общей емкости и фактической битовой производительности для области значений ОСШ, вводимых с помощью 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)»