Этот пример показывает, как несколько процессов информации о состоянии канала (CSI) предоставляют сети обратную связь для операции скоординированной многоточки (CoMP). В этом примере данные пользовательского оборудования (UE) передаются от одного из двух взаимодействующих eNodeB как часть схемы динамического выбора точек (DPS). Решение о передаче основано на отчетах индикатора качества канала (CQI) от UE.
Скоординированная многоточка (CoMP) является термином, используемым для описания схем, в которых группа базовых станций динамически сотрудничает, чтобы уменьшить интерференцию или даже превратить эту интерференцию в полезный сигнал. Группа координирующих базовых станций называется взаимодействующим набором. CoMP в Релиз 11 спроектирован таким образом, чтобы иметь возможность использовать преимущества низкой задержки и высокой пропускной способности обратного перехода между базовыми станциями в рамках взаимодействующего набора. Поэтому данные для пользовательского оборудования (UE) могут быть доступны в одной или нескольких взаимодействующих базовых станциях.
Существует три категории нисходящего CoMP:
При скоординированном планировании и формировании луча (CS/CB) данные UE доступны только на одной базовой станции в пределах координирующего набора, поэтому PDSCH передается от одной базовой станции. Планирование и адаптация ссылки координируются с использованием информации от других базовых станций в взаимодействующем наборе. Другие взаимодействующие базовые станции могут также координировать свои решения о планировании и формировании луча, чтобы уменьшить помехи.
В динамическом выборе точек (DPS) данные UE доступны на нескольких базовых станциях в пределах координационного набора, но данные передаются только от одной базовой станции за раз. Базовая станция, передающая в UE, названная точкой передачи (TP), может быть изменена в подкадр на субкадр, чтобы обеспечить лучшую передачу для UE с изменяющимися условиями канала. Этот сценарий наиболее вероятно находится на ребре камеры, где характеристики долгосрочного канала благоприятствуют обслуживающей базовой станции, но краткосрочные характеристики могут благоприятствовать другим взаимодействующим базовым станциям.
В совместной передаче (JT) данные UE передаются от нескольких базовых станций одновременно. Это может быть когерентным или некогерентным. Когерентный JT совместно предваряет передачи от нескольких TP, чтобы позволить приемнику достичь когерентного объединения передачи. В некогерентном JT каждый TP предваряет передачу независимо, поэтому приемнику доступен только коэффициент усиления степени.
Сеть использует информацию о состоянии канала (CSI), сообщенную UE или выведенную из передач восходящей линии связи TDD, чтобы принять решения о передаче CoMP. UE осуществляет обратную связь с несколькими отчетами, каждый из которых соответствует различным гипотезам относительно решений о передаче взаимодействующих базовых станций. Для предоставления отчета UE сконфигурировано с процессом CSI. Процесс CSI состоит из ресурса Опорный Сигнал (CSI-RS), ресурса CSI interference Measurement (CSI-IM) и механизма отчетности. Для отчетов CSI сеть может конфигурировать UE с четырьмя процессами CSI. Для каждого процесса CSI UE сообщает вычисленные индикаторы CSI по запросу сети:
Индикатор качества канала (CQI)
Индикатор ранга (RI)
Матричный индикатор прекодера (PMI)
Для получения дополнительной информации об отчетности CQI/RI/PMI см. Примеры проверки соответствия индикатора ранга (RI) и проверки соответствия индикатора качества канала (CQI).
Этот пример показывает простой сценарий DPS для передачи PDSCH к UE. Взаимодействующий набор содержит две точки TP1 и TP2 передачи, каждая из которых способна передавать PDSCH к UE. TP1 является обслуживающей камерой для UE. Сеть выбирает точку передачи PDSCH и схему модуляции и кодирования, используя CQI, сообщенный UE. Следующая схема показывает принцип операции DPS в этом примере. Обе точки передачи передают CSI-RS и специфический для ячейки опорный сигнал (CRS). Обслуживающая камера также передает управляющую информацию нисходящей линии связи для UE в PDCCH. Точка передачи PDSCH может изменить подкадр на субкадр, чтобы использовать преимущества мгновенных условий канала. На схеме точка передачи PDSCH изменяется с TP1 в подкадре n
для TP2 в подкадрах n+1
.
В этом примере процессы CSI и точки передачи конфигурируются в соответствии с требованиями теста соответствия «Требования к отчетности CQI с несколькими процессами CSI» в TS36.101. 9.3.6.1 [1]. Этот пример отличается от этого теста соответствия выбором одной из двух возможных точек передачи PDSCH на основе самой высокой сообщаемой широкополосной CQI из любой точки передачи. В этом тесте соответствия фиксирована точка передачи PDSCH. Кроме того, задержка отчетности CQI не выполняется.
В этом примере точка передачи PDSCH может быть динамически выбрана или прикреплена к обслуживающей камере, TP1, используя параметр dpsOperation
. Используйте этот параметр, чтобы исследовать влияние DPS на пропускную способность.
dpsOperation = true; % Enable DPS {true,false} totSubframes = 150; % Number of subframes to simulate
Две точки передачи заданы и сконфигурированы согласно TS36.101 таблицы 9.3.6.1-1 [1]: TP1 является макроячекой (обслуживающей камерой) и TP2 является взаимодействующей базовой станцией, такой как удаленная радиоголовка. Массив структур enb
содержит параметры для обеих точек передачи.
% Transmission point 1 cell-wide settings enb = struct; enb.NDLRB = 50; enb.CellRefP = 2; enb.DuplexMode = 'FDD'; enb.CFI = 3; enb.CyclicPrefix = 'Normal'; enb.NFrame = 0; enb.NCellID = 0; % PDSCH configuration for transmission mode 10 (TM10) enb.PDSCH.TxScheme = 'Port7-14'; enb.PDSCH.NLayers = 1; enb.PDSCH.RNTI = 1; enb.PDSCH.NSCID = 0; enb.PDSCH.Modulation = {'16QAM'}; enb.PDSCH.Rho = 0; enb.PDSCH.RV = 0; enb.PDSCH.NTurboDecIts = 5; enb.PDSCH.PRBSet = (0:enb.NDLRB-1).'; enb.PDSCH.NTxAnts = 4; enb.PDSCH.W = lteCSICodebook(enb.PDSCH.NLayers,enb.PDSCH.NTxAnts,0).'; enb.PDSCH.AltCodebook4Tx = 'Off'; enb.PDSCH.CSI = 'On';
Строение для TP2 основано на TP1. При необходимости настраиваются различные параметры ячеек.
enb = repmat(enb,2,1); enb(2).NCellID = 6; enb(2).PDSCH.NTxAnts = 2; enb(2).PDSCH.W = lteCSICodebook(enb(2).PDSCH.NLayers,enb(2).PDSCH.NTxAnts,0).';
Когда две координационные точки передачи используют DPS, PDSCH может быть передан как от TP1, так и от TP2. Когда PDSCH передается одной точкой передачи в UE, например TP1, существуют две опции передачи для другой точки передачи, TP2. Первая опция состоит в том, чтобы обслуживать другие UE, использующие те же ресурсы, таким образом препятствуя передаче PDSCH от TP1. Вторая опция состоит в том, чтобы отключить передачу в этих ресурсах, таким образом, не мешая передаче PDSCH от TP1. Эти опции сгруппированы в гипотезы передачи. В этом примере четыре гипотезы передачи проверяются сетью:
TP1 Hypothesis TP2 Hypothesis ------------------------------------------------------ Hypothesis 0: Transmitting PDSCH Muting Hypothesis 1: Muting Transmitting PDSCH Hypothesis 2: Transmitting PDSCH Interfering Hypothesis 3: Interfering Transmitting PDSCH
Хотя в этом примере проверяются четыре гипотезы, передачи PDSCH, сделанные к UE, соответствуют только гипотезам 2 или 3.
Чтобы предоставить сети CSI для этих гипотез передачи, в UE сконфигурированы два ресурса CSI-RS и три ресурса CSI-IM. Процессы CSI используют эти ресурсы, чтобы сообщить CSI для каждой гипотезы.
В следующих разделах ресурсы и процессы CSI сконфигурированы, чтобы протестировать эти четыре гипотезы передачи.
Ресурсы CSI-RS
Уникальная CSI-RS передается каждой взаимодействующей базовой станцией. UE сконфигурировано с двумя ресурсами CSI-RS, чтобы предоставить оценки качества канала, по одному для каждой точки передачи:
CSI-RS # 0: передача от TP1
CSI-RS # 1: передача от TP2
Каждый CSI-RS определяется строением, периодом и скремблирующими тождествами CSI-RS. Количество эталонных портов CSI является количеством передающих антенн. Для этой симуляции периоды ресурсов CSI-RS и CSI-IM должны быть одинаковыми. Они параметризованы SimCSIPeriod
.
SimCSIPeriod = [5 1]; % [Tcsi-rs Dcsi-rs] % CSI-RS resource: {CSI-RS #0, CSI-RS #1} SimCSIRS.CSIRSConfig = [0 5]; % CSI-RS configuration SimCSIRS.CSIRSPeriod = {SimCSIPeriod,SimCSIPeriod}; % CSI-RS period SimCSIRS.NCSIID = [10 16]; % CSI-RS scrambling identity SimCSIRS.CSIRefP = [enb(1).PDSCH.NTxAnts enb(2).PDSCH.NTxAnts];
Ресурсы CSI-IM
Ресурсы CSI-IM описывают набор ресурсных элементов (RE), над которыми UE измеряет среднюю степень. Эти измерения используются для оценки интерференции для вычислений CSI. Для измерения помех при передаче TP требуются три CSI-IM:
CSI-IM # 0: Измерение фонового шума при отключении обеих TP
CSI-IM # 1: Измерение TP2 помех
CSI-IM # 2: Измерение TP1 интерференции
Каждый CSI-IM определяется строением и периодом. Обратите внимание, что строения отличаются от строений CSI-RS, но периоды совпадают.
% CSI-IM resource: {CSI-IM #0, CSI-IM #1, CSI-IM #2}
SimCSIIM.ZeroPowerCSIRSConfig = [2 6 1];
SimCSIIM.ZeroPowerCSIRSPeriod = {SimCSIPeriod,SimCSIPeriod,SimCSIPeriod};
Процессы CSI
Четыре процесса сконфигурированы, чтобы протестировать четыре гипотезы передачи. Они используют ресурсы CSI-RS и CSI-IM, описанные выше:
TP1 Hypothesis TP2 Hypothesis CSI-RS CSI-IM ------------------------------------------------------------------------ Process 0: Transmitting PDSCH Muting CSI-RS #0 CSI-IM #0 Process 1: Muting Transmitting PDSCH CSI-RS #1 CSI-IM #0 Process 2: Transmitting PDSCH Interfering CSI-RS #0 CSI-IM #1 Process 3: Interfering Transmitting PDSCH CSI-RS #1 CSI-IM #2
Процесс определяется ресурсом CSI-RS, ресурсом CSI-IM и режимом отчетности. Режим отчетности CSI, режим отчетности PMI и ограничение подмножества кодовой книги для каждого процесса конфигурируются согласно TS36.101 таблицы 9.3.6.1-1 [1]. Ограничение подмножества кодовой книги для каждого процесса ограничивает выбор PMI одним PMI, поэтому PMI и RI отчетность не требуется.
% {CSI Process #0, CSI Process #1, CSI Process #2, CSI Process #3} SimCSIProcess.CSIRSResource = [1 2 1 2]; % CSI-RS resources index (1 based) SimCSIProcess.CSIIMResource = [1 1 2 3]; % CSI-IM resources index (1 based) SimCSIProcess.CSIMode = {'PUCCH 1-1','PUSCH 3-1','PUSCH 3-1','PUSCH 3-1'}; % CSI reporting modes SimCSIProcess.PMIMode = {'Wideband' ,'Wideband' ,'Wideband','Wideband'}; % PMI reporting modes SimCSIProcess.CodebookSubset = {'0x0000000000000001','000001','0x0000000000000001','000001'}; % Codebook subset restrictions
В этой симуляции сетью реализуются только две из четырех гипотез; Передача PDSCH от TP1 или от TP2 с другими помехами TP. Поэтому для принятия решения о передаче используется только обратная связь от процессов 2 и 3 CSI.
ОСШ для каждой передачи на UE определен в TS36.101 таблице 9.3.6.1-1 [1]. Шумовая степень определяется с помощью Noc
.
snrTP = [11 8]; % SNR of received transmission from TP1 and TP2 Noc = -98; % dBm/15kHz average power spectral density
Канал с замираниями сконфигурирован между TP1 и UE и TP2 и UE. Массив структур chcfg
параметризирует каналы из TP1 и TP2.
% Channel between TP1 and UE ofdmInfo = lteOFDMInfo(enb(1)); chcfg = struct; chcfg.DelayProfile = 'EPA'; chcfg.NRxAnts = 2; chcfg.DopplerFreq = 5; chcfg.MIMOCorrelation = 'Low'; chcfg.SamplingRate = ofdmInfo.SamplingRate; chcfg.InitPhase = 'Random'; chcfg.ModelType = 'GMEDS'; chcfg.NTerms = 16; chcfg.NormalizeTxAnts = 'On'; chcfg.NormalizePathGains = 'On'; chcfg.Seed = 1; % Channel between TP2 and UE chcfg = repmat(chcfg,2,1); chcfg(2).Seed = 2; % Calculate the size of the received waveform rxWaveformSize = [chcfg(1).SamplingRate*1e-3+15 chcfg(1).NRxAnts];
UE должны использовать два опорных сигналов: CSI-RS и DM-RS. Для оценки каждого опорного сигнала требуются два отдельных строений оценки канала. Здесь кубическая интерполяция будет использоваться с окном усреднения 1 на 2 RE. Это конфигурирует устройство оценки канала, чтобы использовать специальный режим, который обеспечивает способность сжимать и ортогонализировать передачи CSI-RS и DMRS.
% CSI-RS estimation ceccsi.FreqWindow = 1; ceccsi.TimeWindow = 2; ceccsi.InterpType = 'cubic'; ceccsi.PilotAverage = 'UserDefined'; ceccsi.InterpWinSize = 1; ceccsi.InterpWindow = 'Causal'; ceccsi.Reference = 'CSIRS'; % DM-RS estimation cecdmrs = ceccsi; cecdmrs.Reference = 'DMRS';
В этом разделе точки передачи параметризованы из сконфигурированных ресурсов CSI-RS и ресурсов CSI-IM для генерации CSI-RS и отображения PDSCH. Соответствующие параметры установлены в строение массиве структур enb
.
Ресурсы CSI-RS
Обе точки передачи параметризованы со всеми CSI-RS, сконфигурированными в UE.
% Set TP1 and TP2 CSI-RS configuration for enbIdx = 1:2 enb(enbIdx).CSIRefP = SimCSIRS.CSIRefP; enb(enbIdx).CSIRSConfig = SimCSIRS.CSIRSConfig; enb(enbIdx).CSIRSPeriod = SimCSIRS.CSIRSPeriod; enb(enbIdx).NCSIID = SimCSIRS.NCSIID; end
Ресурсы ZP CSI-RS
Ресурсы CSI-RS с нулевой степенью (ZP) препятствуют сопоставлению PDSCH с набором RE. Поэтому ZP CSI-RS используются для отключения RE в каждой передаче TP PDSCH, чтобы позволить сконфигурированному CSI-IM измерить помехи для различных гипотез.
Схема ниже иллюстрирует, как ZP CSI-RS сконфигурированы, чтобы позволить ресурсам CSI-IM измерять помехи. CSI-IM # 0 измеряет шум, когда ни одна TP не передает в ресурсе 2. Поэтому, чтобы предотвратить передачу TP в этом ресурсе, ZP CSI-RS сконфигурирован в ресурсе 2 для обоих TP. Это останавливает соответствие PDSCH этому ресурсу, мутируя передачу. ZP CSI-RS для каждой TP также сконфигурирован для отображения вокруг CSI-RS координирующей TP для предотвращения помех. CSI-IM # 1 и CSI-IM # 2 измеряют индивидуальные помехи, вызванные TP2 и TP1 в ресурсах 6 и 1. Поэтому ZP CSI-RS для TP1 сконфигурирован, чтобы предотвратить передачу PDSCH в ресурсе 6, чтобы разрешить измерение с CSI-IM # 1. ZP CSI-RS для TP2 сконфигурирован, чтобы предотвратить передачу PDSCH в ресурсе 1, чтобы разрешить измерение с CSI-IM # 2.
ZP CSI-RS сконфигурированы с 16-битной растровой картой. Каждый бит управляет тем, следует ли отключать набор RE (1) или разблокировать (0). Для каждой точки передачи строение ZP CSI-RS создаётся из необходимых строений CSI-IM и строения CSI-RS, используемой координационной точкой передачи.
% ZP CSI-RS resource for TP1 zp1 = '0000000000000000'; % Assume all CSI configurations unmuted zp1(SimCSIIM.ZeroPowerCSIRSConfig([1 2])+1) = '1'; % Mute CSI-IM #0,1 (background & TP2 interference) zp1(SimCSIRS.CSIRSConfig(2)+1) = '1'; % Mute CSI-RS #1 (TP2 transmission) % Add ZP CSI-RS resource to TP1 parameters enb(1).ZeroPowerCSIRSConfig = zp1; enb(1).ZeroPowerCSIRSPeriod = SimCSIPeriod; % ZP CSI-RS resource for TP2 zp2 = '0000000000000000'; % Assume all CSI configurations unmuted zp2(SimCSIIM.ZeroPowerCSIRSConfig([1 3])+1) = '1'; % Mute CSI-IM #0,2 (background & TP1 interference) zp2(SimCSIRS.CSIRSConfig(1)+1) = '1'; % Mute CSI-RS #0 (TP1 transmission) % Add ZP CSI-RS resource to TP2 parameters enb(2).ZeroPowerCSIRSConfig = zp2; enb(2).ZeroPowerCSIRSPeriod = SimCSIPeriod;
В этом примере процессы CSI-RS, CSI-IM и CSI представлены в UE как массивы структур. Каждый элемент массива структур конфигурирует один ресурс или процесс. В этом разделе эти массивы структур создаются из сконфигурированных ресурсов CSI-RS и ресурсов CSI-IM.
Массив структур csirs
содержит параметризацию ресурса CSI-RS. Это основано на параметрах обслуживающей камеры, но параметры CSI-RS сконфигурированы так, чтобы использовать соответствующий ресурс, заданный в настройках симуляции.
numCSIRS = numel(SimCSIRS.CSIRSConfig); csirs = repmat(enb(1),numCSIRS,1); for idx = 1:numCSIRS csirs(idx).CSIRefP = SimCSIRS.CSIRefP(idx); csirs(idx).CSIRSConfig = SimCSIRS.CSIRSConfig(idx); csirs(idx).CSIRSPeriod = SimCSIRS.CSIRSPeriod{idx}; csirs(idx).NCSIID = SimCSIRS.NCSIID(idx); end
Массив структур csiim
содержит параметризацию ресурса CSI-IM. Это основано на параметрах обслуживающей камеры, но параметры CSI-IM сконфигурированы, чтобы использовать соответствующий ресурс, предоставленный в настройках симуляции. Как ресурс CSI-IM является строением ZP CSI-RS, CSIRSPeriod
параметру задано значение 'Off'
таким образом, для измерения интерференции используются только ZP CSI-RS RE.
numCSIIM = numel(SimCSIIM.ZeroPowerCSIRSConfig); csiim = repmat(enb(1),numCSIIM,1); for idx = 1:numCSIIM csiim(idx).ZeroPowerCSIRSConfig = SimCSIIM.ZeroPowerCSIRSConfig(idx); csiim(idx).ZeroPowerCSIRSPeriod = SimCSIIM.ZeroPowerCSIRSPeriod{idx}; csiim(idx).CSIRSPeriod = 'Off'; end
Массив структур process
содержит параметризацию процесса CSI. Это основано на параметрах обслуживающей камеры. Параметры CSIRSIdx
и CSIIMIdx
используются для индексации ресурсов CSI-RS и CSI-IM для вычисления CSI. Режимы отчетов настраиваются для каждого процесса из настроек симуляции. CQI, сообщенный UE для каждого процесса CSI, выбирается с использованием оцененного отношения сигнал/помеха плюс шум (SINR). Самые низкие SINR, рекомендуемые для достижения 90% пропускной способности для каждого индекса CQI в этом сценарии, определяются вектором SINRs
. Этот вектор используется для параметризации выбора CQI для каждого процесса CSI.
SINRs = [1.3 1.3 2.3 3.7 5 6.8 9.2 10.9 13 14.8 17.1 18.9 21 23.9 24.3]; numCSIProcesses = numel(SimCSIProcess.CSIRSResource); process = repmat(enb(1),numCSIProcesses,1); for idx = 1:numCSIProcesses % Index CSI-RS and CSI-IM resources used by the process process(idx).CSIRSIdx = SimCSIProcess.CSIRSResource(idx); process(idx).CSIIMIdx = SimCSIProcess.CSIIMResource(idx); % Reporting configuration process(idx).PDSCH.CSIMode = SimCSIProcess.CSIMode{idx}; process(idx).PDSCH.PMIMode = SimCSIProcess.PMIMode{idx}; process(idx).PDSCH.CodebookSubset = SimCSIProcess.CodebookSubset{idx}; process(idx).PDSCH.SINRs90pc = SINRs; % CSI-RS configuration for CSI estimation process(idx).CSIRefP = SimCSIRS.CSIRefP(process(idx).CSIRSIdx); process(idx).CSIRSConfig = SimCSIRS.CSIRSConfig(process(idx).CSIRSIdx); process(idx).CSIRSPeriod = SimCSIRS.CSIRSPeriod(process(idx).CSIRSIdx); process(idx).NCSIID = SimCSIRS.NCSIID(process(idx).CSIRSIdx); end
Необходимая степень сигнала, чтобы удовлетворить ОСШ для каждой TP, вычисляется ниже.
% Convert to linear and Watts nocLin = 10.^(Noc/10)*(1e-3); % linear in Watts % Take into account number of antennas and FFT (OFDM) scaling No = sqrt(nocLin/(2*double(ofdmInfo.Nfft))); NocW = 10.^((Noc-30)/10); % convert to W/15kHz % SINR = Es/Noc TS 36.101 Sec. 8.1.1 NocTot = NocW; % W/15kHz snrLin = 10.^(snrTP/10); Es = snrLin*NocTot; % W/15kHz % Amplitude scaling factors K = sqrt(Es);
Переменные, необходимые для симуляции, инициализируются в этом разделе.
% Set the random number seed rng('default'); % Initialize containers which store the channel estimates interference % measurements for CSI-RS and CSI-IM resources csirshest = cell(numCSIRS,1); csiimnest = zeros(numCSIIM,1); % Initialize a buffer to store CQI reports for each process. Size buffer % for subband CQI reporting. numCSIReports = ceil(totSubframes/SimCSIPeriod(1)); pmiInfo = ltePMIInfo(process(1),setfield(process(1).PDSCH,'PMIMode','Subband')); %#ok<SFLD> cqiBuffer = ones(numCSIReports,pmiInfo.NSubbands+1,numCSIProcesses); % Initialize buffers to store the CRC, BER and TP selected crcBuffer = cell(totSubframes,1); berBuffer = zeros(totSubframes,2); tpBuffer = zeros(totSubframes,1); csiReportIdx = 1; % Index of CSI report lastOffset = 0; % Initialize overall frame timing offset frameOffset = 0; % Initialize frame timing offset
Эта симуляция является запуском субкадром по субкадрам. Для каждого подкадра выполняются следующие шаги:
Форма волны во временном интервале rxWaveform
инициализируется шумом. К этому будет добавлена полученная форма волны от TP1 и TP2.
PDSCH TP выбирается с помощью широкополосного CQI, сообщенного UE.
Для каждой TP в свою очередь генерируется субкадр, содержащий соответствующие синхронизации и опорные сигналы и TM10 OCNG.
PDSCH для UE генерируется из TP1 или TP2 в одном поддиапазоне.
Два субкадра модулированы OFDM, прошли через канал с замираниями и объединены.
Принятая форма волны в UE синхронизируется и демодулируется OFDM.
Сконфигурированные измерения CSI-RS и CSI-IM выполняются UE
Отчет CSI генерируется с использованием ресурсов CSI-RS и CSI-IM для сконфигурированных процессов CSI.
PDSCH демодулируется.
for nsf = 0:totSubframes-1 % Initialize UE receive waveform with noise rxWaveform = No*complex(randn(rxWaveformSize),randn(rxWaveformSize)); % Select PDSCH TP based on the highest reported wideband CQI bufferIdx = mod(csiReportIdx-2,numCSIReports)+1; % Buffered CQI to use if dpsOperation widebandCQI = permute(cqiBuffer(:,1,:),[1 3 2]); if (widebandCQI(bufferIdx,3)>=widebandCQI(bufferIdx,4)) pdschTransmissionPoint = 1; % TP1 else pdschTransmissionPoint = 2; % TP2 end else pdschTransmissionPoint = 1; %#ok<UNRCH> % TP1 end % Generate TP1 and TP2 transmissions. % Each transmission contains cell-specific reference signal, % synchronizing signals, CSI-RS and TM10 OCNG. One transmission % contains the PDSCH for the UE. for enbIdx = 1:2 % Update subframe number for each transmission enb(enbIdx).NSubframe = nsf; % Turn off the CSI resource not transmitted by this TP tpenb = enb(enbIdx); tpenb.CSIRSPeriod{mod(enbIdx,2)+1} = 'Off'; % Blank subframe; CRS, PSS and SSS sf = lteResourceGrid(tpenb,tpenb.PDSCH.NTxAnts); crsInd = lteCellRSIndices(tpenb); % Cell-specific reference signal sf(crsInd) = lteCellRS(tpenb); pssInd = ltePSSIndices(tpenb); % Primary synchronizing signal sf(pssInd) = ltePSS(tpenb); sssInd = lteSSSIndices(tpenb); % Secondary synchronizing signal sf(sssInd) = lteSSS(tpenb); % CSI-RS resource csitp = tpenb; csitp.ZeroPowerCSIRSPeriod = 'Off'; csiInd = lteCSIRSIndices(csitp); sf(csiInd) = lteCSIRS(csitp); % TM10 OCNG transmitted apart from subframes containing PSS/SSS/PBCH if isempty(pssInd) tpenb.PDSCH.RNTI = 0; % Add OCNG at DMRS locations oncngInd = lteDMRSIndices(tpenb,tpenb.PDSCH); ocngSym = lteDMRS(tpenb,tpenb.PDSCH); sf(oncngInd) = ocngSym; % Add OCNG for PDSCH symbols [oncngInd,ocngInfo] = ltePDSCHIndices(tpenb,tpenb.PDSCH,tpenb.PDSCH.PRBSet); ocngSym = ltePDSCH(tpenb,tpenb.PDSCH,randi([0 1],ocngInfo.G,1)); sf(oncngInd) = ocngSym; end % PDSCH and DMRS Transmission to UE from either TP1 or TP2. % The transport block size and modulation scheme for transmission % are selected using the reported CQI for the appropriate CSI % process. The PDSCH must be mapped around the ZP CSI-RS configured % for the UE and the ZP CSI-RS of the TP. Only transmit PDSCH for % subframes not containing CSI resources or PSS/SSS as per TS36.101 % Table 9.3.6.1-1. if ~isempty(pssInd)||~isempty(csiInd) tbs = 0; % Transport block size is 0 as no PDSCH transmitted elseif (pdschTransmissionPoint==enbIdx) tpBuffer(nsf+1) = pdschTransmissionPoint; % Get relevant configuration for transmission point and CQI to % use. txenb = enb(enbIdx); cqi = cqiBuffer(bufferIdx,:,enbIdx+2); % Select subband for PDSCH transmission. % The PDSCH is transmitted in the highest differential CQI % subband. Subbands less than full size are excluded. partialSubband = (pmiInfo.k*pmiInfo.NSubbands>txenb.NDLRB); [~,idx] = max(cqi(2:(end-partialSubband))); % Maximum differential sbCandidates = find(cqi(2:(end-partialSubband))==cqi(idx+1)); sb = sbCandidates(randi([1 numel(sbCandidates)],1,1)); cqi = cqi(1)+cqi(1+sb); % Calculate SB PMI from wideband and differential txenb.PDSCH.PRBSet = ((sb-1)*pmiInfo.k+(0:(pmiInfo.k-1))).'; % PRB allocation for subband % Select MCS according to CQI using TS36.101 Table A.4-1 CSI % RMC RC.12 FDD (MCS.13), which defines the relationship % between CQI indices and MCS indices imcsTable = [-1 0 0 1 3 5 7 10 12 14 17 19 21 22 24 25]; imcs = imcsTable(cqi+1); % Determine TBS and modulation order, fixed RI (1) and PMI (0). % Generate PDSCH for only a non-zero transport block size. [itbs,modulation] = lteMCS(imcs); tbs = double(lteTBS(size(txenb.PDSCH.PRBSet,1),itbs)); if any(tbs) if ~iscell(modulation) modulation = {modulation}; end txenb.PDSCH.NLayers = 1; txenb.PDSCH.Modulation = modulation; txenb.PDSCH.W = lteCSICodebook(txenb.PDSCH.NLayers,txenb.PDSCH.NTxAnts,0).'; % PDSCH mapping [pdschInd,pdschInfo] = ltePDSCHIndices(txenb,txenb.PDSCH,txenb.PDSCH.PRBSet); % Generate DL-SCH data txtrblk = arrayfun(@(x)randi([0 1],x,1),tbs,'UniformOutput',false); cw = lteDLSCH(txenb,txenb.PDSCH,pdschInfo.G,txtrblk); % Generate PDSCH symbols with cell identity of serving cell % for correct scrambling txenb.NCellID = enb(1).NCellID; pdschSym = ltePDSCH(txenb,txenb.PDSCH,cw); % Create UE specific DMRS configuration to allow for % scrambling code to change depending on transmission point txenb.NCellID = enb(1).NCellID; if pdschTransmissionPoint == 2 txenb.NCellID = enb(2).NCellID; end dmrsInd = lteDMRSIndices(txenb,txenb.PDSCH); dmrsSym = lteDMRS(txenb,txenb.PDSCH); % Map PDSCH and DMRS sf(pdschInd) = pdschSym; sf(dmrsInd) = dmrsSym; end end % OFDM modulate, pass through a fading channel, scale for SNR and % add to existing receive waveform txWaveform = lteOFDMModulate(tpenb,sf); txWaveform = [txWaveform; zeros(15,size(txWaveform,2))]; %#ok<AGROW> chcfg(enbIdx).InitTime = nsf/1e3; rxWaveform = rxWaveform + K(enbIdx)*lteFadingChannel(chcfg(enbIdx),txWaveform); end % Receiver Synchronization and OFDM demodulation % Synchronize using the PSS/SSS of the serving cell (TP1) and OFDM % demodulate if ~isempty(pssInd) frameOffset = lteDLFrameOffset(enb(1),rxWaveform); if (frameOffset > 25) frameOffset = lastOffset; end lastOffset = frameOffset; end rxWaveform = rxWaveform(1+frameOffset:end,:); rxsf = lteOFDMDemodulate(enb(1),rxWaveform); % Calculate CSI-RS Estimates % Generate channel estimates for CSI-RS resources configured at the UE. for idx = 1:numCSIRS % Calculate channel estimate csirs(idx).NSubframe = nsf; csirshest{idx} = lteDLChannelEstimate(csirs(idx),csirs(idx).PDSCH,ceccsi,rxsf); end % Calculate interference using CSI-IM % For each CSI-IM resource calculate the energy in resource elements. % This is the noise+interference estimate. for idx = 1:numCSIIM % Calculate noise and interference estimate csiim(idx).NSubframe = nsf; imIndices = lteCSIRSIndices(csiim(idx)); imSym = lteExtractResources(imIndices,rxsf); csiimnest(idx) = mean(abs(imSym(:)).^2); end % CSI Process Reporting % When estimated CSI resource elements are not zero calculate CSI if ~isempty(csiInd) % For each CSI process calculate CSI feedback for idx = 1:numCSIProcesses % Update subframe number process(idx).NSubframe = nsf; % Extract CSI-RS estimate and CSI-IM estimate for process hest = csirshest{process(idx).CSIRSIdx}; nest = csiimnest(process(idx).CSIIMIdx); % Calculate CQI/PMI/RI, condition CQI on PMI/RI selection [ri,PMISet] = lteRISelect(process(idx),process(idx).PDSCH,hest,nest); process(idx).PDSCH.PMISet = PMISet; process(idx).PDSCH.NLayers = ri; process(idx).PDSCH.NCodewords = min(ri,2); [cqi,sinrs] = lteCQISelect(process(idx),process(idx).PDSCH,hest,nest); cqiBuffer(csiReportIdx,1:numel(cqi),idx) = cqi; end % New CSI report csiReportIdx = csiReportIdx+1; end % PDSCH Demodulation % If the transport block size is not 0, a PDSCH exists to decode if any(tbs) % Estimate channel using DMRS. To use the correct scrambling % sequence for the DMRS use the configuration for the active TP. [dmrshest,dmrsnest] = lteDLChannelEstimate(txenb,txenb.PDSCH,cecdmrs,rxsf); % Extract PDSCH symbols from received grid and channel estimate [sym,symhest] = lteExtractResources(pdschInd,rxsf,dmrshest); % Scale the received symbols by the PDSCH power factor Rho and % decode the PDSCH with the CellID for the serving cell sym = sym*(10^(-txenb.PDSCH.Rho/20)); txenb.NCellID = enb(1).NCellID; [cws,recsym] = ltePDSCHDecode(txenb,txenb.PDSCH,sym,symhest,dmrsnest); % Scale cws by 1/K(1) to avoid numerical issues with DLSCH decoding cws = cellfun(@(x) x*(1/K(1)),cws,'UniformOutput',false); [trblk,crc] = lteDLSCHDecode(txenb,txenb.PDSCH,tbs,cws,[]); % Store CRC and BER crcBuffer{nsf+1} = double(crc); berBuffer(nsf+1,:) = [sum(trblk{1}~=txtrblk{1}),numel(trblk{1})]; end end
Для Блока симуляции отображаются значения коэффициента ошибок (BLER) и пропускной способности PDSCH. Также создаются два рисунков:
Первый рисунок строит графики сообщенного CQI широкого диапазона для каждого процесса CSI в течение длительности симуляции. Сообщенный CQI процесса 0 и процесса 1 показывает, что условия канала благоприятствуют TP1 во время середины симуляции, но TP2 в противном случае, так как сообщенный CQI превышает TP1. Сообщенный CQI процессов 2 и 3 показывает аналогичный шаблон, но сообщенный CQI ниже, чем для процессов 0 и 1. Это связано с тем, что эти процессы предполагают дополнительную интерференцию от TP.
Второй рисунок изображает выбранную точку передачи PDSCH и сообщенный широкополосный CQI из двух процессов, используемых для принятия решения точки передачи. Этот рисунок показывает, TP1 был выбран для передачи PDSCH во время середины симуляции, поскольку сообщенный CQI благоприятствовал этой точке передачи.
hCoMPResults(totSubframes,SimCSIPeriod,crcBuffer,berBuffer,cqiBuffer,tpBuffer);
BLER: 0.044444 (target is 0.1) Throughput: 266.875 kbps
Этот пример показал, как несколько процессов CSI обеспечивают обратную связь для операции DPS CoMP. Данные UE были переданы от одного из двух взаимодействующих eNodeB, на основе широкополосного CQI, сообщенного UE. Эти примеры моделировали сценарий края ячейки, где DPS обеспечивает коэффициент усиления пропускной способности для UE. Попробуйте отключить DPS, задав dpsOperation = false
и обратите внимание на уменьшение пропускной способности.
В этом примере используется следующая вспомогательная функция:
3GPP TS 36.101 «Радиопередача и прием пользовательского оборудования (UE)»
3GPP ТС 36.211 «Физические каналы и модуляция»
Эрик Дальман, 4G: LTE/LTE-Advanced for Mobile Broadband, Elsevier 2014
Joydeep Acharya, Разнородные сети в LTE-Advanced, Wiley 2014