exponenta event banner

Конфигурация NR SRS

В этом примере показано, как генерировать зондирующие опорные сигналы (SRS), как определено в TS 38.211, раздел 6.4.1.4 [1], включая конфигурацию SRS, генерацию символов и индексов, отображение сетки ресурсов OFDM и генерацию формы сигнала SRS. В примере показано, как выбрать соответствующие параметры для позиционирования SRS по частоте и настройки:

  • Полнополосные передачи: создание SRS, охватывающей всю доступную полосу пропускания.

  • Генерация периодических и апериодических передач SRS с различными шаблонами скачкообразной перестройки частоты.

  • Многопользовательские передачи: создание ортогональных SRS с использованием временных, частотных и циклических сдвигов.

Введение

Зондирующие опорные сигналы - это физические сигналы восходящей линии связи, используемые пользовательским оборудованием (UE) для зондирования восходящего канала, включая оценку качества канала и синхронизацию. В отличие от опорных сигналов демодуляции (DM-RS), SRS не связаны ни с какими физическими каналами восходящей линии связи, и они поддерживают планирование, зависящее от канала восходящей линии связи, и адаптацию линии связи. SRS помогает в:

  • Пространственное мультиплексирование с обратной связью на основе кодовой книги.

  • Управление синхронизацией передачи по восходящей линии связи.

  • Предварительное кодирование нисходящей линии связи на основе взаимности в многопользовательских установках MIMO.

  • Квазирасположение физических каналов и опорных сигналов.

Частотное позиционирование

В этом разделе показано, как сконфигурировать положение SRS в частотной области и определить полосу пропускания, выделенную SRS.

Конфигурирование несущей полосы пропускания 15 МГц с интервалом между поднесущими 15 кГц (SCS).

carrier = nrCarrierConfig;
carrier.NSizeGrid = 79; % Bandwidth in RB
carrier.SubcarrierSpacing = 15;

Параметры конфигурации полосы пропускания CSRS и BSRS управлять полосой пропускания, выделенной для SRS, которая обычно увеличивается с CSRS и уменьшается с BSRS. Используйте эти интерактивные элементы управления для настройки полосы пропускания SRS.

srs = nrSRSConfig;
srs.CSRS = 10;  % Bandwidth configuration C_SRS (0...63)
srs.BSRS =  1;  % Bandwidth configuration B_SRS (0...3)

Для изменения частотного положения SRS измените значения FrequencyStart и NRRC. FrequencyStart определяет начало частоты SRS в RB относительно начала несущей, когда NRRC = 0.

srs.FrequencyStart = 30; % Frequency position of the SRS in carrier in RB (0...271)
          srs.NRRC = 0; % Frequency domain position in blocks of 4 PRB (0...67)

hSRSGrid(carrier,srs,1,true); % Create and display a single-slot resource grid containing SRS
title(['Resource Grid Containing SRS. NRRC = ' num2str(srs.NRRC)]);
hSRSAnnotations(carrier,srs);

Figure contains an axes. The axes with title Resource Grid Containing SRS. NRRC = 0 contains 4 objects of type image, line, text. This object represents SRS 1.

На этом рисунке показана сетка ресурсов OFDM с одним слотом, содержащая SRS. Для CSRS = 10 и BSRS = 1, частотное положение SRS (F0) сдвигается на NRBT при NRRC находится в диапазоне (3... 5) и по 2NRBT, когдаNRRC находится в диапазоне (6... 8). СПС возвращается в исходное положение (FrequencyStart) когда NRRC равно 9. NRBT - количество блоков ресурсов (RB), выделенных SRS на передачу.

Этот рисунок иллюстрирует концепции, представленные выше для CSRS = 10 и BSRS = 1.

NRRC является дополнительным смещением частоты, указанным как число 4 RB, и соответствует параметру более высокого уровня freqStartPosition (см. TS 38.331 Раздел 6.3.2 SRS-Config [2]). Для значений NRRC между k⋅ (NRBT/4) и (k + 1) ⋅ (NRBT/4) -1, частотное положение SRS сдвигается на k⋅NRBT, где k - целое число. TS 38.211 Раздел 6.4.1.4 относится к NRBT как mSRS.b с b = BSRS. Дополнительные сведения см. в разделеNRBPerTransmission имущества nrSRSConfig объект конфигурации.

Это уравнение определяет начало SRS по частоте:

F0=FrequencyStart+NRBT⋅mod (4NRRCNRBT ⌋, NSB)

NSB обозначает количество поддиапазонов SRS (диапазоны частот размера NRBT), где SRS может быть позиционирован через параметр NRRC. Для расчета NSB можно использовать таблицу конфигурации полосы пропускания SRS (см. TS 38.211 Таблица 6.4.1.4.3-1). Вы также можете получить доступ к этой таблице через BandwidthConfigurationTable имущества nrSRSConfig объект.

