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