Пример создания 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
Генератор сигналов нисходящей линии связи 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
3GPP ТС 36.101 «Радиопередача и прием пользовательского оборудования (UE)»
3GPP ТУ 36.521-1 "Спецификация соответствия пользовательского оборудования (UE); радиопередача и прием; Часть 1: Проверка соответствия "