csrs = srs.CSRS;
disp(nrSRSConfig.BandwidthConfigurationTable(csrs+(0:2) + (csrs==0),:));
    C_SRS    m_SRS_0    N_0    m_SRS_1    N_1    m_SRS_2    N_2    m_SRS_3    N_3
    _____    _______    ___    _______    ___    _______    ___    _______    ___

      9        32        1       16        2        8        2        4        2 
     10        36        1       12        3        4        3        4        1 
     11        40        1       20        2        4        5        4        1 

Первый столбец содержит возможные значения параметра CSRS. Для CSRS = 10 и BSRS = 1количество уникальных поддиапазонов SRS равно NSB=N0⋯NBSRS=3, где N0 = 1 и N1 = 3.

% Calculate and display the number of SRS subbands configurable by NRRC
NSBTable = hSRSNumberOfSubbandsOrHoppingPatterns(srs);

fprintf('Number of SRS subbands (NRRC < %d):  %d', NSBTable*srs.NRBPerTransmission/4,NSBTable);
Number of SRS subbands (NRRC < 9):  3
% Calculate the frequency origin of the first SRS symbol
f0 = hSRSFrequencyOrigin(srs);
fprintf('The frequency origin of the SRS is F0 = %d RB.', f0);
The frequency origin of the SRS is F0 = 30 RB.

Подтвердите частотное положение SRS с помощью info выход nrSRSIndices

[~,info] = nrSRSIndices(carrier,srs);
display(info.PRBSet(1))
    30

Для заданного значения CSRS, диапазон частот, где SRS может быть назначен с использованием NRRC является FrequencyStart + (0... NSB⋅NRBT-1 ). ДляCSRS = 10SRS оборачивается при NRRC=NSB⋅NRBT/4=N0⋯NBSRS⋅mSRS,b/4=mSRS,0/4=9, что приводит к тому же положению частоты, что и NRRC = 0.

fprintf('The SRS frequency range is limited to the range (%d,%d) RB for the current value of CSRS (%d).',srs.FrequencyStart,srs.FrequencyStart + NSBTable*srs.NRBPerTransmission,srs.CSRS);
The SRS frequency range is limited to the range (30,66) RB for the current value of CSRS (10).

Когда включена скачкообразная перестройка частоты внутри слота, вычисление FrequencyOrigin действителен только для первого символа SRS в слоте. Для SRS со скачкообразной перестройкой частоты используйте выходы info.PRBset или info.SubcarrierOffset из nrSRSIndices определение частотного положения последующих символов.

fprintf('The frequency origin of the SRS is F0 = %d RB.',info.PRBSet(1));
The frequency origin of the SRS is F0 = 30 RB.

Конфигурация с полной пропускной способностью

В этом разделе показано, как сконфигурировать и сгенерировать полнодиапазонную передачу SRS путем вычисления соответствующих параметров полосы пропускания SRS для несущей.

Конфигурирование несущей полосы пропускания 10 МГц с SCS 15 кГц.

carrier = nrCarrierConfig;
carrier.NSizeGrid = 52;
carrier.SubcarrierSpacing = 15;

Параметры конфигурации полосы пропускания CSRS, BSRS, и BHop управление полосой пропускания, выделенной для SRS. Для конфигурирования полнодиапазонной SRS установите CSRS = 14 и BSRS = 0.

srs = nrSRSConfig;
srs.CSRS = 13; % Bandwidth configuration C_SRS (0...63)
srs.BSRS =  1; % Bandwidth configuration B_SRS (0...3)

hSRSGrid(carrier,srs, 1, true); % Create and display a single-slot resource grid containing SRS
title(['Resource Grid with Full-Band SRS. CSRS = ' num2str(srs.CSRS)]);
hSRSAnnotations(carrier,srs);

Figure contains an axes. The axes with title Resource Grid with Full-Band SRS. CSRS = 13 contains 3 objects of type image, line, text. This object represents SRS 1.

Для распределения частот SRS можно найти соответствующие значения CSRS, BSRS, и BHop в таблице конфигурации полосы пропускания SRS (см. таблицу TS 38.211 6.4.1.4.3-1). В качестве альтернативы, nrSRSConfig.BandwidthConfigurationTable обеспечивает простой способ доступа к этой таблице и ее отображения.

% To display relevant rows of the bandwidth configuration table, calculate the value of CSRS for a full band SRS
[csrs,bsrs] = hSRSBandwidthConfiguration(srs,carrier.NSizeGrid);

% Display bandwidth configuration table
disp(nrSRSConfig.BandwidthConfigurationTable(csrs+(0:2) + 1*(csrs==0),:));
    C_SRS    m_SRS_0    N_0    m_SRS_1    N_1    m_SRS_2    N_2    m_SRS_3    N_3
    _____    _______    ___    _______    ___    _______    ___    _______    ___

     13        48        1       24        2       12        2        4        3 
     14        52        1        4       13        4        1        4        1 
     15        56        1       28        2        4        7        4        1 

Столбцы, помеченные как m_SRS_b с b = 0... 3 содержать количество RB, назначенных SRS для параметраb = BSRS и конфигурации без скачкообразной перестройки. Строка, соответствующая C_SRS = 14 содержит ряд RB m_SRS_0 = 52, которое является ближайшим значением к полосе пропускания несущей. Поэтому параметры CSRS = 14 и BSRS = 0 сконфигурировать полнополосную передачу SRS для текущей конфигурации несущей. В этом примере таблица конфигурации полосы пропускания используется для вычисления значений CSRS и BSRS максимизация полосы пропускания SRS в пределах несущей.

