exponenta event banner

Отчет о проверке соответствия индикатора качества канала (CQI)

В этом примере показано, как измерить производительность передачи данных по индикатору качества канала (CQI) с помощью Toolbox™ LTE в условиях проверки соответствия, определенных в TS36.101 разделе 9.3.2.1.1.

Введение

В этом примере показано использование lteCQISelect функция, которая обеспечивает оценку CQI. Также проверяется эффективность оценки CQI. В этом примере представлены средства тестирования, которые показывают, что инструментарий LTE может удовлетворять тесту производительности отчетности CQI, определенному в TS36.101 разделе 9.3.2.1.1 [1]. Эксплуатационные требования испытания следующие:

  • индекс CQI не в наборе {медиана CQI-1, медиана CQI + 1} должна сообщаться, по меньшей мере, 20% времени;

  • отношение пропускной способности, полученной при передаче транспортного формата, указанного каждым сообщаемым широкополосным индексом CQI, и пропускной способности, полученной при передаче фиксированного транспортного формата, сконфигурированного в соответствии с широкополосной медианой CQI, должно быть > = 1,05;

  • при передаче транспортного формата, указанного каждым сообщаемым широкополосным индексом CQI, среднее значение BLER для указанных транспортных форматов должно быть больше или равно 0,02.

В этом примере проверяется выполнение этих требований.

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

Пример выполняется для длины моделирования 10 кадров при SNR 6.0dB. Большое количество NFrames следует использовать для получения значимых результатов.

NFrames = 10;
SNRdB = 6.0;

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

Настройки eNaseB задаются в структуре enb. Это включает подструктуру PDSCH для конфигурирования PDSCH в соответствии с требованиями теста соответствия: HARQ деактивируется путем установки последовательности RV в нуль и значения CSIMode настроен согласно Таблице 9.3.2.1.1-1 [1] TS36.101.

enb = struct('RC','R.3');         % Set up parameters of RMC R.3
enb = lteRMCDL(enb);
enb.CFI = 3;                      % Reconfigure Control Format Indicator
enb.OCNGPDSCHEnable = 'On';       % Enable OCNG for unallocated PDSCH REs
enb.TotSubframes = 1;             % Reconfigure for a single subframe
enb.PDSCH.RVSeq = 0;              % Disable HARQ
enb.PDSCH.CSIMode = 'PUCCH 1-0';  % Configure the CSI reporting mode
enb.PDSCH.CSI = 'On';             % CSI scaling of soft bits

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

Структура, channel, содержит параметры конфигурации модели канала.

channel.Seed = 10;                  % Channel seed
channel.NRxAnts = 2;                % 2 receive antennas
channel.DelayProfile = 'EPA';       % Delay profile
channel.DopplerFreq = 5.0;          % Doppler frequency
channel.MIMOCorrelation = 'High';   % Multi-antenna correlation
channel.ModelType = 'GMEDS';        % Rayleigh fading model type
channel.NormalizeTxAnts = 'On';     % Normalize for transmit antennas
channel.NormalizePathGains = 'On';  % Normalize delay profile power
channel.InitPhase = 'Random';       % Random initial phases
channel.NTerms = 16;                % Oscillators used in fading model

 % Set channel model sampling rate
ofdmInfo = lteOFDMInfo(enb);
channel.SamplingRate = ofdmInfo.SamplingRate;

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

Блок оценки канала сконфигурирован со структурой cec. Переменная perfectChanEstimator управляет поведением оценщика канала. Допустимые значения: true или false. Если установлено значение true используется совершенный блок оценки канала, иначе используется несовершенная оценка канала, основанная на значениях принятых пилот-сигналов. В этом примере мы обеспечиваем возможность идеальной оценки канала.

% Configure channel estimator
cec.PilotAverage = 'UserDefined';   % Type of pilot symbol averaging
cec.FreqWindow = 9;                 % Frequency window size in REs
cec.TimeWindow = 9;                 % Time window size in REs
cec.InterpType = 'Cubic';           % 2D interpolation type
cec.InterpWindow = 'Centered';      % Interpolation window type
cec.InterpWinSize = 1;              % Interpolation window size

% Channel estimator behavior
perfectChanEstimator = true;

Установка задержки CQI

Установка задержки CQI в подкадрах. Это задержка передачи CQI от UE к eNireB, как определено в таблице 9.3.2.1.1-1 TS36.101 [1]. Следует отметить, что предполагается, что обратная связь CQI является совершенной, причем значения подаются обратно в буфере, а не обратно в восходящей передаче.

