exponenta event banner

Тест соответствия PDCCH

Пример создания RMC PDCCH/PCFICH, определенных в TS 36.101 и используемых в тестах соответствия.

Введение

Этот пример показывает производительность демодуляции PDCCH/PCFICH и определение вероятности обнаружения промахов теста разрешения планирования нисходящей линии связи (PM-dsg), как определено в TS 36.101/TS 36.521-1, раздел 8.4. PDCCH и PCFICH тестируются совместно, и обнаружение пропуска PCFICH подразумевает обнаружение пропуска PDCCH. 1x2 передают/получают промышленные испытания порта антенны в таблице 8.4.1.1-1 [1] TS 36.101 Раздела 8.4.1.1 для справочного канала R.15 PDCCH/PCFICH (дуплексный режим FDD) определяет необходимое пополудни-dsg 1% в SNR-1.7 дБ.

LTE Toolbox™ обеспечивает конфигурацию генератора сигналов нисходящей линии связи, lteRMCDL, для тестов соответствия PDCCH. Работая на покадровой основе при моделировании в конкретном SNR, формируют заполненную сетку ресурсов и модулируют OFDM для создания формы сигнала передачи. Генерируемый сигнал пропускается через шумный канал Расширенного Типичного Городского (ETU). Оценку, выравнивание, демодуляцию и декодирование канала осуществляют в приемнике. Средняя вероятность обнаружения пропуска PDCCH/PCFICH определяется с использованием комбинации принятого CFI и принятого сообщения DCI.

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

Пример выполняется для длины моделирования, равной 1 кадру, чтобы сохранить низкое время моделирования. Ценности SNR включают-1.7 дБ, определенные для R.15 RMC единственный тест порта. Большое количество кадров, NFrames, должны использоваться для получения значимых результатов. SNRIn может быть массивом значений или скаляром.

nFrames = 1;                      % Number of frames to simulate
snrIn = [-3.1 -2.4 -1.7 -1 -0.3]; % SNR points to simulate

Конфигурирование PDCCH/PCFICH

Генератор сигналов нисходящей линии связи lteRMCDLTool генерирует PDSCH, PDCCH, PCFICH и другие физические каналы и сигналы. Здесь мы выполняем тестирование соответствия на R.15 FDD RMC, настраивая PCFICH и каналы PDCCH и производя форму волны. Параметры генератора задаются через структуру rmc. lteRMCDL функция генерирует конфигурации PDSCH RMC, включая связанные PDCCH/PCFICH, и мы можем обновить параметры PDCCH/PCFICH для генерации PDCCH/PCFICH RMC. Здесь мы начинаем при помощи PDSCH RMC, который тесно соответствует установке PDSCH, упомянутой в TS 36.521-1 Разделов 8.4.1.1.4 [2] для R.15 FDD RMC и затем настройки DCI и параметров PDCCH. Данные и управление не передаются на подкадре 5. Поэтому он не декодируется и не считается в сторону пропущенного вычисления обнаружения.

% Setup the PDSCH according to TS 36.521-1 Table A.3.5.1-2 for single port
% which corresponds to R.2 FDD PDSCH RMC
rmc = lteRMCDL('R.2','FDD');

% Setup DCI and PDCCH according to TS 36.101 Section 8.4.1.1 for R.15 FDD
% RMC which requires the CFI, DCI format, HICH group multiplier,
% aggregation level and power to be set as defined for the test
rmc.CFI = 2;                     % OFDM symbols for PDCCH
rmc.Ng = 'One';                  % HICH group multiplier
rmc.PDSCH.DCIFormat = 'Format1'; % Set the DCI Format
rmc.PDSCH.PDCCHFormat = 3;       % Set the aggregation level to be 8
rmc.PDSCH.PDCCHPower = 0;        % Relative power is 0dB for single port

% Setup the OCNG to fill all unused data and control region REs
rmc.OCNGPDSCHEnable = 'On';
rmc.OCNGPDSCHPower = 0;
rmc.OCNGPDCCHEnable = 'On';
rmc.OCNGPDCCHPower = 0;

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

