Создание отчетов теста соответствия Качественной характеристики канала (CQI)

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

Введение

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

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

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

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

Эти тесты в качестве примера, что эти требования удовлетворяются.

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

Пример выполняется в течение продолжительности симуляции 10 систем координат в ОСШ 6.0 дБ. Большое количество NFrames должен использоваться, чтобы привести к значимым результатам.

NFrames = 10;
SNRdB = 6.0;

Настройка eNodeB

настройки eNodeB заданы в структуре 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 до eNodeB, как задано в Таблице 9.3.2.1.1-1 [1] TS36.101. Обратите внимание на то, что обратная связь CQI принята, чтобы быть совершенной со значениями, возвращаемыми в буфере вместо того, чтобы быть возвращенной в восходящей передаче.

cqiDelay = 8; % subframes

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

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

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

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

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

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

  • Выберите MCS according to CQI. Схема Модуляции и Кодирования (MCS) индекс, соответствующий CQI, выбрана посредством интерполяционной таблицы, заданной Табличным A.4-1 CSI TS36.101 Дистанционное управление 1 FDD 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 TS 36.101 "Передача радио оборудования пользователя (UE) и прием"