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

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

Введение

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

Этот LTE Toolbox™ позволяет строению генератор нисходящей формы волны, lteRMCDL, для тестов соответствия PDCCH. Работая на базисе системы координат за кадром при симуляции в конкретном ОСШ, генерируется заполненная ресурсная сетка и модулируется OFDM, чтобы создать форму волны передачи. Сгенерированная форма волны передается через шумный канал Extended Typical Urban (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. The lteRMCDL функция генерирует строения PDSCH RMC, включая соответствующие PDCCH/PCFICH, и мы можем обновить параметры PDCCH/PCFICH, чтобы сгенерировать RMC PDCCH/PCFICH. Здесь мы начинаем с использования 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

Обработка

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

  • Генерация 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)]);

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

Можно изменить части этого примера, чтобы сгенерировать другие RMC PDCCH/PCFICH (согласно TS 36.101, раздел 8.4 [1] и 36.521-1, раздел 8.4 [2]). Например, чтобы сгенерировать R.16 FDD RMC из раздела 8.4.2.2.1 TS 36.101 [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 ТУ 36.521-1 "Спецификация соответствия пользовательского оборудования (UE); Радиопередача и прием; Часть 1: Проверка соответствия "