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

Этот пример демонстрирует, как измерить Физический Восходящий Разделяемый Канал (PUSCH) производительность пропускной способности с помощью LTE Toolbox™ под условиями испытания соответствия, как задано в TS36.104: два получают антенны, нормальный циклический префикс, Расширенный Пешеход (EPA5) канал, FRC A3-2 [1].

Введение

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

Передача моделируется с помощью модели канала распространения Расширенного пешехода А. (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

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

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

chcfg.NRxAnts = 2;               % Number of receive antenna
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 Элементов Ресурса (REs) используется. Сигнал ссылки демодуляции (DRS) содержится только в одном символе на слот, поэтому окно усреднения во времени 1 RE используется. Это не будет включать пилотов от смежного слота при усреднении.

cec.PilotAverage = 'UserDefined'; % Type of pilot averaging
cec.FreqWindow = 13;              % Frequency averaging windows in REs
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). Эта конфигурационная структура создается согласно приложению 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;

Установите модель канала распространения выборка уровня

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

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

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

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

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

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

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

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

  • Выполните Канал и Шумовую Степень Спектральная Оценка Плотности. Канал и шумовая степень спектральная плотность, как оценивается, помогают в коррекции и декодировании.

  • Выполните Коррекцию MMSE. Канал и шумовые оценки используются, чтобы компенсировать полученные символы PUSCH.

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

  • Канал UL-SCH, Декодирующий._ вектор декодируемых мягких битов, передается 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 = hPUSCHNewHARQProcess(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 lteRMCDLTool 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) = hPUSCHHARQScheduling(harqProcesses(harqID));
        frc.PUSCH.RV = harqProcesses(harqID).rvSeq(harqProcesses(harqID).rvIdx);
        frc.PUSCH.RVSeq = harqProcesses(harqID).rvSeq(harqProcesses(harqID).rvIdx);

        % 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, harqProcesses(harqID).ulschTransportBlk);

        % 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, 1)]; %#ok<AGROW>

        % Get the HARQ ID sequence from 'enbOut' 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
        rxSymbols = lteEqualizeMMSE(puschRx, puschEstCh, noiseEst);

        % Update frc.PUSCH to carry complete information of the UL-SCH
        % coding configuration
        frc.PUSCH = lteULSCHInfo(frc, ...
            frc.PUSCH, harqProcesses(harqID).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
        trBlkSize = trBlkSizes(mod(subframeNo, 10)+1);
        [rxDecodedBits, harqProcesses(harqID).crc, ...
            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).crc;
        bitTp(subframeNo+1) = ...
            harqProcesses(harqID).trBlkSize.*(1-harqProcesses(harqID).crc);

    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) и прием"