SRS is the uplink counterpart of CSI-RS, and the four points below summarise the whole topic. The rest of this page takes them one at a time. If you read only one of them, read the last one. In TDD the gNB reuses an uplink measurement to make downlink decisions, and that is why SRS carries far more weight in NR than it did in LTE.
|
- SRS in Detail
- How SRS works
- Parameters defining SRS resources within a slot.
- SRS Bandwidth Configuration
- UE Capabilities
- Antenna Switching
- RRC Parameters
- Get the Test Procedure and Log / Amarisoft TechAcademy
- Reference
SRS in Detail
SRS stands for Sounding Reference Signal. High level concept of NR SRS is same as in LTE SRS and some of lower level parameter are very similar to LTE SRS lower layer parameter. I would suggest you to go through LTE SRS first if you are new to this concept and then read this page since I would not explain on those basic concepts that are explained in LTE SRS.
Simply put, SRS is a kind of reference signal for Uplink (i.e, transmitted by UE) so that gNB can perform channel quality estimation for uplink. gNB can perform UL channel estimation from PUSCH DMRS, but PUSCH DMRS is transmitted only when PUSCH is scheduled and only with the bandwidth in which PUSCH is scheduled. On the contrary, SRS can be transmitted independantly of PUSCH scheduling and PUSCH bandwidth(number of PUSCH RB).
In short, the role of SRS is similar to CSI RS. CSI-RS is a reference signal for downlink channel quality estimation independent of PDSCH DMRS and SRS is a reference signal for uplink channel quality estimation independent of PUSCH DMRS
SRS plays more important role in NR because TDD is dominant mode of deployment. In TDD, gNB can utilize the channel estimation result from SRS not only for UL scheduling but also for DL scheduling as well based on channel reciprocity in TDD.
One thing the summary above leaves implicit is that SRS is not a single purpose signal. Every SRS resource set carries a usage field, and the four values it can take are four different jobs: beamManagement, codebook, nonCodebook and antennaSwitching. The gNB sets usage per resource set rather than per UE, so one UE can be sounding for two different reasons at the same time.
Those four split into two groups. The first three, beamManagement, codebook and nonCodebook, all serve the uplink directly. With codebook the gNB reads the sounding and then tells the UE which precoder to use, chosen from a fixed codebook. With nonCodebook the UE picks its own precoder instead, and the ASN.1 further down shows how it is guided. The resource set carries an associated NZP-CSI-RS, present only in the nonCodebook case, and the UE measures that to work out what to send.
antennaSwitching is the exception, and it is the reason SRS carries so much weight in TDD. It sounds the uplink in order to learn about the downlink. Everything in the Antenna Switching section further down follows from that single inversion.
usage is configured per resource set : one UE can hold several SRS resource sets with different usage values, so sounding for beam management and sounding for antenna switching can run side by side.Three of the four usages serve the uplink : beamManagement selects the uplink beam, and codebook and nonCodebook decide the uplink precoder between them.codebook and nonCodebook differ in who chooses : the gNB chooses from a codebook in the first case. In the second the UE chooses for itself, guided by an associated NZP-CSI-RS that only that case configures.antennaSwitching points the other way : it uses an uplink measurement to configure the downlink, which only works because TDD puts both directions on the same frequency.
How SRS works ?
In short, the way SRS works can be illustrated as follows. Four phases carry the whole procedure, and each one is a separate problem. The gNB has to configure the resource. The UE has to transmit a signal the gNB already knows. The gNB has to compare what arrived against what it expected, and something has to be done with the difference.

This is the phase where gNB determines about SRS configuration (e.g, SRS physical resources, usage, report period timing etc) and notifies the configuration to UE via RRC messages (e.g, RRCSetup, RRCReconfiguration).
In this phase, the UE transmits the SRS, which is a predefined signal with known characteristics, at a specific time and frequency. The SRS configuration is provided to the UE by the gNB, and it may vary depending on the cell's conditions and traffic requirements. The UE sends the SRS periodically or aperiodically, as instructed by the gNB, on the uplink (UL) channel.
Upon receiving the SRS from the UE, the gNB measures and analyzes the received signal. It estimates the channel state information (CSI) by comparing the received SRS with the known reference signal. The gNB evaluates various parameters, such as the path loss, propagation delay(phase delay), and received signal strength, to understand the current radio environment and channel conditions between the gNB and the UE.
Once the gNB has estimated the channel state based on the SRS, it uses this information to optimize its resource allocation and scheduling decisions. This can involve adjusting transmission parameters (such as modulation and coding schemes) or selecting the most appropriate MIMO settings to enhance the overall system capacity and improve the user experience. By leveraging the SRS, the gNB can adapt to the dynamic nature of the radio environment and provide more efficient and reliable communication services.
Parameters defining SRS resources within a slot.
SRS resource mean the location of SRS in time and frequency domain in the resource grid. Following is the illustration for SRS Resource allocation based on 38.211-6.4.1.4.
NOTE : For more detailed example of SRS resource element allocation, refer to this page with Matlab 5G Toolbox.

Followings are breakdown and description for the digram shown above. It is a detailed explanation of how the allocation works in the time and frequency domains.
- The maximum duration of SRS in the time domain is 4 symbols within a slot.
- Each slot contains 14 OFDM symbols.
- SRS symbols are allocated in the last 6 symbols of the slot (range: l0 = 8 to 13).
- The starting position of SRS symbols is calculated as:
- Nslot_symbol: Total symbols in a slot (14 symbols).
- loffset: Offset value, defined in SRS-Resource.resourceMapping.startPosition. Possible values: {0, 1, 2, 3, 4, 5}.
l0 = Nslot_symbol - 1 - loffset
- The number of PRBs allocated for SRS transmission is denoted as mSRS,b.
- It is calculated using the formula:
- NRBSC: Number of subcarriers per PRB (12 in 5G).
- KTC: Transmission comb parameter, defined in SRS-Resource.transmissionComb (n2, n4).
MRSSC = mSRS,b × NRBSC / KTC
- Details are specified in 38.211 Table 6.4.1.4.3-1, including:
- Possible values for the number of OFDM symbols: {n1, n2, n4}.
- Configurations for KTC and MRSSC.
Here goes the detailed algorithm and parameters of SRS RE mapping based on 38.211-6.4.1.4.3

NOTE : from the equation for k(pi), you would notice that the multiple SRS port (i.e, 1001 ~ 1003} is interleaving in frequency domain within the same OFDM symbol.
Here's an explanation of the components:
The following describes the algorithm and parameters for Sounding Reference Signal (SRS) Resource Element (RE) mapping in 5G NR.
- The scaling factor for each RE is defined as:
α(p,i)(k', l') =(1/√Nap) βSRS(pi)(k', l') for k' = 0, 1, ..., MRSSC - 1 and l' = 0, 1, ..., NSRSsymb - 1
- 0 otherwise.
- The starting subcarrier is calculated as:
k0(pi) = kŻ0pi + Σb=0BSRS - 1 KTC MRSSC,b nb
- The hopping pattern is defined as:
nb =
- Case 1 : ⌊4nRRC / mSRS,b⌋ mod Nb if b ≥ Bhop
- Case 2 : Fb(nSRS) + ⌊4nRRC / mSRS,b⌋ mod Nb if b < Bhop
- Comb-based subcarrier mapping is:
kŻ(pi)TC = (kŻTC + KTC / 2) mod KTC
- KTC: Transmission comb parameter (n2, n4).
- Ensures interleaving in frequency domain.
- Subcarriers for SRS blocks are calculated as:
MRSSC = mSRS,b × (NRBSC / KTC)
- mSRS,b: Number of PRBs.
- NRBSC: Subcarriers per PRB (12 in 5G).
Followings are some of the examples showing the key parameters of SRS resource allocation.
|
|
![]() |
|
|
![]() |
Since SRS resources are positioned in a certain interval in frequency domain as shown above, we can interleave (multiplex) multiple SRS along the frequency domain accupying the same OFDM symbols as shown below.
In case of comb2 configuration, you can multiplex two SRS signal as shown below.

In case of comb4 configuration, you can multiplex maximum 4 SRS signals as shown below.

SRS Bandwidth Configuration
Some of important factors defining the location and bandwith of SRS are defined by 38.211-Table 6.4.1.4.3-1. A couple of RRC parameter determines which row of the table is used for a specific SRS Resource set as indicated below.

The drawing above shows how the three fields reach the table. All three sit inside the freqHopping group of SRS-Resource, and each one indexes a different part of 38.211 Table 6.4.1.4.3-1. The first, c-SRS, selects the row, and its range of INTEGER (0..63) is exactly the number of rows the table has. The second, b-SRS, selects which of the four column pairs is read, so its range of INTEGER (0..3) matches the four B-SRS groups across the top. The third is b-hop, which controls hopping rather than bandwidth.
Each cell of the table holds two numbers rather than one, and the pair is what makes the lookup useful. The first number, m-SRS, is the sounding bandwidth in resource blocks. The second, N, is the number of parts that bandwidth is divided into at that level. One pattern is visible down the whole table. N is always 1 in the B-SRS equals 0 column, so the widest level is always a single undivided block, and the finer levels are what subdivide it.
The practical consequence is a trade the gNB has to make. A wide sounding bandwidth gives a channel estimate across the whole carrier in one transmission, and it costs the uplink more. A narrow one costs less per transmission, and the gNB has to collect several of them before it knows the whole band. The two worked examples at the end of this page sit on opposite sides of that trade, at 4 and 24 resource blocks.
Three RRC fields, one table lookup : c-SRS chooses the row and b-SRS chooses the column pair. The cell where they meet gives the sounding bandwidth, and b-hop controls hopping without entering that lookup.The ASN.1 ranges and the table dimensions agree : c-SRS is INTEGER (0..63) against 64 rows, and b-SRS is INTEGER (0..3) against four column pairs. Neither field can point outside the table.Each cell carries a bandwidth and a division count : m-SRS is the sounding bandwidth in resource blocks, and N says how many parts it is split into. In the B-SRS equals 0 column N is always 1.Bandwidth is an overhead decision, not just a coverage one : sounding the whole carrier at once is the fastest way to a full channel estimate. It is also the most expensive use of uplink symbols.
< 38.211-Table 6.4.1.4.3-1: SRS bandwidth configuration. >


UE Capabilities
SRS related UE capability is pretty complicated topic and I still don't have complete understandings on this. I am just adding small items as I learn more on this issue.
I think the most fundamental UE capability about SRS is following (38.214-621)
The UE capability of this statement is described in supportedSRS-Resources in 38.306.
An example of UE capability information from a commercial device is as follows : (The protocol log is captured by Amarisoft Callbox and a Commercial UE).
Decoded RRC,
featureSetsUplink {
{
featureSetListPerUplinkCC {
1
},
supportedSRS-Resources {
maxNumberAperiodicSRS-PerBWP n16,
maxNumberAperiodicSRS-PerBWP-PerSlot 6,
maxNumberPeriodicSRS-PerBWP n16,
maxNumberPeriodicSRS-PerBWP-PerSlot 6,
maxNumberSemiPersistentSRS-PerBWP n2,
maxNumberSemiPersistentSRS-PerBWP-PerSlot 2,
maxNumberSRS-Ports-PerResource n1
}
},
{
featureSetListPerUplinkCC {
2
},
supportedSRS-Resources {
maxNumberAperiodicSRS-PerBWP n16,
maxNumberAperiodicSRS-PerBWP-PerSlot 6,
maxNumberPeriodicSRS-PerBWP n16,
maxNumberPeriodicSRS-PerBWP-PerSlot 6,
maxNumberSemiPersistentSRS-PerBWP n2,
maxNumberSemiPersistentSRS-PerBWP-PerSlot 2,
maxNumberSRS-Ports-PerResource n1
}
},
Followings are for UE Capability Information
Following is based on
FeatureSetUplink ::= SEQUENCE {
featureSetListPerUplinkCC SEQUENCE (SIZE (1.. maxNrofServingCells)) OF FeatureSetUplinkPerCC-Id,
scalingFactor ENUMERATED {f0p4, f0p75, f0p8} OPTIONAL,
dummy3 ENUMERATED {supported} OPTIONAL,
intraBandFreqSeparationUL FreqSeparationClass OPTIONAL,
searchSpaceSharingCA-UL ENUMERATED {supported} OPTIONAL,
dummy1 DummyI OPTIONAL,
supportedSRS-Resources SRS-Resources OPTIONAL,
twoPUCCH-Group ENUMERATED {supported} OPTIONAL,
dynamicSwitchSUL ENUMERATED {supported} OPTIONAL,
simultaneousTxSUL-NonSUL ENUMERATED {supported} OPTIONAL,
pusch-ProcessingType1-DifferentTB-PerSlot SEQUENCE {
scs-15kHz ENUMERATED {upto2, upto4, upto7} OPTIONAL,
scs-30kHz ENUMERATED {upto2, upto4, upto7} OPTIONAL,
scs-60kHz ENUMERATED {upto2, upto4, upto7} OPTIONAL,
scs-120kHz ENUMERATED {upto2, upto4, upto7} OPTIONAL
} OPTIONAL,
dummy2 DummyF OPTIONAL
}
Three of those fields carry a name they did not start with. The fields dummy3, dummy1 and dummy2 were crossCarrierScheduling-OtherSCS, srs-TxSwitch and csi-ReportFramework in the Release 15 text. 3GPP does not delete a field once it is published, so a deprecated one is renamed and left in place to hold its position in the encoding. Of the three, dummy1 is the one that matters here, because it is the old home of the antenna switching capability.
The live capability moved into BandParameters instead, and the capture further down confirms it by showing srs-TxSwitch inside bandList-v1540. Two details changed with the move. The field txSwitchImpactToRx became an INTEGER (1..32) rather than a flag, and the value list gained t1r1, t2r2, t4r4 and notSupported. Release 16 then added the combined values, and Release 17 extended the whole thing past four receive antennas with an 11 bit string.
Following is based on
BandParameters-v1540 ::= SEQUENCE {
srs-CarrierSwitch CHOICE {
nr SEQUENCE {
srs-SwitchingTimesListNR SEQUENCE (SIZE (1..maxSimultaneousBands)) OF SRS-SwitchingTimeNR
},
eutra SEQUENCE {
srs-SwitchingTimesListEUTRA SEQUENCE (SIZE (1..maxSimultaneousBands)) OF SRS-SwitchingTimeEUTRA
}
} OPTIONAL,
srs-TxSwitch SEQUENCE {
supportedSRS-TxPortSwitch ENUMERATED {t1r2, t1r4, t2r4, t1r4-t2r4, t1r1, t2r2, t4r4, notSupported},
txSwitchImpactToRx INTEGER (1..32) OPTIONAL,
txSwitchWithAnotherBand INTEGER (1..32) OPTIONAL
} OPTIONAL
}
# ---- BandParameters-v1610 : 38.331 v19.3.0 (Release 19) ----
BandParameters-v1610 ::= SEQUENCE {
srs-TxSwitch-v1610 SEQUENCE {
supportedSRS-TxPortSwitch-v1610 ENUMERATED {t1r1-t1r2, t1r1-t1r2-t1r4, t1r1-t1r2-t2r2-t2r4, t1r1-t1r2-t2r2-t1r4-t2r4,
t1r1-t2r2, t1r1-t2r2-t4r4}
} OPTIONAL
}
# ---- BandParameters-v1710 : 38.331 v19.3.0 (Release 19) ----
BandParameters-v1710 ::= SEQUENCE {
-- R1 23-8-3SRS Antenna switching for >4Rx
srs-AntennaSwitchingBeyond4RX-r17 SEQUENCE {
-- 1. Support of SRS antenna switching xTyR with y>4
supportedSRS-TxPortSwitchBeyond4Rx-r17 BIT STRING (SIZE (11)),
-- 2. Report the entry number of the first-listed band with UL in the band combination that affects this DL
entryNumberAffectBeyond4Rx-r17 INTEGER (1..32) OPTIONAL,
-- 3. Report the entry number of the first-listed band with UL in the band combination that switches together with this UL
entryNumberSwitchBeyond4Rx-r17 INTEGER (1..32) OPTIONAL
} OPTIONAL
}
# ---- DummyI : 38.331 v19.3.0 (Release 19) ----
DummyI ::= SEQUENCE {
supportedSRS-TxPortSwitch ENUMERATED {t1r2, t1r4, t2r4, t1r4-t2r4, tr-equal},
txSwitchImpactToRx ENUMERATED {true} OPTIONAL
}
Example 01 > UE Capability Information - t1r2
The capture below is the part of a real UE capability message that carries the antenna switching capability. Notice where it sits. The field srs-TxSwitch appears inside bandList-v1540, which is per band rather than per feature set, and that placement is the point the listing above makes.
Decoded RRC,
supportedBandCombinationList-v1540 {
{
bandList-v1540 {
{
srs-TxSwitch {
supportedSRS-TxPortSwitch t1r2
}
}
},
ca-ParametersNR-v1540 {
csi-RS-IM-ReceptionForFeedbackPerBandComb {
maxNumberSimultaneousNZP-CSI-RS-ActBWP-AllCC 8,
totalNumberPortsSimultaneousNZP-CSI-RS-ActBWP-AllCC 64
},
simultaneousCSI-ReportsAllCC 8
}
},
....
}
Antenna Switching
Following RRC parameter is to configure UE to do SRS antenna switching The idea behind it is worth stating before the parameter arrives. A UE with more receive chains than transmit chains cannot sound every antenna at once. So it sounds them in turn, moving its transmitter across the antennas over successive SRS symbols, and the gNB assembles one picture of the downlink channel out of the pieces.
SRS-ResourceSet.usage = antennaSwitching
UE performs antenna switching in various way depending on RRC parameter setting in SRS-ResourceSet as described in 38.214 6.2.1.2. Which of the following case should be applied ? It depends on UE capability on supportedSRS-TxPortSwitch which can be 1T2R or 1T4R or 2T4R or T=R
-
Number of SRS ResourceSet =
up to two -
Each ResourceSet has
two SRS Resources transmitting at different symbols -
Each SRS Resource in a ResourceSet consists of
single SRS port and the SRS port of the second resource in the set is associated with a different UE antenna port than the SRS port of the first resource in the same set - SRS-ResourceSet.resourceType : configured (aperiodic / semi-persistent / periodic)
-
Number of SRS ResourceSet =
up to two -
Each ResourceSet has
two SRS Resources transmitting at different symbols -
Each SRS Resource in a ResourceSet consists of
two SRS ports and the SRS port pair of the second resource in the set is associated with a different UE antenna port pair than the SRS port of the first resource in the same - SRS-ResourceSet.resourceType : configured (aperiodic / semi-persistent / periodic)
-
Number of SRS ResourceSet =
zero or one -
Each ResourceSet has
four SRS Resources transmitting at different symbols -
Each SRS Resource in a ResourceSet consists of
single SRS ports and the SRS port of each resource is associated with a different UE antenna port - SRS-ResourceSet.resourceType : configured (periodic / semi-persistent)
- Number of SRS ResourceSet =
zero or two - Each ResourceSet has
four SRS Resources transmitting at different symbols of two different slot - SRS port of each SRS resource in given two sets is associated with a different UE antenna port
- The two sets are each configured with two SRS resources, or one set is configured with one SRS resource and the other set is configured with three SRS resources.
- SRS-ResourceSet.resourceType : configured (aperiodic)
-
Number of SRS ResourceSet =
upto two - number of SRS ports for each resource is equal to 1, 2, or 4.
Does this description make clear sense to you ? I think I have read this part in 38.214 almost 10 times, but still not clear to me. It is extremly difficult to read those short section of the specification without falling asleep :). Then I gave up reading 38.214 and start trying to find TDocs with some picture and tables. With following tables and pictures from TDocs, finally the description on 38.214 start making sense.
Followings are the figure from R1-1800116
< Illustration of 1T4R antenna switching for aperiodic SRS >

