В этом примере показано, как генерировать зондирующие опорные сигналы (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);

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

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

Для распределения частот 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')

Полоса пропускания, через которую переходят символы 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 как . Шаблоны скачкообразной перестройки частоты повторяются при .
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 из таблицы конфигурации полосы пропускания и оценки условий.
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 с помощью свойства 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]);

Укажите количество символов 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]);

Ортогональные передачи 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]);
Создание ортогональных конфигураций 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))]);

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, выделенных для одних и тех же временных и частотных ресурсов (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

Низкие корреляции между формами сигналов 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-го поколения; Техническая спецификация на сеть радиодоступа группы.