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