Examples : Antenna Switching
Examples in this section are the tables from R1-1800090 or other personal contributers. Here the terminology may sounda little confiusing. Let me try (at least try :) to clarify it.
- xTyR : x indicates the Number of Tx port and y indicates the number of Rx port. The Tx and Rx are from the point of UE. So Tx mean Uplink and Rx mean Downlink.
- UE antenna port : This indicates UE's Rx antenna port
- SRS port : This indicates the srs port. Each of srs port is mapped to separate resource grid.
- Number of SRS port is determined by the number of UL antenna.
NOTE : If you want to see the contents of full log for antenna switching with Amarisoft Log viewer, go to LogAnalysis section and click on 'Sample Log' in this tutorial of Amarisoft TechAcademy.
Example 01 > 1T2R
Typical example of this case is DL 2x2 MIMO (2R UE's from point of view) and UL SISO(1T UE's from point of view). One transmit chain has to cover two receive antennas, so the sounding needs two SRS symbols with a switch between them.
< Association between SRS ports and UE antenna ports for 1T2R >
|
SRS Ports |
UE Antenna Ports |
|
SRS port 0 of the first SRS resource |
UE antenna port 0 |
|
SRS port 0 of the second SRS resource |
UE antenna port 1 |

Example 02 > 2T4R
Typical example of this case is DL 4x4 MIMO (4R UE's from point of view) and UL 2x2 MIMO(2T UE's from point of view). Two transmit chains cover four antennas here, so each chain takes two of them and two SRS symbols are still enough.
< Association between SRS ports and UE antenna ports for 2T4R >
|
SRS Ports |
UE Antenna Ports |
|
SRS port 0 of the first SRS resource |
UE antenna port 0 |
|
SRS port 1 of the first SRS resource |
UE antenna port 1 |
|
SRS port 0 of the second SRS resource |
UE antenna port 2 |
|
SRS port 1 of the second SRS resource |
UE antenna port 3 |

Example 03 > 1T4R
Typical example of this case is DL 4x4 MIMO (4R UE's from point of view) and UL SISO(1T UE's from point of view). One transmit chain has to cover four antennas this time, so four SRS symbols are needed and they no longer fit inside a single slot.
< Association between SRS ports and UE antenna ports for 1T4R >
|
SRS Ports |
UE Antenna Ports |
|
SRS port 0 of the first SRS resource |
UE antenna port 0 |
|
SRS port 0 of the second SRS resource |
UE antenna port 1 |
|
SRS port 0 of the third SRS resource |
UE antenna port 2 |
|
SRS port 0 of the fourth SRS resource |
UE antenna port 3 |

Example 04 > 1T4R
This example is shared by Sean. He is an ardent reader of sharetechnote and an experts on many subjects related to real deployment. He has been giving me a lot of insight on many topics and this example is one of them.
Following diagram shows SRS resource allocation at slot level. This would give you an idea on how SRS can be allocated with TDD UL-DL configuration. Of course, this is not the only possible way, you can come up with various other configuration depending on UE capability, Network capability/requirement.
In this example, you would notice that SRS is allocated in Flexible slot and the overall repetition cycle is 40 ms.

Following diagram shows the Antenna selection status for each slot where SRS is transmitted.


RRC Parameters
Everything the earlier sections describe arrives in the IEs below, and they nest from the outside in. BWP-UplinkDedicated is where an SRS configuration hangs off an uplink BWP. SRS-Config holds the resource sets and the resources. SRS-Resource is where the bandwidth and hopping fields that the worked examples use are finally defined.
Following is based on
BWP-UplinkDedicated ::= SEQUENCE {
pucch-Config SetupRelease { PUCCH-Config } OPTIONAL, -- Need M
pusch-Config SetupRelease { PUSCH-Config } OPTIONAL, -- Need M
configuredGrantConfig SetupRelease { ConfiguredGrantConfig } OPTIONAL, -- Need M
srs-Config SetupRelease { SRS-Config } OPTIONAL, -- Need M
beamFailureRecoveryConfig SetupRelease { BeamFailureRecoveryConfig } OPTIONAL, -- Cond SpCellOnly
...,
[[
sl-PUCCH-Config-r16 SetupRelease { PUCCH-Config } OPTIONAL, -- Need M
cp-ExtensionC2-r16 INTEGER (1..28) OPTIONAL, -- Need R
cp-ExtensionC3-r16 INTEGER (1..28) OPTIONAL, -- Need R
useInterlacePUCCH-PUSCH-r16 ENUMERATED {enabled} OPTIONAL, -- Need R
pucch-ConfigurationList-r16 SetupRelease { PUCCH-ConfigurationList-r16 } OPTIONAL, -- Need M
lbt-FailureRecoveryConfig-r16 SetupRelease { LBT-FailureRecoveryConfig-r16 } OPTIONAL, -- Need M
configuredGrantConfigToAddModList-r16 ConfiguredGrantConfigToAddModList-r16 OPTIONAL, -- Need N
configuredGrantConfigToReleaseList-r16 ConfiguredGrantConfigToReleaseList-r16 OPTIONAL, -- Need N
configuredGrantConfigType2DeactivationStateList-r16 ConfiguredGrantConfigType2DeactivationStateList-r16 OPTIONAL -- Need R
]],
[[
ul-TCI-StateList-r17 CHOICE {
explicitlist SEQUENCE {
ul-TCI-ToAddModList-r17 SEQUENCE (SIZE (1..maxUL-TCI-r17)) OF TCI-UL-State-r17 OPTIONAL, -- Need N
ul-TCI-ToReleaseList-r17 SEQUENCE (SIZE (1..maxUL-TCI-r17)) OF TCI-UL-StateId-r17 OPTIONAL -- Need N
},
unifiedTCI-StateRef-r17 ServingCellAndBWP-Id-r17
} OPTIONAL, -- Need R
ul-powerControl-r17 Uplink-powerControlId-r17 OPTIONAL, -- Cond NoTCI-PC
pucch-ConfigurationListMulticast1-r17 SetupRelease { PUCCH-ConfigurationList-r16 } OPTIONAL, -- Need M
pucch-ConfigurationListMulticast2-r17 SetupRelease { PUCCH-ConfigurationList-r16 } OPTIONAL -- Need M
]],
[[
pucch-ConfigMulticast1-r17 SetupRelease { PUCCH-Config } OPTIONAL, -- Need M
pucch-ConfigMulticast2-r17 SetupRelease { PUCCH-Config } OPTIONAL -- Need M
]],
[[
pathlossReferenceRSToAddModList-r17 SEQUENCE (SIZE (1..maxNrofPathlossReferenceRSs-r17)) OF PathlossReferenceRS-r17
OPTIONAL, -- Need N
pathlossReferenceRSToReleaseList-r17 SEQUENCE (SIZE (1..maxNrofPathlossReferenceRSs-r17)) OF PathlossReferenceRS-Id-r17
OPTIONAL -- Need N
]],
[[
sbfd-Config2-Transmission-r19 ENUMERATED {enabled} OPTIONAL, -- Need S
sbfd-Config2-PUSCH-RB-Offset-r19 INTEGER(0..maxNrofPhysicalResourceBlocks-1) OPTIONAL, -- Need R
ul-Muting-NonSBFD-Symbol-r19 ENUMERATED {enabled} OPTIONAL, -- Need S
twoTA-Without-MultiDCI-MultiTRP-r19 ENUMERATED {enabled} OPTIONAL -- Need R
]]
}
SRS-Config hangs off the uplink BWP through srs-Config above, so an SRS configuration belongs to one bandwidth part rather than to the cell. The IEs below are what that SetupRelease actually carries.
Following is based on
SRS-Config ::= SEQUENCE { srs-ResourceSetToReleaseList SEQUENCE (SIZE(1..maxNrofSRS-ResourceSets)) OF SRS-ResourceSetId OPTIONAL, -- Need N srs-ResourceSetToAddModList SEQUENCE (SIZE(1..maxNrofSRS-ResourceSets)) OF SRS-ResourceSet OPTIONAL, -- Need N srs-ResourceToReleaseList SEQUENCE (SIZE(1..maxNrofSRS-Resources)) OF SRS-ResourceId OPTIONAL, -- Need N srs-ResourceToAddModList SEQUENCE (SIZE(1..maxNrofSRS-Resources)) OF SRS-Resource OPTIONAL, -- Need N tpc-Accumulation ENUMERATED {disabled} OPTIONAL, -- Need S ..., [[ srs-RequestDCI-1-2-r16 INTEGER (1..2) OPTIONAL, -- Need S srs-RequestDCI-0-2-r16 INTEGER (1..2) OPTIONAL, -- Need S srs-ResourceSetToAddModListDCI-0-2-r16 SEQUENCE (SIZE(1..maxNrofSRS-ResourceSets)) OF SRS-ResourceSet OPTIONAL, -- Need N srs-ResourceSetToReleaseListDCI-0-2-r16 SEQUENCE (SIZE(1..maxNrofSRS-ResourceSets)) OF SRS-ResourceSetId OPTIONAL, -- Need N srs-PosResourceSetToReleaseList-r16 SEQUENCE (SIZE(1..maxNrofSRS-PosResourceSets-r16)) OF SRS-PosResourceSetId-r16 OPTIONAL, -- Need N srs-PosResourceSetToAddModList-r16 SEQUENCE (SIZE(1..maxNrofSRS-PosResourceSets-r16)) OF SRS-PosResourceSet-r16 OPTIONAL,-- Need N srs-PosResourceToReleaseList-r16 SEQUENCE (SIZE(1..maxNrofSRS-PosResources-r16)) OF SRS-PosResourceId-r16 OPTIONAL,-- Need N srs-PosResourceToAddModList-r16 SEQUENCE (SIZE(1..maxNrofSRS-PosResources-r16)) OF SRS-PosResource-r16 OPTIONAL -- Need N ]], [[ dci-TriggeringPosResourceSetLink-r18 ENUMERATED { enabled } OPTIONAL -- Need R ]], [[ srs-TwoSeparatePowerControlAdjustmentStates-r19 ENUMERATED {enabled} OPTIONAL, -- Need R tpc-OfSRS-ClosedLoopIndexInDCI-1-1-r19 ENUMERATED {enabled} OPTIONAL, -- Need R srs-ClosedLoopIndexIndicatorInDCI-1-1-r19 ENUMERATED {enabled} OPTIONAL -- Need R ]] } SRS-ResourceSet ::= SEQUENCE { srs-ResourceSetId SRS-ResourceSetId, srs-ResourceIdList SEQUENCE (SIZE(1..maxNrofSRS-ResourcesPerSet)) OF SRS-ResourceId OPTIONAL, -- Cond Setup resourceType CHOICE { aperiodic SEQUENCE { aperiodicSRS-ResourceTrigger INTEGER (1..maxNrofSRS-TriggerStates-1), csi-RS NZP-CSI-RS-ResourceId OPTIONAL, -- Cond NonCodebook slotOffset INTEGER (1..32) OPTIONAL, -- Need S ..., [[ aperiodicSRS-ResourceTriggerList SEQUENCE (SIZE(1..maxNrofSRS-TriggerStates-2)) OF INTEGER (1..maxNrofSRS-TriggerStates-1) OPTIONAL -- Need M ]] }, semi-persistent SEQUENCE { associatedCSI-RS NZP-CSI-RS-ResourceId OPTIONAL, -- Cond NonCodebook ... }, periodic SEQUENCE { associatedCSI-RS NZP-CSI-RS-ResourceId OPTIONAL, -- Cond NonCodebook ... } }, usage ENUMERATED {beamManagement, codebook, nonCodebook, antennaSwitching}, alpha Alpha OPTIONAL, -- Need S p0 INTEGER (-202..24) OPTIONAL, -- Cond Setup pathlossReferenceRS PathlossReferenceRS-Config OPTIONAL, -- Need M srs-PowerControlAdjustmentStates ENUMERATED { sameAsFci2, separateClosedLoop} OPTIONAL, -- Need S ..., [[ pathlossReferenceRSList-r16 SetupRelease { PathlossReferenceRSList-r16} OPTIONAL -- Need M ]], [[ usagePDC-r17 ENUMERATED {true} OPTIONAL, -- Need R availableSlotOffsetList-r17 SEQUENCE (SIZE(1..4)) OF AvailableSlotOffset-r17 OPTIONAL, -- Need R followUnifiedTCI-StateSRS-r17 ENUMERATED {enabled} OPTIONAL -- Need R ]], [[ applyIndicatedTCI-State-r18 ENUMERATED {first, second} OPTIONAL -- Cond FollowUTCI ]], [[ symbolType-r19 ENUMERATED {sbfd, non-sbfd} OPTIONAL, -- Need R associatedCSI-RS-Set-r19 NZP-CSI-RS-ResourceSetId OPTIONAL, -- Need R srs-PortGrouping-r19 ENUMERATED {enabled} OPTIONAL, -- Need R fourPortSRS-3Tx-r19 ENUMERATED {enabled} OPTIONAL -- Need R ]] } SRS-ResourceSetId ::= INTEGER (0..maxNrofSRS-ResourceSets-1) SRS-Resource ::= SEQUENCE { srs-ResourceId SRS-ResourceId, nrofSRS-Ports ENUMERATED {port1, ports2, ports4}, ptrs-PortIndex ENUMERATED {n0, n1 } OPTIONAL, -- Need R transmissionComb CHOICE { n2 SEQUENCE { combOffset-n2 INTEGER (0..1), cyclicShift-n2 INTEGER (0..7) }, n4 SEQUENCE { combOffset-n4 INTEGER (0..3), cyclicShift-n4 INTEGER (0..11) } }, resourceMapping SEQUENCE { startPosition INTEGER (0..5), nrofSymbols ENUMERATED {n1, n2, n4}, repetitionFactor ENUMERATED {n1, n2, n4} }, freqDomainPosition INTEGER (0..67), freqDomainShift INTEGER (0..268), freqHopping SEQUENCE { c-SRS INTEGER (0..63), b-SRS INTEGER (0..3), b-hop INTEGER (0..3) }, groupOrSequenceHopping ENUMERATED { neither, groupHopping, sequenceHopping }, resourceType CHOICE { aperiodic SEQUENCE { ... }, semi-persistent SEQUENCE { periodicityAndOffset-sp SRS-PeriodicityAndOffset, ... }, periodic SEQUENCE { periodicityAndOffset-p SRS-PeriodicityAndOffset, ... } }, sequenceId INTEGER (0..1023), spatialRelationInfo SRS-SpatialRelationInfo OPTIONAL, -- Need R ..., [[ resourceMapping-r16 SEQUENCE { startPosition-r16 INTEGER (0..13), nrofSymbols-r16 ENUMERATED {n1, n2, n4}, repetitionFactor-r16 ENUMERATED {n1, n2, n4} } OPTIONAL -- Need R ]], [[ spatialRelationInfo-PDC-r17 SetupRelease { SpatialRelationInfo-PDC-r17 } OPTIONAL, -- Need M resourceMapping-r17 SEQUENCE { startPosition-r17 INTEGER (0..13), nrofSymbols-r17 ENUMERATED {n1, n2, n4, n8, n10, n12, n14}, repetitionFactor-r17 ENUMERATED {n1, n2, n4, n5, n6, n7, n8, n10, n12, n14} } OPTIONAL, -- Need R partialFreqSounding-r17 SEQUENCE { startRBIndexFScaling-r17 CHOICE{ startRBIndexAndFreqScalingFactor2-r17 INTEGER (0..1), startRBIndexAndFreqScalingFactor4-r17 INTEGER (0..3) }, enableStartRBHopping-r17 ENUMERATED {enable} OPTIONAL -- Need R } OPTIONAL, -- Need R transmissionComb-n8-r17 SEQUENCE { combOffset-n8-r17 INTEGER (0..7), cyclicShift-n8-r17 INTEGER (0..5) } OPTIONAL, -- Need R srs-TCI-State-r17 CHOICE { srs-UL-TCI-State TCI-UL-StateId-r17, srs-DLorJointTCI-State TCI-StateId } OPTIONAL -- Need R ]], [[ repetitionFactor-v1730 ENUMERATED {n3} OPTIONAL, -- Need R srs-DLorJointTCI-State-v1730 SEQUENCE { cellAndBWP-r17 ServingCellAndBWP-Id-r17 } OPTIONAL -- Cond DLorJointTCI-SRS ]], [[ nrofSRS-Ports-n8-r18 ENUMERATED {ports8, ports8tdm} OPTIONAL, -- Need R combOffsetHopping-r18 SEQUENCE { hoppingId-r18 INTEGER (0..1023) OPTIONAL, -- Need R hoppingSubset-r18 CHOICE { transmissionComb-n4 BIT STRING (SIZE (4)), transmissionComb-n8 BIT STRING (SIZE (8)) } OPTIONAL, -- Need R hoppingWithRepetition-r18 ENUMERATED {symbol, repetition} OPTIONAL -- Need R } OPTIONAL, -- Need R cyclicShiftHopping-r18 SEQUENCE { hoppingId-r18 INTEGER (0..1023) OPTIONAL, -- Need R hoppingSubset-r18 CHOICE { transmissionComb-n2 BIT STRING (SIZE (8)), transmissionComb-n4 BIT STRING (SIZE (12)), transmissionComb-n8 BIT STRING (SIZE (6)) } OPTIONAL, -- Need R hoppingFinerGranularity-r18 ENUMERATED {enable} OPTIONAL -- Need R } OPTIONAL -- Need R ]] } SRS-PosResource-r16::= SEQUENCE { srs-PosResourceId-r16 SRS-PosResourceId-r16, transmissionComb-r16 CHOICE { n2-r16 SEQUENCE { combOffset-n2-r16 INTEGER (0..1), cyclicShift-n2-r16 INTEGER (0..7) }, n4-r16 SEQUENCE { combOffset-n4-r16 INTEGER (0..3), cyclicShift-n4-r16 INTEGER (0..11) }, n8-r16 SEQUENCE { combOffset-n8-r16 INTEGER (0..7), cyclicShift-n8-r16 INTEGER (0..5) }, ... }, resourceMapping-r16 SEQUENCE { startPosition-r16 INTEGER (0..13), nrofSymbols-r16 ENUMERATED {n1, n2, n4, n8, n12} }, freqDomainShift-r16 INTEGER (0..268), freqHopping-r16 SEQUENCE { c-SRS-r16 INTEGER (0..63), ... }, groupOrSequenceHopping-r16 ENUMERATED { neither, groupHopping, sequenceHopping }, resourceType-r16 CHOICE { aperiodic-r16 SEQUENCE { slotOffset-r16 INTEGER (1..32) OPTIONAL, -- Need S ... }, semi-persistent-r16 SEQUENCE { periodicityAndOffset-sp-r16 SRS-PeriodicityAndOffset-r16, ..., [[ periodicityAndOffset-sp-Ext-r16 SRS-PeriodicityAndOffsetExt-r16 OPTIONAL -- Need R ]], [[ srs-PosPeriodicConfigHyperSFN-Index-r18 ENUMERATED {even0, odd1} OPTIONAL --Need R ]] }, periodic-r16 SEQUENCE { periodicityAndOffset-p-r16 SRS-PeriodicityAndOffset-r16, ..., [[ periodicityAndOffset-p-Ext-r16 SRS-PeriodicityAndOffsetExt-r16 OPTIONAL -- Need R ]], [[ srs-PosPeriodicConfigHyperSFN-Index-r18 ENUMERATED {even0, odd1} OPTIONAL --Need R ]] } }, sequenceId-r16 INTEGER (0..65535), spatialRelationInfoPos-r16 SRS-SpatialRelationInfoPos-r16 OPTIONAL, -- Need R ..., [[ txHoppingConfig-r18 TxHoppingConfig-r18 OPTIONAL --Need R ]] } SRS-SpatialRelationInfo ::= SEQUENCE { servingCellId ServCellIndex OPTIONAL, -- Need S referenceSignal CHOICE { ssb-Index SSB-Index, csi-RS-Index NZP-CSI-RS-ResourceId, srs SEQUENCE { resourceId SRS-ResourceId, uplinkBWP BWP-Id } } } SRS-ResourceId ::= INTEGER (0..maxNrofSRS-Resources-1) SRS-PeriodicityAndOffset ::= CHOICE { sl1 NULL, sl2 INTEGER(0..1), sl4 INTEGER(0..3), sl5 INTEGER(0..4), sl8 INTEGER(0..7), sl10 INTEGER(0..9), sl16 INTEGER(0..15), sl20 INTEGER(0..19), sl32 INTEGER(0..31), sl40 INTEGER(0..39), sl64 INTEGER(0..63), sl80 INTEGER(0..79), sl160 INTEGER(0..159), sl320 INTEGER(0..319), sl640 INTEGER(0..639), sl1280 INTEGER(0..1279), sl2560 INTEGER(0..2559) } SRS-PeriodicityAndOffset-r16 ::= CHOICE { sl1 NULL, sl2 INTEGER(0..1), sl4 INTEGER(0..3), sl5 INTEGER(0..4), sl8 INTEGER(0..7), sl10 INTEGER(0..9), sl16 INTEGER(0..15), sl20 INTEGER(0..19), sl32 INTEGER(0..31), sl40 INTEGER(0..39), sl64 INTEGER(0..63), sl80 INTEGER(0..79), sl160 INTEGER(0..159), sl320 INTEGER(0..319), sl640 INTEGER(0..639), sl1280 INTEGER(0..1279), sl2560 INTEGER(0..2559), sl5120 INTEGER(0..5119), sl10240 INTEGER(0..10239), sl40960 INTEGER(0..40959), sl81920 INTEGER(0..81919), ... } ... -- the SRS-Pos* variants of these IEs configure positioning SRS, which is a -- different topic, and the auxiliary types they reference are not shown here
}
Examples : Periodic SRS
NOTE : If you want to see the contents of full log with Amarisoft Log viewer, go to LogAnalysis section and click on 'Sample Log' in this tutorial of Amarisoft TechAcademy.
Example 01 > Periodic 80 ms, c-SRS 11, b-SRS 3, b-hop 0
This is an example of Periodic SRS captured by Amari Callbox and commercial UE. The three numbers in the heading are the ones to follow through the log. The first, c-SRS 11, picks a row of 38.211 Table 6.4.1.4.3-1. The second, b-SRS 3, picks a column within that row, and the pair resolves to a sounding bandwidth of 4 resource blocks. The third is b-hop, the hopping parameter, and the figures below trace all three through the table.
SIB 1 :
Decoded RRC,
servingCellConfigCommon {
downlinkConfigCommon {
frequencyInfoDL {
frequencyBandList {
{
freqBandIndicatorNR 78
}
},
offsetToPointA 24,
scs-SpecificCarrierList {
{
offsetToCarrier 0,
subcarrierSpacing kHz30,
carrierBandwidth 51
}
}
},
RrcSetup :
Decoded RRC,
srs-Config setup: {
srs-ResourceSetToAddModList {
{
srs-ResourceSetId 0,
srs-ResourceIdList {
0
},
resourceType periodic: {
},
usage codebook,
p0 -76,
pathlossReferenceRS ssb-Index: 0
}
},
srs-ResourceToAddModList {
{
srs-ResourceId 0,
nrofSRS-Ports port1,
transmissionComb n2: {
combOffset-n2 0,
cyclicShift-n2 4
},
resourceMapping {
startPosition 0,
nrofSymbols n1,
repetitionFactor n1
},
freqDomainPosition 0,
freqDomainShift 5,
freqHopping {
c-SRS 11,
b-SRS 3,
b-hop 0
},
groupOrSequenceHopping neither,
resourceType periodic: {
periodicityAndOffset-p sl80: 7
},
sequenceId 500
}
}
}
According to the Rrc Configuration shown above, following bandwidth configuration is used. This indicates that one SRS will transmit the reference signal in 4 consecutive PRBs.

Following is the result of SRS received and measured by Amari Callbox. You would notice that each SRS transmit the signal across 4 consecutive PRB, each SRS is transmitted with 4 radio frames (40 ms, 800 slots). It takes 80 radio frames (40 ms, 800 slots) to transmit SRS across the whole bandwidth. The pattern in red box (40 radio frames) repeats


Example 02 > Periodic 80 ms, c-SRS 13, b-SRS 1, b-hop 0
This is an example of Periodic SRS captured by Amari Callbox and commercial UE. It is worth reading next to the one above, because only the table lookup differs. The pair c-SRS 13 and b-SRS 1 lands on a different cell of the same table, and the sounding bandwidth that comes out is 24 resource blocks rather than 4.
SIB 1 :
Decoded RRC,
servingCellConfigCommon {
downlinkConfigCommon {
frequencyInfoDL {
frequencyBandList {
{
freqBandIndicatorNR 78
}
},
offsetToPointA 24,
scs-SpecificCarrierList {
{
offsetToCarrier 0,
subcarrierSpacing kHz30,
carrierBandwidth 51
}
}
},
RrcSetup :
Decoded RRC,
srs-Config setup: {
srs-ResourceSetToAddModList {
{
srs-ResourceSetId 0,
srs-ResourceIdList {
0
},
resourceType periodic : {
},
usage codebook,
p0 -76,
pathlossReferenceRS ssb-Index: 0
}
},
srs-ResourceToAddModList {
{
srs-ResourceId 0,
nrofSRS-Ports port1,
transmissionComb n2: {
combOffset-n2 0,
cyclicShift-n2 4
},
resourceMapping {
startPosition 0,
nrofSymbols n1,
repetitionFactor n1
},
freqDomainPosition 0,
freqDomainShift 5,
freqHopping {
c-SRS 13,
b-SRS 1,
b-hop 0
},
groupOrSequenceHopping neither,
resourceType periodic: {
periodicityAndOffset-p sl80: 7
},
sequenceId 500
}
}
}
According to the Rrc Configuration shown above, following bandwidth configuration is used. This indicates that one SRS will transmit the reference signal in 24 consecutive PRBs.

Following is the result of SRS received and measured by Amari Callbox. You would notice that each SRS transmit the signal across 24 consecutive PRB. It takes 4 radio frames (40 ms, 80 slots) to transmit SRS across the whole bandwidth. The pattern in red box (4 radio frames) repeats

Reference
[1] 3GPP TSG RAN WG1 Ad Hoc-1801 Meeting : R1-1801085 - Summary of SRS
[2] 3GPP TSG RAN WG1 Ad Hoc Meeting : R1-1800090 - Summary of remaining details of SRS design
[3] 3GPP TSG RAN WG1 Meeting AH 1801 : R1-1800370 - Clarification on intra-slot hopping for aperiodic SRS
[4] 3GPP TSG RAN WG1 Meeting AH 1801 : R1-1800439 - Issues on SRS
[5] 3GPP TSG RAN WG1 Meeting AH 1801 : R1-1800116 - Remaining details on SRS



