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

Этот пример измеряет уровень пропускной способности Физического Восходящего Разделяемого Канала (PUSCH) с пространственным мультиплексированием с обратной связью с помощью LTE Toolbox™ согласно сценарию Релиза 10 UL-MIMO с 2 кодовыми комбинациями, на основе условий испытания соответствия, как задано в TS 36.104, Таблице 8.2.1.1-7 [1].

Введение

TS 36.104, Таблица 8.2.1.1-7 [1] задает минимальную часть 70%-й пропускной способности для Физического Восходящего Разделяемого Канала (PUSCH) передача для данного Гибрида принятия Отношения сигнал-шум (SNR) Автоматический Повторный запрос (HARQ) повторные передачи. Нормальный циклический префикс, Расширенный Пешеход канал распространения (EPA5) и Фиксированный ссылочный канал (FRC) A3-2 используется, но исправляется, чтобы передать две тождественно сконфигурированных кодовых комбинации параллельно. Для того, чтобы помочь выбору Предварительного кодирования матричного индикатора (PMI) для пространственного мультиплексирования с обратной связью, Звучание опорным сигналом (SRS) передается, который позволяет оценку канала полного ранга, даже когда PUSCH передается с меньшим количеством слоев передачи, чем антенны передачи.

Если SRS используется, способность PUSCH закорочена как последний символ подкадра, куда SRS передается, не используется для PUSCH ни в каком Оборудовании пользователя (UE) в ячейке.

Настройка симуляции

Пример выполняется в течение продолжительности симуляции 10 систем координат в ОСШ-0.1 дБ согласно TS 36.104, Таблице 8.2.1.1-7 [1]. Большое количество NFrames должен использоваться, чтобы привести к значимым результатам пропускной способности. SNRIn может быть массив значений или скаляра.

NFrames = 10; % Number of frames
SNRIn = -0.1; % SNR range in dB

Настройка UE

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

frc.RC = 'A3-2';                 % FRC number
frc.DuplexMode = 'FDD';          % Duplex mode
frc.TotSubframes = 1;            % Total number of subframes to generate
frc.NCellID = 10;                % Cell identity
frc.CyclicPrefixUL = 'Normal';   % Uplink cyclic prefix length
frc.CyclicPrefix = 'Normal';     % Downlink cyclic prefix length
frc.NTxAnts = 4;                 % Number of transmit antennas

Сконфигурируйте SRS в настройке UE, чтобы допускать оценку канала.

frc.SRS.SubframeConfig = 1;    % Cell-specific schedule: 2 ms periodicity
frc.SRS.NTxAnts = frc.NTxAnts; % Configure SORTD same as no of UE antennas
frc.SRS.BWConfig = 7;          % Cell-specific SRS bandwidth
frc.SRS.BW = 0;                % UE-specific SRS bandwidth
frc.SRS.ConfigIdx = 0;         % UE-specific schedule:  2ms periodicity
frc.SRS.CyclicShift = 0;       % Cyclic shift 0
frc.SRS.SeqGroup = 0;          % Sequence group 0
frc.SRS.SeqIdx = 0;            % Base sequence 0
frc.SRS.TxComb = 0;            % Transmission comb 0
frc.SRS.FreqPosition = 0;      % Frequency-domain position 0
frc.SRS.HoppingBW = 0;         % Disable hopping (as HoppingBW >=0 BW)

Установите задержку PMI пространственного мультиплексирования с обратной связью. Это - задержка PMI, передаваемой от UE до eNodeB.

pmiDelay = 8;

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

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

chcfg.NRxAnts = 4;               % Number of receive antennas
chcfg.DelayProfile = 'EPA';      % Delay profile
chcfg.DopplerFreq = 5.0;         % Doppler frequency
chcfg.MIMOCorrelation = 'Low';   % MIMO correlation
chcfg.Seed = 9;                  % 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

Настройка средства оценки канала

Переменная perfectChanEstimator средства управления образовывают канал поведение средства оценки. Допустимыми значениями является true или false. Когда установлено в true совершенное средство оценки канала используется в противном случае, несовершенная оценка канала используется, на основе значений полученных экспериментальных сигналов.

% Controls channel estimator behavior
perfectChanEstimator = false;      % Valid values are true or false