cqiDelay = 8; % subframes

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

Основная обработка разделена на две фазы, сконфигурированные с помощью cqiConfig переменная цикла. На этих этапах выполняются два измерения, необходимые для проведения эксплуатационных испытаний, определенных в TS36.101 разделе 9.3.2.1.1 [1]:

UE сообщило CQI. Первый этап (cqiConfig=1) выполняет передачу и прием PDSCH, где схема модуляции и кодирования (MCS) выбирается на основе CQI, сообщенного UE, причем сообщенный CQI обновляется каждые 2 подкадра и подается обратно с задержкой в 8 подкадров. Записывают конечную пропускную способность, BLER и медианную CQI, и BLER (measuredBLER) и отклонение от медианного CQI (measuredAlpha, в процентах) проверяются на соответствие указанным требованиям к производительности.

Медиана CQI. На втором этапе (cqiConfig=2), передача и прием PDSCH выполняются с использованием медианного CQI (medianCQI) определено на первой фазе. Записывается конечная пропускная способность и коэффициент пропускной способности (measuredGamma) между использованием фазы CQI, сообщенной UE, и средней фазой CQI, сообщаемой и проверяемой в соответствии с заданным требованием к производительности.

Обработка выполняется на основе подкадра за подкадром с использованием следующих шагов:

  • Выберите CQI. Для CQI, сообщенного UE, текущий CQI считывается из самого старого значения в буфере CQI. cqiBuffer; для медианного CQI значение CQI всегда устанавливается равным medianCQI (это достигается путем заполнения буфера CQI медианным значением CQI, и буфер не будет обновлен).

  • Выберите MCS в соответствии с CQI. Схема Модуляции и Кодирования (МГЦ) индекс, соответствующий CQI, отобрана посредством справочной таблицы, определенной Таблицей A.4-1 TS36.101 Дистанционное управление 1 FDD CSI RMC (МГц 1).

  • Определение размера транспортного блока и порядка модуляции. Индекс MCS передается в lteMCS функцию, которая вычисляет соответствующий индекс размера транспортного блока (TBS) и порядок модуляции; lteTBS Затем функция используется для вычисления TBS из индекса TBS и количества блоков ресурсов, назначенных PDSCH.

  • Передача и прием сигнала. Данные транспортного блока генерируются и передаются lteRMCDLTool для создания передаваемого сигнала нисходящей линии связи. Затем этот сигнал пропускают через канал замирания и добавляют шум AWGN. Принятый сигнал синхронизируют и демодулируют OFDM и выполняют оценку канала.

  • Измерение пропускной способности PDSCH. PDSCH и DL-SCH декодируются, и для определения пропускной способности данных записывается сообщение/отказ CRC.

  • Обновление CQI. Если обновление CQI запланировано в этом подкадре, используйте оценку канала для обновления CQI с помощью lteCQISelect функция. Обновленное значение CQI записывается в буфер CQI. Если обновление CQI не запланировано в этом подкадре, предыдущее значение CQI используется повторно.

% Initialize variables used for results recording
CQIReport = [];     % reported CQI values
SINRReport = [];    % corresponding SINR values
xaxis = [];         % corresponding subframe numbers

