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

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

Введение

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
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 Элементов Ресурса (REs) используется. Опорный сигнал демодуляции (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). Эта конфигурационная структура создается согласно приложению 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;

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

Тест пропускной способности выполняется по многим точкам ОСШ. Чтобы определить пропускную способность в точке ОСШ, данные 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, Декодирующий._ вектор декодируемых мягких битов, передается 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
        rxSymbols = lteEqualizeMMSE(puschRx, puschEstCh, noiseEst);

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