Несовершенная оценка канала сконфигурирована с помощью структуры cec. Здесь кубичная интерполяция будет использоваться с окном усреднения 12 1 Элементов Ресурса (REs). Это конфигурирует средство оценки канала, чтобы использовать специальный режим, который гарантирует способность к despread, и ортогонализируйте различное наложение передачи PUSCH.

% Channel estimator configuration
cec.PilotAverage = 'UserDefined'; % Type of pilot symbol averaging
cec.FreqWindow = 12;              % Frequency averaging window in REs (special mode)
cec.TimeWindow = 1;               % Time averaging window in REs (special mode)
cec.InterpType = 'Cubic';         % 2D interpolation type

Когда несовершенная оценка канала используется, ссылка требуется. Этим управляют с переменной reference. Допустимые значения:

  • Antennas - Используйте Опорный сигнал Демодуляции PUSCH (DMRS) антенны после предварительного кодирования как ссылка.

  • Layers - Используйте слои PUSCH DMRS в качестве ссылки.

% Point of reference for the imperfect channel estimator
reference = 'Antennas';

% Validate reference is present when imperfect channel estimation used
if (~perfectChanEstimator)
    if (~any(strcmpi(reference,{'Antennas' 'Layers'})))
        error(['Channel estimator reference must be either ''Antennas'...
        ' or ''Layers''.']);
    end
else
    reference = 'Antennas';
end

Настройка RMC-UL

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

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

  • frc.PUSCH.Modulation - Каждая ячейка содержит схему модуляции кодовой комбинации.

  • frc.PUSCH.TrBlkSizes - Каждая строка содержит транспортные размеры блока для кодовой комбинации.

  • frc.PUSCH.CodedTrBlkSizes - Каждая строка содержит закодированные транспортные размеры блока для кодовой комбинации.

  • frc.PUSCH.RVSeq - Каждая строка содержит Версии Сокращения (RVs) для кодовой комбинации.

% Generate parameter structure for single codeword A3-2 FRC
frc = lteRMCUL(frc);

% Then update Physical Uplink Shared Channel (PUSCH) parameters to define
% two identically configured single layer codewords
frc.PUSCH.NLayers = 2;  % the layers are shared across the 2 codewords
frc.PUSCH.Modulation = repmat({frc.PUSCH.Modulation}, 1, 2);
frc.PUSCH.TrBlkSizes = repmat(frc.PUSCH.TrBlkSizes, 2, 1);
frc.PUSCH.RVSeq = repmat(frc.PUSCH.RVSeq, 2, 1);

% Record transport block sizes for each subframe in a frame
trBlkSizes = frc.PUSCH.TrBlkSizes;

% The number of codewords is the number of transport block sizes
ncw = size(trBlkSizes,1);

% Record RV sequence
rvSequence = frc.PUSCH.RVSeq;

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

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

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

Системная обработка

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

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

  • Установите PMI. PMI Взята последовательно из набора PMIs, txPMIs, каждый подкадр и используемый eNodeB, чтобы выбрать матрицу перед кодированием. Когда PMI используется eNodeB для передачи, это заменяется PMI, выбранной UE. Эта PMI затем используется, чтобы выбрать матрицу перед кодированием после pmiDelay подкадры. Первоначально набор pmiDelay случайный PMIs используется.

  • Создайте Форму волны Передачи. Данные, сгенерированные процессом HARQ, передаются lteRMCULTool, который производит модулируемую форму волны OFDM, содержа физические каналы и сигналы.

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

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

  • Оценка канала. Ответ канала и шум оцениваются с помощью или совершенного или несовершенного средства оценки канала. Эти оценки используются, чтобы помочь мягкому декодированию PUSCH. Если несовершенная оценка канала используется, SRS может только быть использован, чтобы улучшить оценку, если ссылка оценки канала является антеннами DMRS (не слои), или количество антенн передачи и слоев равно. Эта информация передается в переменной refGrid то, которое содержит известный, передало символы SRS в их правильных местоположениях. Все другие местоположения представлены NaN.

  • Эквализация, Объединение и Декодирование PUSCH. Эквализация полученной сетки зависит от того, что используется для несовершенной ссылки оценки канала reference: Когда Antennas используется, эквализация выполняется внутри ltePUSCHDecode, умножая входную оценку канала с используемой матрицей перед кодированием. Если Layers используется, эквализация выполняется с помощью lteEqualizeMMSE, и затем ltePUSCHDecode завершает обработку приема под предположением, что вход уже компенсируется.

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

  • Обновите PMI. PMI Выбрана и возвращена к eNodeB для использования в будущих подкадрах. Для совершенной оценки канала PMI обновляется каждый подкадр. Для несовершенной оценки канала только происходит обновление PMI, когда, когда передача SRS происходит и поэтому оценка канала полного ранга доступна, из которого PMI может быть оценена и выбрана.

% Store results for each SNR point and each subframe containing data for
% the whole simulation
nDataTBS = sum(trBlkSizes(:)~=0)*NFrames;
crc = zeros(numel(SNRIn), nDataTBS);  % Total block CRC error vector
tput = zeros(numel(SNRIn), nDataTBS); % Total throughput vector
ResultIndex = 1; % SNR point result index

for SNRdB = SNRIn

    % Configure random number generators
    rng('default');

    % Noise configuration
    fprintf('\nSimulating at %gdB SNR for a total %d Frame(s)', ...
            SNRdB, NFrames);
    SNR = 10^(SNRdB/20);
    N = 1/(SNR*sqrt(double(dims.Nfft)))/sqrt(2.0*frc.NTxAnts);

    % 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;

    % Use random PMIs for the first 'pmiDelay' subframes until feedback is
    % available from the UE if multiple transmit antennas are used
    if (frc.NTxAnts>1)
        pmidims = lteULPMIInfo(frc, frc.PUSCH);
        txPMIs = randi([0 pmidims.MaxPMI], pmidims.NSubbands, pmiDelay);
    end

    % Initialize result store for SNR point tested
    crcSNR = zeros(nDataTBS/ncw, ncw);  % Intermediate block CRC
    tputSNR = zeros(nDataTBS/ncw, ncw); % Intermediate throughput
    dataSubframeIndex = 1;

    % Loop for all subframes at this SNR
    offsetused = 0;
    for subframeNo = 0:(NFrames*10-1)

        % Update subframe number
        frc.NSubframe = mod(subframeNo, 10);

        % If this is an uplink subframe
        duplexDims = lteDuplexingInfo(frc);
        if(strcmp(duplexDims.SubframeType,'Uplink')==1)

            % 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;

            % Set the PMI to the appropriate value in the delay queue (if
            % multiple antennas are being used)
            if (frc.NTxAnts>1)
                pmiIdx = mod(subframeNo, pmiDelay);
                frc.PUSCH.PMI = txPMIs(:, pmiIdx+1);
            end

            % 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;

            % Pass data through the fading channel model. The
            % initialization time for channel modeling is set each subframe
            % to simulate a continuously varying channel.
            chcfg.InitTime = subframeNo/1000;
            rxWaveform = lteFadingChannel(chcfg, txWaveform);

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

            % 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, :));

            % Mark this subframe as not being involved in PMI update
            updatePMI = false;

            % Channel and noise estimation
            if (perfectChanEstimator)
                % Create reference grid - not required for perfect channel
                % estimator, but needed as an input to lteULPMISelect to
                % match call with imperfect channel estimator.
                refGrid = NaN(lteULResourceGridSize(frc)); %#ok

                % Perfect channel estimation, perfect knowledge of all REs
                % and perfect knowledge of channel noise
                estChannelGrid = lteULPerfectChannelEstimate( ...
                    frc, chcfg, offsetused);
                n = lteSCFDMADemodulate(frc, noise(1+offsetused:end, :));
                noiseEst = var(reshape(n, numel(n), 1));
                updatePMI = true;
            else
                % Use imperfect channel estimator with support from the SRS
                % if available
                if (strcmpi(reference, 'Antennas')==1 || ...
                        (frc.NTxAnts == frc.PUSCH.NLayers))
                    refGrid = NaN(lteULResourceGridSize(frc));

                    if (isfield(frc, 'SRS'))
                        [srsIndices, srsIndicesDims] = lteSRSIndices( ...
                            frc, frc.SRS);
                        if (~isempty(srsIndices))
                            srsSymbols = lteSRS(frc, frc.SRS);
                            refGrid(srsIndices) = srsSymbols;
                            updatePMI = true;
                        end
                    end
                elseif (strcmpi(reference, 'Layers')==1)
                    refGrid = NaN(lteULResourceGridSize ...
                              (frc, frc.PUSCH.NLayers));
                end
                cec.Reference = reference;
                [estChannelGrid, noiseEst] = lteULChannelEstimate( ...
                    frc, frc.PUSCH, cec, rxSubframe, refGrid);
            end

            % Shorten PUSCH capacity shortening as appropriate
            if (isfield(frc, 'SRS'))
                srsDims = lteSRSInfo(frc, frc.SRS);
                frc.Shortened = srsDims.IsSRSSubframe;
            else
                frc.Shortened = 0;
            end

            % Set up variable indicating the current transport block sizes
            TBSs = trBlkSizes(:, mod(subframeNo, 10)+1).';

            % 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);

            % Equalization and combining, layer demapping, transform
            % deprecoding, demodulation and descrambling of the received
            % data
            ulschDims = lteULSCHInfo(frc, frc.PUSCH, TBSs, 'chsconcat');
            if (strcmpi(reference, 'Antennas')==1)
                % MMSE equalization occurs inside ltePUSCHDecode
                rxEncodedBits = ltePUSCHDecode(frc, ulschDims, ...
                    puschRx, puschEstCh, noiseEst);
            elseif (strcmpi(reference, 'Layers')==1)
                rxSymbols = lteEqualizeMMSE(puschRx, puschEstCh, noiseEst);
                rxEncodedBits = ltePUSCHDecode(frc, ulschDims, rxSymbols);
            end

            % UL-SCH transport decoding
            [rxdata, harqProcesses(harqID).blkerr, ...
                harqProcesses(harqID).decState] = lteULSCHDecode( ...
                frc, ulschDims, TBSs, rxEncodedBits, ...
                harqProcesses(harqID).decState);

            % Store block CRC and throughput results for subframes
            % containing transport data
            crcSNR(dataSubframeIndex, :) = harqProcesses(harqID).blkerr;
            tputSNR(dataSubframeIndex, :) = TBSs.* ...
                (1-harqProcesses(harqID).blkerr);
            dataSubframeIndex = dataSubframeIndex + 1;

            % Provide PMI feedback (if multiple antennas are being used)
            if (frc.NTxAnts>1)
                if (~any(TBSs) || ~updatePMI)
                    % Use previous PMI value if in a subframe not used for
                    % uplink in TDD, or if PMI update is not configured for
                    % this subframe.
                    PMI = txPMIs(:, mod(pmiIdx-1, pmiDelay)+1);
                else
                    % Update PMI estimate. If not using the perfect channel
                    % estimator, redo channel estimation using only the SRS
                    % for PMI selection purposes.
                    if (~perfectChanEstimator)
                        cec.Reference = 'None';
                        [estChannelGrid, noiseEst] = ...
                            lteULChannelEstimate(frc, frc.PUSCH, cec, ...
                            rxSubframe, refGrid);
                    end
                    PMI = lteULPMISelect(frc, frc.PUSCH, ...
                        estChannelGrid, noiseEst, refGrid, cec);
                end
                txPMIs(:, pmiIdx+1) = PMI;
            end
        end
    end

    % Record the block CRC error and bit throughput for the total number of
    % frames simulated at an SNR point
    crc(ResultIndex, :) = crcSNR(:);
    tput(ResultIndex, :) = tputSNR(:);
    ResultIndex = ResultIndex + 1;
    disp(' ');

end
Simulating at -0.1dB SNR for a total 10 Frame(s) 

Результаты

Результаты пропускной способности для симуляции содержатся в crc и tput. crc матрица, где каждая строка содержит результаты декодирования CRC для конкретного ОСШ. Каждый столбец содержит результат CRC для транспортного блока, содержащего данные PUSCH в ОСШ. tput матрица, где каждая строка содержит битную пропускную способность на подкадр для конкретного ОСШ. Каждый столбец содержит результат пропускной способности для транспортного блока, содержащего данные PUSCH в ОСШ.

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

hMultiCodewordPUSCHResults(SNRIn, NFrames, trBlkSizes, crc, tput);

Приложение

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

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

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