fprintf('For a full-band SRS in a carrier bandwidth of %d RB, set CSRS = %d and BSRS = %d.',carrier.NSizeGrid,csrs,bsrs);
For a full-band SRS in a carrier bandwidth of 52 RB, set CSRS = 14 and BSRS = 0.

Можно использовать свойство SRS только для чтения NRBPerTransmission для подтверждения того, что сгенерированная SRS соответствует полосе пропускания несущей.

fprintf('The SRS bandwidth (%d RB) is lower than or equal to the carrier bandwidth (%d RB).',srs.NRBPerTransmission,carrier.NSizeGrid);
The SRS bandwidth (24 RB) is lower than or equal to the carrier bandwidth (52 RB).

Конфигурация скачкообразной перестройки частоты

Можно сконфигурировать скачкообразную перестройку частоты внутри слота и между слотами для многосимвольных и многослотовых передач SRS соответственно. Мгновенная полоса пропускания на символ OFDM является постоянной для символов OFDM SRS и меньше, чем полоса пропускания, по которой перескакивает SRS.

Конфигурирование несущей полосы пропускания 15 МГц с SCS 15 кГц.

carrier = nrCarrierConfig;
carrier.NSizeGrid = 79;
carrier.SubcarrierSpacing = 15;

Создайте четырехсимвольную SRS, расположенную на конце слота. Выберите коэффициент повторения для указания количества равных последовательных передач SRS (символов OFDM) в слоте. Для конфигураций со скачкообразной перестройкой частоты Repetition должно быть меньше количества символов SRS.

srs = nrSRSConfig;
srs.NumSRSSymbols = 4;
   srs.Repetition = 1;
  srs.SymbolStart = 10; % Time-domain position of the SRS in the slot. (8...13) for normal cyclic prefix (CP) and (6...11) for extended CP

Управляющая информация нисходящей линии связи (DCI) может инициировать апериодические передачи SRS с использованием параметра resoureType более высокого уровня (см. TS 38.331 раздел 6.3.2 SRS-Config). Поскольку шаблон скачкообразной перестройки частоты сбрасывается для апериодических типов ресурсов SRS в каждом слоте, выберите periodic или semi-persistent Типы ресурсов SRS для активизации скачкообразной перестройки частоты между слотами или aperiodic чтобы отключить его. Периодичность и смещение передач SRS можно сконфигурировать с помощью свойства SRSPeriod. Для aperiodic типы ресурсов, параметр SRSPeriod управляет периодичностью и смещением сигналов DCI, запускающих апериодические передачи SRS.

srs.ResourceType =  "periodic";
   srs.SRSPeriod = [2 0]; % Periodicity in slots (1,2,4,5,8,10,...)
srs.SRSPeriod(2) = 0; % Offset in slots must be smaller than the periodicity

Используйте эти интерактивные элементы управления для выбора конфигурации скачкообразного изменения и наблюдения за изменениями в сетке ресурсов OFDM.

srs.CSRS = 19; % Bandwidth configuration C_SRS (0...63)
srs.BSRS = 2;  % Bandwidth configuration B_SRS (0...3)
srs.BHop = 0;  % Frequency hopping configuration (0...3). Set BHop >= BSRS to disable frequency hopping
srs.NRRC = 14; % Frequency domain position in blocks of 4 PRB (0...67)

% Create and display a multi-slot resource grid containing SRS
duration = 2*srs.SRSPeriod(1); % Transmission length in slots
hSRSGrid(carrier,srs, duration, true);
title('Carrier Grid Containing Frequency-Hopping SRS')

Figure contains an axes. The axes with title Carrier Grid Containing Frequency-Hopping SRS contains 2 objects of type image, line. This object represents SRS 1.

Полоса пропускания, через которую переходят символы SRS, увеличивается со значением CSRS и уменьшается с BHop (до BHop = BSRS отключает скачкообразное изменение). Увеличение BSRS уменьшает выделенную полосу пропускания на символ OFDM (свойство NRBPerTransmission) и может также уменьшить скачкообразную перестройку частоты внутри слота. Для отключения скачкообразной перестройки частоты установите BHop >= BSRS. Для конфигураций без скачкообразного изменения роли CSRS и BSRS аналогичны, поскольку выделенная полоса пропускания увеличивается с CSRS и уменьшается с BSRS.

Можно использовать таблицу конфигурации полосы пропускания (TS 38.211 Table 6.4.1.4.3-1) для вычисления количества различных шаблонов скачкообразной перестройки частоты, конфигурируемых параметром SRS. NRRC как NFHP=NBHop+1⋯NBSRS. Шаблоны скачкообразной перестройки частоты повторяются при NRRC>NFHP⋅NRBT/4.

N = hSRSNumberOfSubbandsOrHoppingPatterns(srs);