cfg = struct;                    % Initialize channel config structure
cfg.Seed = 6;                    % Channel seed
cfg.NRxAnts = 2;                 % 2 receive antennas
cfg.DelayProfile ='ETU';         % Delay profile
cfg.DopplerFreq = 70;            % Doppler frequency in Hz
cfg.MIMOCorrelation = 'Low';     % Multi-antenna correlation
cfg.NTerms = 16;                 % Oscillators used in fading model
cfg.ModelType = 'GMEDS';         % Rayleigh fading model type
cfg.InitPhase = 'Random';        % Random initial phases
cfg.NormalizePathGains = 'On';   % Normalize delay profile power
cfg.NormalizeTxAnts = 'On';      % Normalize for transmit antennas

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

Переменная perfectChannelEstimator управляет поведением оценщика канала. Допустимые значения: true или false. Если установлено значение true используют совершенную оценку канала, в противном случае используют несовершенную оценку, основанную на значениях принятых пилот-сигналов.

% Channel estimator behavior
perfectChannelEstimator = false;

Несовершенный блок оценки канала сконфигурирован со структурой cec. Профиль задержки ETU вызывает быстрое изменение канала во времени. Поэтому выполняется только усреднение времени по оценкам пилот-сигнала путем установки частотного окна в 1 элемент ресурса (RE). Доплеровская частота 70 Гц вызывает достаточно медленное замирание канала, чтобы обеспечить большое окно усреднения времени. Пилот-сигналы во всем кадре включаются в среднее значение путем установки временного окна в 31 RE.

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

Обработка

Для каждой точки SNR для каждого кадра выполняются следующие операции:

  • Генерация RMC и модуляция OFDM: генерация сигнала, модулированного OFDM, как определено для RMC PDCCH/PCFICH.

  • Модель канала распространения: Модулированный сигнал OFDM передается через канал распространения. Выход канала rxWaveform имеет два столбца, по одному на приемную антенну.

  • Добавить шум канала: Шум канала моделируется AWGN.

  • Синхронизация приемника и демодуляция OFDM: определение задержки, полученной во время распространения. Это вычисляется путем вызова lteDLFrameOffset, который использует первичный и вторичный сигналы синхронизации. Демодуляция OFDM выполняется после синхронизации.

  • Оценка канала: обеспечивает оценку отклика канала в каждом элементе ресурсной сетки для пары передающая/принимающая антенна. Эта оценка затем используется для устранения влияния канала на передаваемый сигнал. Оценка канала также направлена на уменьшение шума канала, возникающего во время передачи, путем усреднения опорных сигналов (пилот-символов).

  • Измерение Miss-Detection: данные PCFICH и PDCCH анализируются по субкадрам. Конкретное значение кадра данных для всех приемных антенн извлекается из решетки принятых сеток, одно и то же определенное значение кадра информации извлекается из оценки отклика канала для всех пар передающих и приемных антенн. Они вместе с оценкой шума вводятся в функцию ltePCFICHDecode, который декодирует данные CFI. Если CFI обнаружен правильно, прием PCFICH успешен, и следующим этапом является прием DCI. Используя оценку канала и оценку шума, сообщение PDCCH восстанавливается с использованием ltePDCCHDecode функция; затем выполняется слепой поиск по этим декодированным битам для восстановления DCI. Если сообщение DCI также принято правильно, передача успешна и используется для определения обнаружения системы.

% dims is a three element vector [K L P]: where K = no of subcarriers,
% L = no of OFDM symbols and P = no of transmit antennas
dims = lteDLResourceGridSize(rmc);  % Determine resource grid dimensions
L = dims(2);                        % Number of OFDM symbols per subframe
P = dims(3);                        % Number of transmit antennas

% Initialize the variables used in the simulation and analysis
resultIndex = 1;                    % Initialize SNR index
initOffsets = 0;                    % Initialize frame offset

% Set the random number generator to default value
rng('default');

