Настройка SRS NR

В этом примере показано, как сгенерировать звучание опорными сигналами (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 в RBS относительно источника несущей когда 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 (несущая, сэры, 1 год, верный); % Create and display a single-slot resource grid containing SRS
заголовок'Resource Grid Containing SRS. NRRC = ' num2str (srs.NRRC)]);
hSRSAnnotations (несущая, сэры);

Figure contains an axes object. The axes object 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). SRS возвращается к исходному положению (FrequencyStart) когда NRRC 9. NRBT количество блоков ресурса (RBS), выделенный SRS на передачу.

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

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

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

F0=FrequencyStart+NRBTmod(4NRRCNRBT,NSB)

NSB обозначает количество поддиапазонов SRS (диапазоны частот размера NRBT) где SRS может быть расположен через параметр NRRC. Вычислять NSB, можно использовать таблицу настройки полосы пропускания SRS (см. таблицу 6.4.1.4.3-1 TS 38.211). Можно также получить доступ к этой таблице через 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=N0NBSRS=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+(0NSBNRBT-1). Для CSRS = 10, SRS повторяется когда NRRC=NSBNRBT/4=N0NBSRSmSRS,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 (несущая, сэры, 1 год, верный); % Create and display a single-slot resource grid containing SRS
заголовок'Resource Grid with Full-Band SRS. CSRS = ' num2str (srs.CSRS)]);
hSRSAnnotations (несущая, сэры);

Figure contains an axes object. The axes object 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 (см. таблицу 6.4.1.4.3-1 TS 38.211). В качестве альтернативы 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 содержат количество RBS, выделенного SRS для параметра b = BSRS и нескачкообразное движение настроек. Строка, соответствующая C_SRS = 14 содержит много RBS 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 является постоянной через символы SRS OFDM и является меньшей, чем полоса пропускания, по которой скачкообразно двигается 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 с помощью более высокого параметра слоя resourceType (см. Раздел TS 38.331 6.3.2 Config SRS). Когда шаблон скачкообразного движения частоты сбрасывается для апериодических типов ресурсов 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
длительность = 2*srs.SRSPeriod (1); % Transmission length in slots
hSRSGrid (несущая, сэры, длительность, верная);
заголовок'Carrier Grid Containing Frequency-Hopping SRS')

Figure contains an axes object. The axes object 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.

Можно использовать таблицу настройки полосы пропускания (таблица 6.4.1.4.3-1 TS 38.211), чтобы вычислить количество различных скачкообразно перемещающих частоту шаблонов, конфигурируемых параметром SRS NRRC как NFHP=NBHop+1NBSRS. Скачкообразно перемещающие частоту шаблоны повторяются когда NRRC>NFHPNRBT/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+1NBSRS>1.

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

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

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
сэры (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
сэры (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 object. The axes object 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)
сэры (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;
сэры (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 object. The axes object 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
сэры (1).KBarTC = 1; % Comb offset (0...KTC-1)

Вторая настройка SRS:

srs(2) = srs(1); % Create a copy of the configured SRS
srs(2).KTC    = 4;
сэры (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 object. The axes object 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 object. The axes object 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 object. The axes object 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. “NR; Физические каналы и модуляция”. Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.

[2] 3GPP TS 38.331. “NR; спецификация протокола Радио-управления ресурсами (RRC)”. Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.

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

Этот пример использует эти локальные функции:

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. “NR; Физические каналы и модуляция”. Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.

Смотрите также

Функции

Объекты

Похожие темы