if srs.BHop < srs.BSRS && srs(1).NRB > 16 % Number of unique frequency-hopping patterns
    fprintf('Number of unique frequency-hopping patterns (configurable by NRRC < %d): %d.',N*srs.NRBPerTransmission/4,N);
else % Number of unique SRS subbands 
    fprintf('Number of unique SRS subbands (configurable by NRRC < %d):  %d.',N*srs.NRBPerTransmission/4,N);
end
Number of unique frequency-hopping patterns (configurable by NRRC < 18): 6.

Задайте параметры конфигурации полосы пропускания как CSRS = 20, BSRS = 2, и BHop = 1. Условие BHop < BSRS не гарантирует скачкообразного изменения частоты. Однако верно и обратное: BHop >= BSRS всегда отключает скачкообразную перестройку частоты. Вы можете определить, когда конфигурация полосы пропускания SRS (CSRS,BSRS,BHop) создает скачкообразную перестройку частоты с использованием параметра Nb из таблицы конфигурации полосы пропускания и оценки NFHP=NBHop+1⋯NBSRS>1 условий.

isFreqHoppingConfiguration = hSRSNumberOfSubbandsOrHoppingPatterns(srs) > 1;
disp(['Frequency hopping is' repmat(' not',1,~isFreqHoppingConfiguration) ' enabled.'])
Frequency hopping is enabled.

В случаях скачкообразной перестройки частоты свойство «только чтение» NRB определяет полосу пропускания, через которую транзитные участки SRS и NRBPerTransmission определяет мгновенную полосу пропускания, выделенную для символа OFDM SRS.

t = table([srs.NRB; srs.NRBPerTransmission],'RowNames', {'Freq-Hopping bandwidth','Instantaneous bandwidth'},'VariableNames',"NRB");
disp(t)
                               NRB
                               ___

    Freq-Hopping bandwidth     72 
    Instantaneous bandwidth    12 

Многопользовательские конфигурации

В этом разделе описывается конфигурирование нескольких передач SRS, подходящих для многопользовательских установок. Параметры временной, частотной и последовательной областей можно использовать для создания наборов ортогональных (без помех) передач SRS.

Ортогональная SRS временной области

Можно создавать ортогональные передачи SRS во временной области несколькими способами, например:

  • Конфигурирование различной периодичности слотов и смещения для различных SRS с помощью свойства SRSPeriod.

  • Настройка различных символьных назначений временной области для различных SRS с помощью свойства SymbolStart.

Конфигурирование несущей полосы пропускания 10 МГц с SCS 15 кГц.

carrier = nrCarrierConfig;
carrier.NSizeGrid = 52;
carrier.SubcarrierSpacing = 15;

Определение периодичности и смещения слота для создания ортогональных передач SRS.

Первая конфигурация SRS:

srs = nrSRSConfig;
srs(1).SRSPeriod = [1 0];
srs(1).SRSPeriod(1) = 4; % Slot periodicity and offset
srs(1).SRSPeriod(2) = 0; % Slot offset of first SRS

Вторая конфигурация SRS:

srs(2) = srs(1); % Create a copy of the configured SRS
srs(2).SRSPeriod(1) = 2; % Periodicity in slots
srs(2).SRSPeriod(2) = 1; % Offset in slots

На этом рисунке показана сетка ресурсов OFDM, содержащая сконфигурированные передачи SRS.

hSRSGrid(carrier,srs,srs(1).SRSPeriod(1)*2, true); % Generate a multi-slot resource grid containing SRS
title('SRS with Different Slot Offsets (SRSPeriod)')
ylim([0 srs(1).NRBPerTransmission]);

Figure contains an axes. The axes with title SRS with Different Slot Offsets (SRSPeriod) contains 3 objects of type image, line. These objects represent SRS 1, SRS 2.

Укажите количество символов SRS и местоположение в слоте для создания ортогональных передач SRS.

Первая конфигурация SRS:

srs = nrSRSConfig;
srs(1).NumSRSSymbols = 1;  % Number of SRS symbols in a slot (1,2,4)
srs(1).SymbolStart = 12; % Time-domain position of the SRS in the slot. (8...13) for normal cyclic prefix (CP) and (6...11) for extended CP

Вторая конфигурация SRS:

srs(2) = srs(1); % Create a copy of the configured SRS
srs(2).NumSRSSymbols = 2;
srs(2).SymbolStart = 9;

На этом рисунке показана сетка ресурсов OFDM, содержащая передачи SRS.

hSRSGrid(carrier,srs, 2, true); % Generate and display a 2-slot resource grid containing SRS
title('SRS with Different Symbol Locations (SymbolStart)');
ylim([0 srs(1).NRBPerTransmission]);

Figure contains an axes. The axes with title SRS with Different Symbol Locations (SymbolStart) contains 3 objects of type image, line. These objects represent SRS 1, SRS 2.

Ортогональная SRS частотной области

Ортогональные передачи SRS в частотной области можно создавать несколькими способами:

  • Настройка различных смещений гребенок для различных SRS с помощью свойства KBarTC.

  • Конфигурирование различных шаблонов скачкообразной перестройки частоты с использованием CSRS, BSRS, BHop и NRRC.

