Reference Signals
CSI-RS
The module csirs.py implements the Channel State Information Reference Signals (CSI-RS) based on 3GPP TS 38.211
and 3GPP TS 38.214. CSI-RS is implemented in NeoRadium in the following three classes:
CsiRs: Implements one CSI-RS resource which can be used for both Zero-Power (ZP) and Non-Zero-Power (NZP) resources.
CsiRsSet: Implements a CSI-RS resource set which contains one or more CSI-RS resources.
CsiRsConfig: Implements the overall CSI-RS configuration information. It contains one or more CSI-RS resource sets.
NeoRadium’s API implementation provides both flexibility and simplicity. Here are a couple of different ways to configure CSI-RS.
Flexible configuration: This method provides the most flexibility for configuration. Different numbers and types of CSI-RS resources can be configured in different numbers and types of CSI-RS resource sets. For example, the following code configures two CSI-RS resource sets, one ZP and one NZP, with one and two CSI-RS resources, respectively. Each CSI-RS resource is configured individually with different settings.
from neoradium import Carrier, CsiRsConfig, CsiRsSet, CsiRs
# Create the carrier and bandwidth part objects
carrier = Carrier(startRb=0, numRbs=24, spacing=15)
bwp = carrier.bwps[0]
# Create a ZP CSI-RS resource and add it to the ZP CSI-RS resource set
zpCsiRs = CsiRs(offset=1, symbols=[1], numPorts=1, freqMap="000000001000", density=0.5)
zpCsiRsSet = CsiRsSet("ZP", bwp, csiRsList=[zpCsiRs], resourceType='semiPersistent', period=10)
# Create two NZP CSI-RS resources and add them to the NZP CSI-RS resource set
nzpCsiRs1 = CsiRs(offset=0, symbols=[1], numPorts=1, freqMap="1000", density=3)
nzpCsiRs2 = CsiRs(offset=3, symbols=[3], numPorts=1, freqMap="000000001000", density=1)
nzpCsiRsSet = CsiRsSet("NZP", bwp, csiRsList=[nzpCsiRs1, nzpCsiRs2], resourceType='periodic', period=5)
# Now create the CSI-RS configuration using the ZP and NZP resource sets
csiRsConfig = CsiRsConfig([zpCsiRsSet, nzpCsiRsSet])
Easy configuration: You can quickly create a typical CSI-RS configuration without dealing with the complexity of various CSI-RS configuration parameters. For example, the following code configures CSI-RS with one NZP and one ZP resource.
from neoradium import Carrier, CsiRsConfig
# Create the carrier and bandwidth part objects
carrier = Carrier(startRb=0, numRbs=24, spacing=15)
bwp = carrier.bwps[0]
# Create the CSI-RS configuration with a single call. The CSI-RS resource and
# resource set are automatically configured using the parameters provided.
csiRsConfig = CsiRsConfig(csiType="NZP", bwp=bwp, symbols=[1], numPorts=1, density=3)
For beam management experiments, you may use the CsiRsConfig.beamformingConfig() class method to create a
set of CSI-RS resources for beam sweeping, beam probing, and CSI-feedback (PMI/RI/CQI).
For more examples, see Exploring CSI-RS Configurations
- class neoradium.csirs.CsiRs(**kwargs)
This class implements a CSI-RS resource which can be used to represent a Zero-Power (ZP - see 3GPP TS 38.214 Section 5.1.4.2) or Non-Zero-Power (NZP - see 3GPP TS 38.214 Section 5.2.2.3.1) resource.
- Parameters:
kwargs (dict) –
A set of optional arguments.
- resourceId:
The resource identifier of this CSI-RS resource. This is set to zero by default. This represents the values
zp-CSI-RS-ResourceIdornzp-CSI-RS-ResourceIdin 3GPP TS 38.214 for ZP and NZP resource types, respectively.- offset:
The slot offset for this CSI-RS resource. It is set to zero by default. This is the value \(T_{offset}\) in 3GPP TS 38.211 section 7.4.1.5.3. It is used only if the
resourceTypeparameter ofCsiRsSetclass containing this CSI-RS resource is set to'periodic'or'semiPersistent'. See Time-Domain Configuration below for more information.- numPorts:
The number of antenna ports used by this CSI-RS resource. It can be one of 1, 2, 4, 8, 12, 16, 24, or 32. This is the value \(X\) in 3GPP TS 38.211 Table 7.4.1.5.3-1.
- cdmSize:
The CDM size of this CSI-RS resource. It can be one of 1, 2, 4, or 8, corresponding to
noCDM,fd-CDM2,cdm4-FD2-TD2, andcdm8-FD2-TD4in 3GPP TS 38.211 Table 7.4.1.5.3-1.- density:
The frequency density of the CSI-RS resource. It can be one of 0.5, 1, or 3. The value 3 is only available if
numPortsis set to 1. This is the value \(\rho\) in 3GPP TS 38.211 Table 7.4.1.5.3-1.- freqMap:
A bitmap string that specifies the frequency-domain locations of this CSI-RS resource. See 3GPP TS 38.211 Section 7.4.1.5.3 for more information. This value determines which resource elements in each resource block are used by this CSI-RS resource.
- symbols:
The list of time symbol indices in each slot that are used by this CSI-RS resource.
- powerDb:
The power (in dB) used by this CSI-RS resource for NZP resources. This is ignored for Zero-Power (ZP) resources. The default value is 0. This contains the value of \(\beta_{CSIRS}\) as specified in 3GPP TS 38.211 Section 7.4.1.5.3.
- scramblingID:
The scrambling identity used to generate pseudo-random sequences. The default is 0. This is ignored for ZP resources.
Other Properties:
All the parameters mentioned above except
freqMapandsymbolsare directly available. Here is a list of additional properties:- ls:
The time-domain symbol indices used by this CSI-RS resource. This is a list of integers that are extracted from the
symbolsparameter explained above. This list contains the \(l_0\) and \(l_1\) values in the 5th column of 3GPP TS 38.211 Table 7.4.1.5.3-1 (The column titled \((\bar k, \bar l)\)).- ks:
The frequency-domain RE indices used by this CSI-RS resource. This is a list of integers that are extracted from the
freqMapparameter explained above. This list contains the \(k_0\), \(k_1\), \(k_2\), and \(k_3\) values in the 5th column of 3GPP TS 38.211 Table 7.4.1.5.3-1 (the column titled \((\bar k, \bar l)\)).- row:
The row index of 3GPP TS 38.211 Table 7.4.1.5.3-1 corresponding to the configuration of this CSI-RS resource (the column titled “Row”). This class determines the row index using the parameters
numPorts,cdmSize,density, andfreqMap.- mySet:
The
CsiRsSetobject containing this CSI-RS resource.
Additionally, you can access the
CsiRsSetclass parametersperiod,bwp,csiType,resourceType,active,startRb, andnumRbsdirectly. The parametermySetis internally used to return these values from theCsiRsSetclass containing this CSI-RS resource.- print(indent=0, title=None, getStr=False)
Prints the properties of this CSI-RS resource.
- Parameters:
indent (int) – The number of indentation characters.
title (str or None) – If specified, it is used as the title for the printed information. If None (the default), the text “CSI-RS Properties:” is used for the title.
getStr (bool) – If True, this function returns a string instead of printing it.
- Returns:
If the
getStrparameter is True, then this function returns the information in a string. Otherwise, nothing is returned.- Return type:
None or str
- class neoradium.csirs.CsiRsSet(csiType, bwp, **kwargs)
This class implements a CSI-RS resource set which contains one or more CSI-RS resources (
CsiRsobjects). A CSI-RS resource set can be either Zero-Power (ZP) or Non-Zero-Power (NZP). All CSI-RS resources in a set are of the same type (ZP or NZP). By default, a CSI-RS resource set is configured with one CSI-RS resource. More CSI-RS resources can be added using theaddCsiRs()method.- Parameters:
csiType (str) – The type of this CSI-RS resource set. It must be either
'NZP'or'ZP'.bwp (
BandwidthPart) – The bandwidth part used by this CSI-RS resource set.kwargs (dict) –
A set of optional arguments.
- rsId:
The resource set identifier of this CSI-RS resource set. This is set to zero by default. This represents the values
nzp-CSI-ResourceSetIdorzp-CSI-RS-ResourceSetIdin 3GPP TS 38.214 for NZP and ZP resource sets, respectively.- startRb:
The index of starting resource block (RB) used by this CSI-RS resource set. By default this is set to
bwp.startRb. The resources specified bystartRbandnumRbsmust be inside the specified bandwidth partbwp.- numRbs:
The number of resource blocks used by this CSI-RS resource set starting at
startRb. By default this is set tobwp.numRbs. The resources specified bystartRbandnumPortsmust be inside the specified bandwidth partbwp.- resourceType:
The time-domain resource type of this CSI-RS resource set. It can be one of
'aperiodic','semiPersistent', or'periodic'(default). See Time-Domain Configuration below for more information.- period:
The period (in number of slots) of this CSI-RS resource set in the time domain. This is the value \(T_{CSI-RS}\) in 3GPP TS 38.211 section 7.4.1.5.3. By default, it is set to 4, which CSI-RS is transmitted every 4th slot (for example, slot numbers 0, 4, 8, …). The means
periodcan be 4, 5, 8, 10, 16, 20, 32, 40, 64, 80, 160, 320, or 640 slots. This parameter is ignored ifresourceTypeis set to'aperiodic'. See Time-Domain Configuration below for more information.- active:
This boolean flag is used to activate a
'semiPersistent'CSI-RS resource set. It is ignored ifresourceTypeis set to'periodic'. This is set to 0 by default. See Time-Domain Configuration below for more information.- csiRsList:
A list of
CsiRsobjects contained in this CSI-RS resource set. If not specified, this class creates a single CSI-RS resource and puts it in the list. MoreCsiRsobjects can be added using theaddCsiRs()method.
Other Properties:
All parameters mentioned above are directly available. Here is a list of additional properties:
- numPorts:
This read-only parameter returns the maximum number of ports of all CSI-RS resources in this CSI-RS resource set.
- isActive:
This read-only parameter returns True if this CSI-RS resource set is currently active.
Time-Domain Configuration:
In the time-Domain, CSI-RS can be configured for periodic, semi-persistent, or aperiodic transmission.
- Periodic:
In this case, the CSI-RS transmission occurs every Nth slot, where N ranges from 4 to 640. In this case, each CSI-RS resource is also configured with an
offsetvalue. Please note that while theperiodN is the same for all CSI-RS resources in a set, theoffsetcan be different for different CSI-RS resources in the set. That is whyperiodis a property of the CSI-RS resource set, whileoffsetis a property of a CSI-RS resource.
- Semi-persistent:
In this case, the periodicity and offset of the CSI-RS transmissions is configured similarly to the periodic case but the actual transmission can be disabled/enabled using the
activeflag defined above. Once activated, the CSI-RS transmission behavior is just like the periodic case until it is deactivated. All CSI-RS resources in the set are activated/deactivated together. (Theactiveflag is a property of the CSI-RS resource set)- Aperiodic:
In this case, there is no periodicity. The transmission of the CSI-RS can be triggered by calling the
trigger()function. Once triggered, this resource set remains active as long as we are in the current slot. In practice this is signaled in the DCI message. All CSI-RS resources in the set are triggered together.
Please refer to 3GPP TS 38.211 section 7.4.1.5.3 for more details. See also CSI-RS Timing Configurations.
- print(indent=0, title=None, getStr=False)
Prints the properties of this CSI-RS resource set.
- Parameters:
indent (int) – The number of indentation characters.
title (str or None) – If specified, it is used as the title for the printed information. If None (the default), the text “CSI-RS Resource Set Properties:” is used for the title.
getStr (bool) – If True, returns a string instead of printing it.
- Returns:
If the
getStrparameter is True, then this function returns the information in a string. Otherwise, nothing is returned.- Return type:
None or str
- trigger()
Triggers the current CSI-RS resource set. This activates the resource set for the current slot and it automatically becomes inactive when we move to the next slot.
- class neoradium.csirs.CsiRsConfig(csiRsSetList=[], **kwargs)
This class implements the overall CSI-RS configuration. It keeps a list of CSI-RS resource sets (
CsiRsSetobjects) each of which contains one or more CSI-RS resources (CsiRsobjects). By default, this class creates a single CSI-RS resource set. More CSI-RS resource sets can be added using theaddCsiResourceSets()method.- Parameters:
csiRsSetList (list) –
A list of
CsiRsSetobjects contained in this CSI-RS configuration. If this list is not specified, but aBandwidthPartobject is provided inkwargs, this class creates a single CSI-RS resource set containing a single CSI-RS resource. The parameters passed inkwargsare used to initialize the CSI-RS resource set and its only CSI-RS resource.If this list is not specified, and a
BandwidthPartobject is not given, then the list of CSI-RS resource sets remains empty and you must use theaddCsiResourceSets()to add CSI-RS resource sets.kwargs (dict) – A set of optional arguments. These parameters are passed to the
CsiRsSetandCsiRsobjects when they are first created.
Other Properties:
All the parameters mentioned above are directly available. Here is a list of additional properties:
- numPorts:
This read-only parameter returns the maximum number of ports in all CSI-RS resources in all CSI-RS resource sets.
- getById(setId, resourceId=None)
Returns the CSI-RS resource set or CSI-RS resource identified by the specified IDs.
- Parameters:
setId (int) – The CSI-RS resource set identifier.
resourceId (int or None, optional) – The CSI-RS resource identifier within the specified resource set. If omitted or
None, the CSI-RS resource set corresponding tosetIdis returned.
- Returns:
If
resourceIdisNone, returns theCsiRsSetwith the specifiedsetId. Otherwise, returns theCsiRsobject with the specifiedresourceIdwithin that resource set.If no matching resource set or resource is found,
Noneis returned.- Return type:
- print(indent=0, title=None, getStr=False)
Prints the properties of this CSI-RS configuration.
- Parameters:
indent (int) – The number of indentation characters.
title (str or None) – If specified, it is used as the title for the printed information. If None (the default), the text “CSI-RS Configuration:” is used for the title.
getStr (bool) – If True, returns a string instead of printing it.
- Returns:
If the
getStrparameter is True, then this function returns the information in a string. Otherwise, nothing is returned.- Return type:
None or str
- addCsiResourceSets(csiRsSetList)
Adds one or more CSI-RS resource sets to this CSI-RS configuration.
- Parameters:
csiRsSetList (list) – A list of
CsiRsSetobjects to be added to this CSI-RS configuration.
- addCsiRs(setIndex=0, csiRs=None, **kwargs)
Adds the CSI-RS resource given in
csiRsto the CSI-RS resource set specified bysetIndexin this CSI-RS configuration.- Parameters:
setIndex (int) – The index of the CSI-RS resource set in this CSI-RS configuration that receives the new CSI-RS resource.
csiRs (
CsiRs) – If specified, theCsiRsobject is added to the CSI-RS resource set specified bysetIndex. Otherwise, a new CSI-RS resource object is created based on the information inkwargsand then it is added to the CSI-RS resource set specified bysetIndex.kwargs (dict) –
These parameters are only used if this CSI-RS configuration is empty and/or if
csiRs=None.If this CSI-RS configuration is empty, the information in
kwargsis first used to create a CSI-RS resource set.If
csiRsis not specified, then the information inkwargsis first used to create a CSI-RS resource and added to the specified CSI-RS resource set.
- populateGrid(grid)
Uses the information in this CSI-RS configuration to calculate reference signal values and updates the
Gridobject specified bygrid.
- getResources()
Returns CSI-RS resource information organized by resource set. The returned object is a two-level dictionary. The first level maps CSI-RS resource set IDs to the CSI-RS resources belonging to that set. Each entry in the second level maps a CSI-RS resource ID to a tuple
(lIdx, kIdx, reValues)where:- lIdx:
array of OFDM symbol indices where the CSI-RS is transmitted
- kIdx:
array of subcarrier indices where the CSI-RS is transmitted
- reValues:
complex CSI-RS values corresponding to those RE locations
These indices refer to positions in the resource grid where the CSI-RS symbols should be placed.
Note
This function returns only the CSI-RS resources available for the current slot of the bandwidth part based on CSI-RS timing information (e.g., periodicity, offset, whether an aperiodic CSI-RS is triggered, or whether a semi-persistent CSI-RS is active)
- Returns:
A nested dictionary of the form:
{ rsSetId : { rsId : (lIdx, kIdx, reValues), ... }, ... }
containing CSI-RS resource information for all configured resource sets.
- Return type:
dict
- classmethod makeTypicalResources(bwp, numPorts, numSweep=8, numProb=4)
DEPRECATED: This method is deprecated and will be removed in future releases. Please use the
beamformingConfig()method instead.
- classmethod beamformingConfig(bwp, numPorts, numSweep=8, numProb=4, **kwargs)
Creates a typical CSI-RS configuration for beam management and CSI feedback.
The returned configuration contains three NZP CSI-RS resource sets:
A periodic set of single-port resources for beam sweeping.
An aperiodic set of single-port resources for beam probing.
A semi-persistent set containing one multi-port resource for RI/PMI/CQI measurement and reporting.
The sweeping resources are distributed across slots using their resource offsets. Up to
sweepsPerSlotresources are assigned to each slot. The probing resources are all assigned to the same slot because aperiodic CSI-RS resources do not use slot offsets. Sweeping and probing resources reuse the same time-frequency locations because they are expected not to be active simultaneously.Resource-set IDs 1, 2, and 3 are assigned to beam-sweeping, beam-probing, and RI/PMI/CQI resource sets. CSI-RS resource IDs are assigned consecutively, starting at 1. Sweeping resources are assigned first, followed by probing resources and then the multi-port RI/PMI/CQI resource.
Note that this is a simple static beam sweeping/probing. In practice, you can use adaptive beam sweeping, by including the previously selected probing beam in the next sweeping set and centering future sweeps around it. The beam sweeping in this case looks more like a wider beam probing around the current best beam (including a few wider beams to detect beam drift and prevent getting stuck in a local maximum).
- Parameters:
bwp (
BandwidthPart) – The bandwidth part in which the CSI-RS resources are configured.numPorts (int) – The number of antenna ports used by the RI/PMI/CQI CSI-RS resource. It must be a valid CSI-RS port count supported by
CsiRs, namely 1, 2, 4, 8, 12, 16, 24, or 32. The sweeping and probing resources always use one antenna port.numSweep (int) – The number of periodic single-port CSI-RS resources created for beam sweeping. The default is 8.
numProb (int) – The number of aperiodic single-port CSI-RS resources created for beam probing. It cannot be greater than 8. The default is 4.
kwargs (dict) –
A set of optional configuration arguments.
- sweepPeriod:
Beam-sweeping period in milliseconds. It is converted to the period used by the sweeping resource set according to the numerology of
bwp. The default is 20 ms.- sweepSymbol:
OFDM symbol index used by the beam-sweeping and beam-probing resources. The default is 4.
- pmiPeriod:
Period in milliseconds for the semi-persistent RI/PMI/CQI CSI-RS resource. It is converted to the period used by the resource set according to the numerology of
bwp. The default is 10 ms.- pmiSymbol:
OFDM symbol index used by the RI/PMI/CQI CSI-RS resource. The default is 5.
- sweepsPerSlot:
Maximum number of beam-sweeping resources assigned to each slot. It must be either 4 or 8. The default is 8.
- Returns:
A CSI-RS configuration containing the periodic sweeping, aperiodic probing, and semi-persistent RI/PMI/CQI resource sets.
- Return type:
Note
The aperiodic probing set and the semi-persistent RI/PMI/CQI set are inactive when created. They must be enabled using the triggering mechanism provided by
CsiRsSetbefore their resources become available.Please refer to the notebook CSI-RS Configuration for Beam Management for an example of using this function.
DM-RS and PT-RS
The module dmrs.py implements the DMRS and PTRS classes, which encapsulate the Demodulation
Reference Signals (DM-RS) and the Phase-Tracking Reference Signals (PT-RS) respectively.
Demodulation reference signals are intended for channel estimation on the receiver side and enable coherent
demodulation. They are used with all types of communication channels for both data and control, and both downlink and
uplink. This means a DMRS object can be associated with PDSCH,
PDCCH, PUSCH, or PUCCH classes.
PTRS is used for tracking the phase of the local oscillators at the receiver and transmitter. If
transmitted, a PT-RS is always associated with one or two DM-RS ports.
- class neoradium.dmrs.DMRS(pxsch, **kwargs)
This class encapsulates the configuration and functionality of Demodulation Reference Signals. A
DMRSobject can be associated with aPDSCH, aPDCCH, aPUSCH, or aPUCCH. (Currently onlyPDSCHis implemented in NeoRadium. Support for other channels is coming soon.)For every PDSCH, at least one OFDM symbol carrying DM-RS is required. It is also possible to have one, two, or three additional OFDM symbols assigned to DM-RS.
- Parameters:
pxsch (
PDSCH) – ThePDSCHobject associated with thisDMRSobject. Technically this can be any of thePDSCHorPUSCHclasses, but currently onlyPDSCHhas been implemented in NeoRadium.kwargs (dict) –
A set of optional arguments.
- configType:
The DM-RS configuration type. It can be either 1 (default) or 2. In Configuration type 1, the minimum resource element group in frequency domain is one RE. In Configuration type 2, the minimum resource element group in frequency domain is two consecutive REs.
- enhanced:
This boolean parameter indicates whether the enhanced DM-RS, as introduced in 3GPP release 18, should be used. This parameter is equivalent to the
enhanced-dmrs-Typeas explained in 3GPP TS 38.211, section 7.4.1.1.2. The default value is False.- symbols:
The number of OFDM symbols used with each group of DM-RS REs. It can be 1 (Single) or 2 (Double). The default is Single.
- typeA1stPos:
This is the OFDM symbol index for the first DM-RS symbol when Mapping type A is being used. It can be either 2 (default) or 3.
- additionalPos:
Position(s) for additional DM-RS symbols. For
symbols==1, it can be 0, 1, 2, or 3 and forsymbols==2it can be 0 or 1. This allows up to 4 OFDM symbols to be used for DM-RS.- numCdmGroupsWithoutData:
Specifies how many CDM groups in each RB are treated as reserved for DM-RS and therefore unavailable for payload data. It determines the extent of the DM-RS-associated “NO_DATA” region, in addition to the REs that carry the DM-RS symbols themselves. This value is used to match the DM-RS overhead and EPRE assumptions defined for PDSCH in 3GPP TS 38.214, Section 4.1, where the DM-RS-to-PDSCH power ratio depends on the number of CDM groups without data. If not explicitly provided, the implementation derives a default value from the number of active DM-RS ports and the configured DM-RS symbol length. See Demystifying numCdmGroupsWithoutData for examples of how to use this parameter.
- scID:
The number specifying which one of the
nIDs(see below) should be used for scrambling. It can be 0 (default) or 1.- nIDs:
A list of one or 2 integer values (
nIDs[scID] ∈ {0,1,...,65535}, scID ∈ {0,1}) The nIDs[0] and nIDs[1] are explained in 3GPP TS 38.211, Section 7.4.1.1.1 (scramblingID0, scramblingID1).- sameSeq:
A boolean value set to True by default. If True, the same binary sequence is created for all CDM groups. Otherwise, the sequences for different CDM groups are initialized differently. This is related to the parameter setting
dmrs-Downlinkin 3GPP TS 38.211, Section 7.4.1.1.1.sameSeq=Truemeansdmrs-Downlinkis not provided.- epreRatioDb:
The ratio of PXSCH energy per resource element (EPRE) to DM-RS EPRE in dB. If not specified, 3GPP TS 38.214, Table 4.1-1 is used to set this parameter.
Other Properties:
- cdmGroups:
A dictionary mapping each DM-RS port to its CDM group. This property is set based on the
portSetandconfigTypeparameters.- deltaShifts:
A dictionary mapping each DM-RS port to its frequency-domain delta shift.
- symSet:
A NumPy array containing the indices of the OFDM symbols used by this DM-RS.
- ptrs:
The
PTRSobject associated with this DMRS object or None if PT-RS is not configured.- ptrsEnabled:
A boolean read-only property. If True it means PT-RS is enabled, and therefore the
ptrsproperty above should not be None. Otherwise, PT-RS is disabled and theptrsproperty above should be set to None.
The notebook Exploring PDSCH DM-RS Configurations shows some examples of configuring DM-RS.
- print(indent=0, title='DMRS Properties:', getStr=False)
Prints the properties of this
DMRSobject.- Parameters:
indent (int) – The number of indentation characters.
title (str) – If specified, it is used as the title for the printed information.
getStr (bool) – If True, returns a string instead of printing it.
- Returns:
If the
getStrparameter is True, then this function returns the information in a string. Otherwise, nothing is returned.- Return type:
None or str
- setPTRS(**kwargs)
Creates a new
PTRSobject based on the parameters given inkwargsand associates it with thisDMRSobject. For more information, please refer to thePTRSdocumentation.
- populateGrid(grid)
Uses the information in this
DMRSto calculate demodulation reference signal values and update theGridobject specified bygrid.If PT-RS is enabled, it calls the
populateGrid()method of thePTRSclass to update the specifiedgridwith phase-tracking reference signals.
- class neoradium.dmrs.PTRS(dmrs, **kwargs)
This class encapsulates the functionality of Phase Tracking Reference Signals (PT-RS). A
PTRSobject can be associated with aPDSCHor aPUSCH. (Currently onlyPDSCHis implemented in NeoRadium. Support for other channels is coming soon.)The PT-RS is used to track the phase of the local oscillators at the receiver and transmitter. This enables suppression of phase noise and common phase error, particularly important at high carrier frequencies, such as millimeter-wave bands. Because of the properties of phase noise, PT-RS may have low density in the frequency domain but high density in the time domain. If transmitted, PT-RS is always associated with one or two DM-RS ports.
This implementation is mostly based on 3GPP TS 38.211, Section 7.4.1.2 and 3GPP TS 38.214, Section 5.1.6.3.
- Parameters:
kwargs (dict) –
A set of optional arguments.
- mcsi:
A list of 3 values for
ptrs-MCS1,ptrs-MCS2, andptrs-MCS3in 3GPP TS 38.214, Table 5.1.6.3-1 or None (default). This is used withiMCSandnRBito determine time and frequency density of the PT-RS signals. See Specifying Time and Frequency density below for more information.- iMCS:
The value from 3GPP TS 38.214 tables 5.1.3.1-1 to 5.1.3.1-4 or None (default). This is used with
mcsiandnRBito determine time and frequency density of the PT-RS signals. See Specifying Time and Frequency density below for more information.- nRBi:
A list of 2 values for
nRB0andnRB1in 3GPP TS 38.214, Table 5.1.6.3-2 or None (default). This is used withmcsiandiMCSto determine time and frequency density of the PT-RS signals. See Specifying Time and Frequency density below for more information.- timeDensity:
The time density of the PT-RS signals. It can be 1 (default), 2, or 4. This is ignored if parameters
mcsi,iMCS, andnRBiare all specified. See Specifying Time and Frequency density below for more information.- freqDensity:
The frequency density of the PT-RS signals. It can be 2 (default) or 4. This is ignored if parameters
mcsi,iMCS, andnRBiare all specified. See Specifying Time and Frequency density below for more information.- reOffset:
The resource element (RE) offset. It can be one of 0 (default), 1, 2, or 3. This is the
resourceElementOffsetvalue in 3GPP TS 38.211, Table 7.4.1.2.2-1.- portSet:
The set of antenna ports associated with this PT-RS. If not specified, the first port of the associated
DMRSis used.- epreRatio:
The
epre-Ratiovalue in 3GPP TS 38.214, Table 4.1-2. It is used to determine the ratio of PT-RS energy per resource element (EPRE) to PDSCH EPRE in dB. It can be 0 (default) or 1. See 3GPP TS 38.214, Table 4.1-2 for more information.
Specifying Time and Frequency density:
There are two ways to specify the time and frequency density of the PT-RS signals.
- Using MCS Info:
In this method, all of the values
mcsi,iMCS, andnRBimust be specified. The valuestimeDensityandfreqDensityare then derived from the provided MCS information based on 3GPP TS 38.214, Tables 5.1.6.3-1 and 5.1.6.3-2.- Direct Setting:
In this method, the values
timeDensityandfreqDensityare provided directly. In this case,mcsi,iMCS, andnRBimust all be set to None (default).
Other Properties:
- symSet:
A NumPy array containing the indices of the OFDM symbols used by this
PTRS.
The notebook Exploring PDSCH PT-RS Configurations shows some examples of configuring PTRS.
- print(indent=0, title='PTRS Properties:', getStr=False)
Prints the properties of this
PTRSobject.- Parameters:
indent (int) – The number of indentation characters.
title (str) – If specified, it is used as the title for the printed information.
getStr (bool) – If True, returns a string instead of printing it.
- Returns:
If the
getStrparameter is True, then this function returns the information in a string. Otherwise, nothing is returned.- Return type:
None or str
- populateGrid(grid)
Uses the information in this
PTRSobject to calculate the Phase Tracking Reference Signal values and update theGridobject specified bygrid.Normally you don’t need to call this function directly. Since every
PTRSobject is associated with aDMRSobject, this function is called automatically when thepopulateGrid()method of theDMRSclass is called.
References: