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

Пример, показывающий, как сгенерировать PDCCH/PCFICH RMCs, заданный в TS 36.101 и использовании в тестах соответствия.

Введение

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

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

Setup симуляции

Пример выполняется в течение продолжительности симуляции 1 кадра, чтобы поддержать время симуляции на низком уровне. Значения ОСШ включают-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 RMCs. Здесь мы запускаем при помощи 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 REs.

% 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

Обработка

Поскольку каждый ОСШ указывает, что следующие операции выполняются для каждого кадра:

  • Генерация RMC и Модуляция OFDM: Сгенерируйте модулируемую форму волны OFDM, как задано для PDCCH/PCFICH RMC.

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

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

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

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

  • Измерение обнаружения мисс: 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)]);

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

Можно изменить части этого примера, чтобы сгенерировать другой PDCCH/PCFICH RMCs (согласно Разделу 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 TS 36.101 "Передача радио оборудования пользователя (UE) и прием"

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

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