Конфигурирование несущей полосы пропускания 10 МГц с SCS 15 кГц.

carrier = nrCarrierConfig;
carrier.NSizeGrid = 52;
carrier.SubcarrierSpacing = 15;

Укажите номера гребенок и смещения для создания ортогональных передач SRS.

Первая конфигурация SRS:

srs = nrSRSConfig;
srs(1).KTC    = 2; % Comb number (2,4). It indicates the allocation of the SRS every KTC subcarriers
srs(1).KBarTC = 1; % Comb offset (0...KTC-1)

Вторая конфигурация SRS:

srs(2) = srs(1); % Create a copy of the configured SRS
srs(2).KTC    = 4;
srs(2).KBarTC = 0;

На этом рисунке показана сетка ресурсов OFDM, содержащая передачи SRS.

hSRSGrid(carrier,srs,2,true);
title('SRS with Different Comb Offsets (KBarTC)')
ylim([0 srs(1).NRBPerTransmission]);

Figure contains an axes. The axes with title SRS with Different Comb Offsets (KBarTC) contains 3 objects of type image, line. These objects represent SRS 1, SRS 2.

Создание ортогональных конфигураций SRS в частотной области с использованием различных шаблонов скачкообразной перестройки частоты.

srs = nrSRSConfig;
srs.NumSRSSymbols = 4;  % Number of SRS symbols in a slot
srs.SymbolStart =8; % Allocate SRS in OFDM symbols 10:13

Выберите требуемые параметры конфигурации полосы пропускания, тип ресурса и коэффициент повторения.

srs.CSRS = 10;  % Bandwidth configuration C_SRS (0...63)
srs.BSRS =  2;  % Bandwidth configuration B_SRS (0...3)
srs.BHop =  0;  % Frequency hopping configuration (0...3). Set BHop >= BSRS to disable frequency hopping
srs.ResourceType = "periodic"; % ('periodic','semi-persistent','aperiodic')
srs.Repetition   = 1; % Number of equal consecutive SRS transmissions (1,2,4). It must be lower than NumSRSSymbols

В этом примере вычисляется количество ортогональных последовательностей SRS, которые могут быть сконфигурированы NRRC и создает неперекрывающиеся конфигурации SRS. На рисунке показана сетка ресурсов OFDM, содержащая передачи SRS.

NRRC = num2cell(hNRRCSet(srs));
srs(2:length(NRRC)) = srs(1); % Create N-1 copies of the configured SRS
[srs(:).NRRC] = deal(NRRC{:}); % Assign the appropriate NRRC to each SRS configuration

hSRSGrid(carrier,srs, 3, true); % Generate and display a 3-slot resource grid containing SRS
title('SRS with Different Frequency-Hopping Patterns');
ylim([0 srs(1).NRBPerTransmission*hSRSNumberOfSubbandsOrHoppingPatterns(srs(1))]);

Figure contains an axes. The axes with title SRS with Different Frequency-Hopping Patterns contains 10 objects of type image, line. These objects represent SRS 1, SRS 2, SRS 3, SRS 4, SRS 5, SRS 6, SRS 7, SRS 8, SRS 9.

N = hSRSNumberOfSubbandsOrHoppingPatterns(srs(1));
if srs(1).BHop < srs(1).BSRS % Frequency-hopping cases
    fprintf('Number of unique frequency-hopping patterns (configurable by NRRC < %d): %d.', N*srs(1).NRBPerTransmission/4, N);
else
    fprintf('Number of unique subbands (configurable by NRRC < %d):  %d.', N*srs(1).NRBPerTransmission/4,N);
end
Number of unique frequency-hopping patterns (configurable by NRRC < 9): 9.

Следует отметить, что передачи SRS никогда не перекрываются независимо от Repetition фактор и ResourceType (aperiodic отключает скачкообразную перестройку частоты между слотами). Деактивизация скачкообразной перестройки частоты путем установки BHop >= BSRS и наблюдают, что различные SRS все еще распределены различным поддиапазонам.

Циклический сдвиг ортогональной SRS

Эта секция генерирует множество SRS, выделенных для одних и тех же временных и частотных ресурсов (OFDM-символов и поднесущих), но различных циклических сдвигов во временной области. Благодаря свойствам последовательностей Задоффа-Чу эта конфигурация создает ортогональную SRS. Чтобы продемонстрировать ортогональность среди сконфигурированных SRS, эта секция выполняет модуляцию CP-OFDM и вычисляет взаимную корреляцию форм сигналов во временной области.

% Configure a 10 MHz bandwidth carrier with 15 kHz SCS.
carrier = nrCarrierConfig;
carrier.NSizeGrid = 52;
carrier.SubcarrierSpacing = 15;

% Create a full-band SRS
srs = nrSRSConfig;
srs.CSRS = hSRSBandwidthConfiguration(srs,carrier.NSizeGrid);

% All SRS share the same physical resources, but they are configured with
% different cyclic shifts.
for i = 1:8
    srs(i) = srs(1);
    srs(i).CyclicShift = i-1;
end