% For each CQI configuration (UE reported and median):
for cqiConfig = 1:2

    if (cqiConfig==1)
        cqiConfigStr = 'UE reported';
    else
        cqiConfigStr = 'median';
    end
    fprintf('\nSimulating with %s CQI at %gdB SNR for %d Frame(s)\n', ...
        cqiConfigStr,SNRdB,NFrames);

    % Initialize CQI values: for UE reported, set to all ones; for median,
    % set to the median of the CQI values for the UE reported run
    if (cqiConfig==1)
        cqiBuffer = ones(1,cqiDelay);
    else
        cqiBuffer = ones(1,cqiDelay)*medianCQI;
    end

    % Initialize variables
    rng('default');     % Default random number generator seed
    totalCRC = [];      % CRC values, used for throughput calculation
    totalTBS = [];      % TBS values, used for throughput calculation
    offsets = 0;        % Initialize frame offset value

    % For each subframe:
    for subframeNo = 0:(NFrames*10-1)

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

        % Select CQI, reading the oldest value from the CQI buffer
        cqiPtr = mod(subframeNo,cqiDelay);
        CQI = cqiBuffer(cqiPtr+1);

        % Select MCS according to CQI using TS36.101 Table A.4-1 CSI RMC
        % RC.1 FDD (MCS.1), which defines the relationship between CQI
        % indices and MCS indices
        IMCSTable = [-1 0 0 2 4 6 8 11 13 16 18 21 23 25 27 27];
        IMCS = IMCSTable(CQI+1);

        % Determine TBS and modulation order
        [ITBS,modulation] = lteMCS(IMCS);
        enb.PDSCH.Modulation = {modulation};
        if (mod(enb.NSubframe,5)==0)
            TBS = 0;
        else
            TBS = double(lteTBS(size(enb.PDSCH.PRBSet,1),ITBS));
        end
        enb.PDSCH.TrBlkSizes(enb.NSubframe+1) = TBS;

        % Determine if a CQI update is required in this subframe, according
        % to reporting periodicity N_pd = 2ms and configuration index
        % cqi-pmi-ConfigurationIndex = 1 from TS36.101 Table 9.3.2.1.1-1
        cqiPeriod = 2; % periodicity N_pd
        cqiOffset = 1; % offset deriving from cqi-pmi-ConfigurationIndex
        cqiUpdate = (mod(subframeNo,cqiPeriod)==cqiOffset);

        % Establish if this subframe actually needs executed for PDSCH
        % reception, CQI estimation or initial timing offset estimation:
        if((TBS~=0 && subframeNo>=(cqiDelay+cqiOffset)) || ...
                (cqiConfig==1 && cqiUpdate) || subframeNo==0)

            % Generate random bits for the subframe
            data = randi([0 1],TBS,1);

            % Create OFDM resource grid containing RMC transmission and
            % perform OFDM modulation.
            txWaveform = lteRMCDLTool(enb,data);

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

            % Pass data through the fading channel model.
            % An additional 25 samples are added to the end of the
            % waveform. These are to cover the range of delays expected
            % from the channel modeling (a combination of implementation
            % delay and channel delay spread)
            rxWaveform = lteFadingChannel(channel, ...
                            [txWaveform ; zeros(25,size(txWaveform,2))]);

            % Calculate noise gain including compensation for downlink
            % power allocation
            SNR = 10^((SNRdB-enb.PDSCH.Rho)/20);

            % Normalize noise power to take account of sampling rate, which
            % is a function of the IFFT size used in OFDM modulation, and
            % the number of antennas
            N0 = 1/(sqrt(2.0*enb.CellRefP*double(ofdmInfo.Nfft))*SNR);

            % Create additive white Gaussian noise
            noise = N0*complex(randn(size(rxWaveform)), ...
                                randn(size(rxWaveform)));

            % Add AWGN to the received time domain waveform
            rxWaveform = rxWaveform + noise;

            % Perform synchronization
            % An offset within the range of delays expected from the
            % channel modeling (a combination of implementation delay and
            % channel delay spread) indicates success
            if (mod(subframeNo,10)==0)
                offset = lteDLFrameOffset(enb,rxWaveform);
                if (offset > 25)
                    offset = offsets(end);
                end
                offsets = [offsets offset]; %#ok<AGROW>
            end
            rxWaveform = rxWaveform(1+offset:end,:);

            % Perform OFDM demodulation on the received data to create
            % the received resource grid
            rxGrid = lteOFDMDemodulate(enb,rxWaveform);

            % Channel estimation
            if (perfectChanEstimator)
                chEstGrid = ...
                   lteDLPerfectChannelEstimate(enb,channel,offset);
                n = lteOFDMDemodulate(enb,noise(1+offset:end,:));
                noiseEst = var(reshape(n,numel(n),1));
            else
                [chEstGrid,noiseEst] = ...
                    lteDLChannelEstimate(enb,enb.PDSCH, ...
                        cec,rxGrid); %#ok<UNRCH>
            end

            % If this subframe requires PDSCH reception:
            if(TBS~=0 && subframeNo>=(cqiDelay+cqiOffset))

                % Decode the PDSCH
                ind = ltePDSCHIndices(enb,enb.PDSCH,enb.PDSCH.PRBSet);
                pdschRx = lteExtractResources(ind,rxGrid) * ...
                        (10^(-enb.PDSCH.Rho/20));
                pdschChEst = lteExtractResources(ind,chEstGrid);
                [rxBits,rxSymbols] = ltePDSCHDecode(enb,enb.PDSCH, ...
                                        pdschRx,pdschChEst,noiseEst);

                % Decode the DL-SCH
                [decbits,crc] = lteDLSCHDecode(enb,enb.PDSCH,TBS,rxBits);

                % Record the CRC and TBS values for final throughput
                % calculation
                totalCRC = [totalCRC crc]; %#ok<AGROW>
                totalTBS = [totalTBS TBS]; %#ok<AGROW>

            end

            % Update CQI:
            if (cqiConfig==1 && cqiUpdate)

                % Perform CQI selection
                [thisCQI,thisSINR] = ...
                    lteCQISelect(enb,enb.PDSCH,chEstGrid,noiseEst);

                % Feed the CQI value back to UE (in a buffer)
                cqiBuffer(cqiPtr+1) = thisCQI;

                % Record values for plotting
                CQIReport = [CQIReport thisCQI];    %#ok<AGROW>
                SINRReport = [SINRReport thisSINR]; %#ok<AGROW>
                xaxis = [xaxis subframeNo];         %#ok<AGROW>

            end

        end

        % For subframes where CQI was not updated, re-use the previous
        % value in the buffer
        if (cqiConfig==1 && ~cqiUpdate)
            cqiBuffer(cqiPtr+1) = cqiBuffer(mod(cqiPtr-1,cqiDelay)+1);
        end

    end

    % Display results for the current CQI configuration
    fprintf('\nResults with %s CQI:\n',cqiConfigStr);
    tputTotal = sum(totalTBS);
    if (cqiConfig==1)

        % Compute and display throughput
        tputUEReported = sum(totalTBS.*(1-totalCRC));
        fprintf('Throughput: %d bits (%0.2f%%)\n', ...
            tputUEReported,tputUEReported/tputTotal*100);

        % Compute and display BLER
        measuredBLER = mean(totalCRC);
        fprintf('BLER: %0.3f (requirement is >= 0.02)\n',measuredBLER);

        % Compute and display median CQI
        medianCQI = ceil(median(CQIReport));
        fprintf('Median CQI: %d\n',medianCQI');

        % Compute and display proportion of CQI values
        % outside +/- 1 of the median
        measuredAlpha = (sum(CQIReport<(medianCQI-1)) + ...
             sum(CQIReport>(medianCQI+1)))/length(CQIReport)*100;
        fprintf(['Percentage of CQI indices outside +/- 1 of median:' ...
            ' %0.2f%% (requirement is >= 20%%)\n'],measuredAlpha);

    else

        % Compute and display throughput
        tputMedian = sum(totalTBS.*(1-totalCRC));
        fprintf('Throughput: %d bits (%0.2f%%)\n', ...
            tputMedian,tputMedian/tputTotal*100);

        % Compute and display throughput ratio
        measuredGamma = tputUEReported/tputMedian;
        fprintf(['Throughput ratio (gamma): %0.3f' ...
            ' (requirement is >= 1.05)'],measuredGamma);

    end

end
Simulating with UE reported CQI at 6dB SNR for 10 Frame(s)

Results with UE reported CQI:
Throughput: 980384 bits (77.98%)
BLER: 0.219 (requirement is >= 0.02)
Median CQI: 10
Percentage of CQI indices outside +/- 1 of median: 30.00% (requirement is >= 20%)

Simulating with median CQI at 6dB SNR for 10 Frame(s)

Results with median CQI:
Throughput: 722304 bits (60.27%)
Throughput ratio (gamma): 1.357 (requirement is >= 1.05)

Результаты графика

Создается фигура с двумя вложенными графиками. Первый подграф показывает оцененное значение SINR для каждого подкадра; второй подграфик показывает сообщенный CQI для каждого подкадра. Это иллюстрирует, как SINR и соответствующий сообщенный CQI изменяются во времени из-за замирания канала.

figure;
subplot(2,1,1);
plot(xaxis,SINRReport,'rx-');
xlabel('Subframe number');
ylabel('Estimated SINR (dB)');
title('Estimated SINR versus subframe number');
hold on;
subplot(2,1,2);
plot(xaxis,CQIReport,'bo-');
xlabel('Subframe number');
ylabel('Selected CQI Index');
title('Selected CQI Index versus subframe number');

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

  1. 3GPP ТС 36.101 «Радиопередача и прием пользовательского оборудования (UE)»