% Number of subframes carrying transport blocks with data and control
% within a frame. For RMC R.15 this should be 9, as out of the 10 subframes
% in a frame subframe 5 does not carry any data or control
nDataTBSPerFrame = sum(rmc.PDSCH.TrBlkSizes(:) ~= 0);

% Total Pmdsg vector
totalPmdsg = zeros(numel(snrIn),nDataTBSPerFrame*nFrames);

for snrdb = snrIn
    fprintf('\nSimulating at %gdB SNR for a total %d Frame(s)\n',...
    snrdb,nFrames);

    % Initialize result vector for each SNR point
    totalPmdsgSNR = zeros(nFrames,nDataTBSPerFrame);% Total block CRC

    % Initialize offset vector for each frame
    offsets = initOffsets;

    for FrameNo = 1:nFrames

        % Set the subframe number
        rmc.NSubframe = 0;

        % Generate the waveform
        [txWaveform,txGrid,info] = lteRMCDLTool(rmc,[1 0 0 1]);

        % Initialize result store for frame
        pmdsg = zeros(nDataTBSPerFrame,1);
        dataSubframeIndex = 1;

        % Set sampling rate of channel to that of OFDM modulation
        cfg.SamplingRate = info.SamplingRate;

        % Set channel offset to current frame (1 frame = 10ms)
        cfg.InitTime = (FrameNo-1)*(rmc.TotSubframes)/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(cfg,[txWaveform ; zeros(25,P)]);

        % Noise setup
        SNR = 10^((snrdb-rmc.PDSCH.PDCCHPower)/20);    % Linear SNR

        % 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*rmc.CellRefP*double(info.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 receiver synchronization
        offset = lteDLFrameOffset(rmc,rxWaveform);

        % Determine if frame synchronization was successful
        if (offset > 25)
            offset = offsets(end);
        else
            offsets = [offsets offset]; %#ok
        end
        if (offset>0)
            rxWaveform = rxWaveform(1+offset:end,:);
        end

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

        % Channel estimation
        if(perfectChannelEstimator)
            estChannelGrid = lteDLPerfectChannelEstimate(rmc, cfg, offset);  %#ok<UNRCH>
            n = lteOFDMDemodulate(rmc, noise(1+offset:end ,:));
            noiseest = var(n(:));
        else
            [estChannelGrid, noiseest] = lteDLChannelEstimate( ...
                rmc, cec, rxGrid);
        end

        % Process subframes 0 to 9 within received frame. Test for PCFICH
        % and if successful, test for PDCCH. If both PCFICH and PDCCH are
        % successfully received, the transmission is successful
        for sf = 0:rmc.TotSubframes-1

            % Increment subframe number for correct decoding of data
            rmc.NSubframe = mod(sf,10);

            % No data is transmitted in subframe 5, so skip this
            if(rmc.NSubframe ~= 5)

                % Extract one subframe for analyzing at a time from the
                % received grid
                rxSubframe = rxGrid(:,L*sf+1:L*(sf+1),:);

                % Extract the estimated channel response for the subframe
                % being analyzed
                chSubframe = estChannelGrid(:,L*sf+1:L*(sf+1),:,:);

                % Perform PCFICH decoding of received data using the estimate
                % of the channel
                pcfichIndices = ltePCFICHIndices(rmc);
                [rxPcfichSym,pcfichHestSym] = lteExtractResources(pcfichIndices,rxSubframe,chSubframe);
                rxPcfich = ltePCFICHDecode(rmc,rxPcfichSym,pcfichHestSym,noiseest);
                rxCFI = lteCFIDecode(rxPcfich);

                if rxCFI ~= rmc.CFI
                    rxFail = 1;
                else
                   % CFI decoded fine, now check if DCI can be decoded

                   % Extract and decode PDCCH bits
                   pdcchIndices = ltePDCCHIndices(rmc);
                   [rxPdcchSym,pdcchHestSym] = lteExtractResources(pdcchIndices,rxSubframe,chSubframe);
                   rxPdcchBits = ltePDCCHDecode(rmc,rxPdcchSym,pdcchHestSym,noiseest);

                   % PDCCH blind search, demask PDCCH candidate using RNTI
                   ueConfig.RNTI = rmc.PDSCH.RNTI;
                   ueConfig.ControlChannelType = 'PDCCH';
                   ueConfig.EnableCarrierIndication = 'Off';
                   ueConfig.SearchSpace = 'UESpecific';
                   ueConfig.EnableMultipleCSIRequest = 'Off';
                   ueConfig.EnableSRSRequest = 'Off';
                   ueConfig.NTxAnts = 1;
                   [rxDCI,rxDCIBits] = ltePDCCHSearch(rmc,ueConfig,rxPdcchBits);

                   if ~isempty(rxDCI) && isfield(rxDCI{1},'DCIFormat') && strcmpi(rxDCI{1}.DCIFormat,rmc.PDSCH.DCIFormat)
                       rxFail = 0;
                   else
                       rxFail = 1;
                   end

                end
                % Store the values and increment the subframe index
                pmdsg(dataSubframeIndex, :) = rxFail;
                dataSubframeIndex = dataSubframeIndex + 1;
            end
        end
        % Store resulting pmdsg results
        totalPmdsgSNR(FrameNo,:) = pmdsg(:);

    end
    % Record the missed detection for the total number of frames simulated
    % at a particular SNR
    totalPmdsg(resultIndex,:) = totalPmdsgSNR(:); % CRC
    resultIndex = resultIndex + 1;

end
Simulating at -3.1dB SNR for a total 1 Frame(s)

Simulating at -2.4dB SNR for a total 1 Frame(s)

Simulating at -1.7dB SNR for a total 1 Frame(s)

Simulating at -1dB SNR for a total 1 Frame(s)

Simulating at -0.3dB SNR for a total 1 Frame(s)

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

% Pm-dsg should be less than 1% at -1.7 dB SNR for single port
pmdsgVal = 100*mean(totalPmdsg,2);
figure
plot(snrIn,pmdsgVal,'-*')
title(['Pm-dsg for ', num2str(nFrames) ' frame(s)'] )
xlabel('SNR(dB)'); ylabel('Pm-dsg (%)');
grid on;
hold on;
plot(snrIn, ones(1,numel(snrIn)),'--rs');
legend('Simulation Result','Target 1% Pm-dsg','Location',...
       'NorthEast');
ylim([fix(min(pmdsgVal)-2) fix(max(pmdsgVal)+2)]);

Дальнейшие исследования

Можно изменить части этого примера для создания других RMC PDCCH/PCFICH (согласно TS 36.101 Раздел 8.4 [1] и 36.521-1 Раздел 8.4 [2]). Например, для генерации R.16 FDD RMC из TS 36.101 раздел 8.4.2.2.1 [1], который определен для характеристики разнесения передачи с конфигурацией передающей/приемной антенны 2x2, обновите rmc структура, как показано ниже:

rmc.CellRefP = 2;                   % Number of transmit antenna ports
rmc.CFI = 2;                        % OFDM symbols for PDCCH
rmc.Ng = 'One';                     % HICH group multiplier
rmc.PDSCH.DCIFormat = 'Format2';    % Set the DCI Format
rmc.PDSCH.PDCCHFormat = 2;          % Set the aggregation level to be 4
rmc.PDSCH.PDCCHPower = -3;          % Relative power is -3dB
rmc.PDSCH.TxScheme = 'TxDiversity'; % PDSCH transmission scheme
rmc.PDSCH.NLayers = 2;              % Number of transmission layers
rmc.OCNGPDSCH.TxScheme = 'TxDiversity'; % PDSCH OCNG transmission scheme
rmc.OCNGPDCCHPower = -3;            % Relative power is -3dB for PDCCH OCNG

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

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

  2. 3GPP ТУ 36.521-1 "Спецификация соответствия пользовательского оборудования (UE); радиопередача и прием; Часть 1: Проверка соответствия "