% Create a resource grid containing SRS
numSlots = 1; % Number of slots to generate
for ich = length(srs):-1:1
    slotGrid{ich} = hSRSGrid(carrier,srs(ich),numSlots);
end

% Get OFDM modulation related information
ofdmInfo = nrOFDMInfo(carrier);

% OFDM modulation
nsrs = length(srs); % Number of SRS waveforms
numSamples = numSlots*ofdmInfo.SampleRate/1000/carrier.SlotsPerSubframe;
txWaveform = zeros(numSamples,srs(1).NumSRSPorts,nsrs);
for i = 1:nsrs
    txWaveform(:,:,i) = nrOFDMModulate(carrier,slotGrid{i});
end

% Cross correlation of SRS waveforms generated with different cyclic shifts
txWaveform = reshape(txWaveform,[],nsrs*srs(1).NumSRSPorts);
C = txWaveform'*txWaveform;
srsCorr = C./diag(C);

На этом рисунке показана взаимная корреляция во временной области сигналов SRS с различными циклическими сдвигами.

imagesc(abs(srsCorr))
title('Correlation of SRS with Different CyclicShift')
xlabel('SRS configuration'); ylabel('SRS configuration');
colorbar

Figure contains an axes. The axes with title Correlation of SRS with Different CyclicShift contains an object of type image.

Низкие корреляции между формами сигналов SRS, генерируемыми с использованием различных циклических сдвигов во временной области, показывают их ортогональность.

disp('Absolute value of correlation matrix: '); disp(' '); disp(abs(srsCorr));
Absolute value of correlation matrix: 
 
  Columns 1 through 7

    1.0000    0.0027    0.0021    0.0008    0.0003    0.0010    0.0007
    0.0027    1.0000    0.0030    0.0006    0.0006    0.0001    0.0006
    0.0021    0.0030    1.0000    0.0041    0.0007    0.0008    0.0003
    0.0008    0.0006    0.0041    1.0000    0.0040    0.0004    0.0009
    0.0003    0.0006    0.0007    0.0040    1.0000    0.0039    0.0002
    0.0010    0.0001    0.0008    0.0004    0.0039    1.0000    0.0039
    0.0007    0.0006    0.0003    0.0009    0.0002    0.0039    1.0000
    0.0038    0.0005    0.0008    0.0000    0.0009    0.0003    0.0039

  Column 8

    0.0038
    0.0005
    0.0008
    0.0000
    0.0009
    0.0003
    0.0039
    1.0000

Резюме и дальнейшие исследования

Этот пример описывает, как генерировать и преобразовывать последовательности SRS в сетку ресурсов несущей OFDM, и как генерировать соответствующую форму сигнала для множества конфигураций несущей и SRS. В примере показана взаимосвязь между параметрами конфигурации SRS и их влиянием как на сетку ресурсов, так и на свойства формы сигнала SRS. Например:

  • Полоса пропускания, выделенная для SRS, обычно увеличивается с CSRS и уменьшается с BSRS. Для конфигураций со скачкообразной перестройкой частоты мгновенная полоса пропускания и полоса пропускания со скачкообразной перестройкой уменьшаются с помощью BSRS и BHopсоответственно.

  • Частотное положение SRS зависит от FrequencyStart и NRRC параметры. NRRC позволяет выбирать различные поддиапазоны SRS и шаблоны скачкообразной перестройки частоты.

  • BHop < BSRS обычно производит скачкообразную перестройку частоты, но она не гарантируется. Однако BHop >= BSRS достаточна для деактивации скачкообразной перестройки частоты.

  • Скачкообразная перестройка частоты между слотами активна только для periodic и semi-persistent типы ресурсов.

  • Параметры времени, частоты и последовательности могут использоваться для создания ортогональных передач SRS.

Пример также демонстрирует, как извлечь полезную информацию как из таблицы конфигурации полосы пропускания SRS, так и из свойств только для чтения, таких как количество уникальных поддиапазонов SRS и шаблонов скачкообразной перестройки частоты, конфигурируемых посредством NRRC.

Генерация последовательности SRS для многопортовых конфигураций использует механизм ортогональности, представленный в циклической ортогональной SRS. Для проверки ортогональности нескольких портов настройте многопортовую SRS, создайте символы и индексы, преобразуйте символы в сетку ресурсов, создайте формы сигналов SRS и вычислите взаимную корреляцию между формами сигналов, генерируемыми для различных портов.

Ссылки

[1] 3GPP TS 38.211. "НР; Физические каналы и модуляция. "Проект партнерства 3-го поколения; Техническая спецификация на сеть радиодоступа группы.

[2] 3GPP TS 38.331. "НР; Спецификация протокола управления радиоресурсами (RRC). "Проект партнерства 3-го поколения; Техническая спецификация на сеть радиодоступа группы.

Локальные функции

В этом примере используются следующие локальные функции:

function [csrs,bsrs] = hSRSBandwidthConfiguration(srs, NRB)
% [CSRS,BSRS] = hBandwidthConfiguration(SRS, NRB) returns the SRS
% bandwidth configuration parameters CSRS and BSRS required to transmit an
% SRS in a bandwidth specified by NRB. The function calculates CSRS and
% BSRS considering the SRS properties FrequencyStart and NRRC, so the
% available bandwidth NRB is reduced by the frequency origin of the SRS.
% For frequency hopping cases, the value of BSRS returned is equal to that
% of the BSRS property in the input SRS configuration object.

    f0 = hSRSFrequencyOrigin(srs);
    NRB = NRB - f0;
    if NRB < 4
        error('The available bandwidth is not sufficient to allocate an SRS transmission. Increase the carrier bandwidth or configure the SRS in a lower frequency.' )    
    end
    
    % For frequency hopping configurations
    if srs.BHop >= srs.BSRS && nargout == 2 % No frequency hopping and BSRS is requested
        BSRS = 0:3;
    else
        BSRS = 0;
    end
    
    % Initialize gap between SRS frequency allocation and carrier bandwidth
    NRBGap = NRB; 
    
    % Find the appropriate CSRS for each BSRS that minimizes the gap only
    % in non-hopping cases. For freq. hopping, find the value of CSRS only.
    for b = BSRS
        % NRB allocated to the SRS for BSRS = b and all CSRS
        srsNRBb = srs.BandwidthConfigurationTable{:,2*(b+1)};
        mSRSbMax = max( srsNRBb( srsNRBb <= NRB ));
        
        % Calculate gap between SRS allocation and carrier bandwidth
        gap = NRB - mSRSbMax;
        if gap < NRBGap
            csrs = srs.BandwidthConfigurationTable{ srsNRBb == mSRSbMax ,1};
            bsrs = b;
            NRBGap = gap;
        end
    end
    csrs = csrs(1);
    
    if srs.BHop < bsrs
        bsrs = srs.BSRS;
    end
end

function out = hSRSNumberOfSubbandsOrHoppingPatterns(srs)
% N = hSRSNumberOfSubbandsOrHoppingPatterns(SRS) returns the number of
% unique SRS subbands or frequency-hopping patterns N configurable by the
% SRS property NRRC. An SRS subband is the frequency band allocated for SRS
% in a given OFDM symbol (See SRS property NRBPerTransmission). N is
% calculated using TS 38.211 Table 6.4.1.4.3-1 for the bandwidth
% configuration parameters CSRS, BSRS, and BHop specified in the SRS
% configuration object SRS.

    bwct = nrSRSConfig.BandwidthConfigurationTable{:,:};
    if srs.BHop < srs.BSRS % Number of unique frequency-hopping patterns
        b0 = srs.BHop+1;
    else % Number of unique SRS subbands
        b0 = 0;
    end
    out = prod(bwct(srs.CSRS+1,2*(b0:srs.BSRS)+3));
end

function [Grid,dispGrid] = hSRSGrid(carrier,srs,Duration,displayGrid,chplevels)
% [GRID,DISPGRID] = hSRSGrid(CARRIER,SRS,DURATION,DISPLAYGRID,CHPLEVELS)
% returns a multi-slot OFDM resource grid GRID containing a set of sounding
% reference signals in a carrier, as specified by the configuration objects
% CARRIER and SRS. This function also returns a scaled version of the grid
% used for display purposes. The optional input DURATION (Default 1)
% specifies the number of slots of the generated grid. The resource grid
% can be displayed using the optional input DISPLAYGRID (Default false).
% CHPLEVELS specifies the channel power levels for display purposes only
% and it must be of the same size as SRS.

    numSRS = length(srs);
    if nargin < 5
        chplevels = 1:-1/numSRS:1/numSRS;
        if nargin < 4
            displayGrid = false;
            if nargin < 3
                Duration = 1;
            end
        end
    end
    
    SymbolsPerSlot = carrier.SymbolsPerSlot;
    emptySlotGrid = nrResourceGrid(carrier,max([srs(:).NumSRSPorts])); % Initialize slot grid
    
    % Create the SRS symbols and indices and populate the grid with the SRS symbols
    Grid = repmat(emptySlotGrid,1,Duration);
    dispGrid = repmat(emptySlotGrid,1,Duration); % Frame-size grid for display
    for ns = 0:Duration-1
        slotGrid = emptySlotGrid;
        dispSlotGrid = emptySlotGrid; % Slot-size grid for display
        for ich = 1:numSRS
            srsIndices = nrSRSIndices(carrier,srs(ich));
            srsSymbols = nrSRS(carrier,srs(ich));
            slotGrid(srsIndices) = srsSymbols;
            dispSlotGrid(srsIndices) = chplevels(ich)*srsSymbols; % Scale the SRS for display only
        end
        OFDMSymIdx = ns*SymbolsPerSlot + (1:SymbolsPerSlot);
        Grid(:,OFDMSymIdx,:) = slotGrid;
        dispGrid(:,OFDMSymIdx,:) = dispSlotGrid;
        carrier.NSlot = carrier.NSlot+1;
    end
    
    if displayGrid
        plotGrid(dispGrid(:,:,1),chplevels,"SRS " + (1:numSRS)'); 
    end
end
    
function varargout = plotGrid(Grid,chplevels,leg)
% plotGrid(GRID, CHPLEVEL,LEG) displays a resource grid GRID containing
% channels or signals at different power levels CHPLEVEL and create a
% legend for these using a cell array of character vector LEG

    if nargin < 3
        leg = {'SRS'};
        if nargin < 2
            chplevels = 1;
        end
    end
    
    cmap = colormap(gcf);
    chpscale = length(cmap); % Scaling factor
    
    h = figure;
    image(0:size(Grid,2)-1,(0:size(Grid,1)-1)/12,chpscale*abs(Grid(:,:,1))); % Multiplied with scaling factor for better visualization
    axis xy;
    
    title('Carrier Grid Containing SRS')
    xlabel('OFDM Symbol'); ylabel('RB');
    
    clevels = chpscale*chplevels(:);
    N = length(clevels);
    L = line(ones(N),ones(N),'LineWidth',8); % Generate lines
    
    % Index the color map and associate the selected colors with the lines
    set(L,{'color'},mat2cell(cmap( min(1+fix(clevels),length(cmap) ),:),ones(1,N),3)); % Set the colors according to cmap
    
    % Create legend
    legend(leg(:));
    
    if nargout > 0 
        varargout = {h};
    end
end

function hSRSAnnotations(carrier,srs)
% hSRSAnnotations(carrier,srs) adds annotation to the current figure
% indicating the frequency origin of the SRS and the number of RB used per
% OFDM symbol for the configuration objects CARRIER and SRS.

    % Calculate the frequency origin of the first SRS symbol
    f0 = hSRSFrequencyOrigin(srs);
    
    hold on;
    hfig = gcf;
    set(hfig,'Units','Normalized');
    Sym0 = srs.SymbolStart-0.5;
    if isnumeric(srs.SRSPeriod)
        Sym0 = srs.SRSPeriod(2)*carrier.SymbolsPerSlot + srs.SymbolStart-0.5;
    end
    
    IP = get(gca,'Position');
    
    % Y-coordinate in the current axes of the SRS freq position f0
    Yf0 = f0/carrier.NSizeGrid*IP(4)+IP(2);
    Xc = Sym0/((carrier.NSlot+1)*carrier.SymbolsPerSlot)*IP(3)+IP(1);
    
    % Add annotation to the figure including f0 in RB
    if f0/carrier.NSizeGrid > 0.08 % Only plot f0 when there is enough space in the y-axis
        % Create doublearrow for F0
        YMin = IP(2);
        annotation(hfig,'doublearrow',Xc*[1 1], [YMin Yf0],...
            'Color',[1 0.4 0.15]);
        
        % Text for F0
        str = sprintf('$$F_0 = %d $$ RB', f0);
        Ystr = f0/carrier.NSizeGrid/2;
        text(gca,(Xc-IP(1))/IP(3)-0.25, Ystr,str,...
            'Color',[1 0.4 0.15],'FontSize',14, ...
            'Units','Normalized','Interpreter','latex');
    end
    
    % Create doublearrow from f0 and spanning the SRS bandwidth
    Yf1 = Yf0 + srs.NRBPerTransmission/carrier.NSizeGrid*IP(4);
    annotation(hfig,'doublearrow',Xc*[1 1], [Yf0 Yf1],...
        'Color',[1 0.4 0.15]);
    
    % Text for NRBt
    str = sprintf('$$\\textrm{NRB}_T = %d $$ RB', srs.NRBPerTransmission);
    Ystr = (f0 + 0.5*srs.NRBPerTransmission)/carrier.NSizeGrid;
    text(gca,(Xc-IP(1))/IP(3)-0.32, Ystr ,str,...
        'Color',[1 0.4 0.15],'FontSize',14, ...
        'Units','Normalized','Interpreter','latex');
end

function f0 = hSRSFrequencyOrigin(srs)
% Calculate the frequency origin of the first SRS symbol in a slot

    NSBTable = hSRSNumberOfSubbandsOrHoppingPatterns(srs);
    NRBt = srs.NRBPerTransmission;
    
    % Origin of the SRS in frequency in RB
    f0 = srs.FrequencyStart + NRBt*mod(floor(4*srs.NRRC/NRBt),NSBTable);
end

function [NRRC,NRB] = hNRRCSet(srs)
% Calculate the values of NRRC that generate a unique set of orthogonal SRS in frequency
    if srs.BHop < srs.BSRS % Frequency-hopping cases
        NRB = srs(1).NRB;  % Hopping bandwidth
    else 
        NRB = nrSRSConfig.BandwidthConfigurationTable{srs(1).CSRS+1,2}; 
    end
    
    % Number of frequency-hopping patterns or SRS subbands depending on the values of BSRS and BHop
    N = hSRSNumberOfSubbandsOrHoppingPatterns(srs);
    
    NRRC = NRB/4*(0:N-1)/N; 
end

Ссылки

[1] 3GPP TS 38.211. "НР; Физические каналы и модуляция. "Проект партнерства 3-го поколения; Техническая спецификация на сеть радиодоступа группы.

См. также

Функции

Объекты

Связанные темы