Calculating Frequency Offset - 2.0 English

RFSoC DFE PRACH LogiCORE IP Product Guide (PG391)

Document ID
Release Date
2.0 English

The following figure illustrates how the frequency offset value can be calculated when using the DFE PRACH core. It shows a 139 sample PRACH preamble which exists at a frequency start location of PRB 0.

Figure 1. PRACH Channel Frequency Offset

In the example, the CC SCS is 30 kHz and the PRACH SCS is 15 kHz. This means there are two PRACH subcarriers (REs) for every one CC subcarrier. The PRACH channel occupies 144 PRACH Resource Elements (REs) – two guard bins at the lower frequency, 139 preamble bins, and three guard bins at the upper frequency. Therefore, the PRACH channel occupies six PRBs, beginning at PRB 0.

To set the demodulation frequency in the core, the API needs to be told where the center of the PRACH channel. is. This value is specified in units of half PRACH REs.

There are two ways to set the frequency offset:

  • Specify the center frequency directly.
  • Specify the “start” frequency for the PRACH channel and allow the core to calculate the offset to the center.

Both methods can be applied in static scheduling by setting the frequency offset through the API. You can select the setting method at core initialization using the XDfePrach_Initialize function. The field XDfePrach_Init.EnableUseFreqOffset can be set to 0 (default) to select the center frequency based specification and set to 1 to select the other way.

In Dynamic Mode, the Dynamic Control Packet (DCP) has been updated from v1.1 and allows the packet to directly specify the NCO Phase Increment and the single and dual modulus fields. This allows the demodulation frequency to be set at any desired value.

The following examples illustrate the difference between the two methods:

Using Center Frequency

In Figure 1, the PRACH channel has a start frequency location of PRB 0 in a system with 106 PRBs. Relative to the center frequency, this start location is at -53 PRBs == -636 REs (CC) ==-1272 REs (PRACH). This figure gives the number of PRACH REs between the bottom of the PRACH channel and the center frequency.

The number of REs (PRACH) will depend upon the SCS setting in the CC and the PRACH. The ratio of these two will give the number of REs (PRACH) per PRB.

In order to find the center frequency, the number of REs (PRACH) from the bottom to the center must be added on. In the example given, the PRACH channel occupies 144 REs with two guard REs at the beginning, therefore 2+139/2=71.5 must be added onto the calculation.

This gives:

Frequency_offset = 2 * ((StartPRB -NRB/2) * NRB SC * (SCSCC/SCSPRACH) + Koffset + Ceiling(LRA/2))


  • StartPRB: the location of the PRACH channel within the CC resource map.
  • NRB: Number of resource blocks in the CC resource map.
  • NRB SC: Number of REs per RB, fixed at 12.
  • SCSCC: Subcarrier spacing of the CC.
  • SCSPRACH: Subcarrier spacing of the PRACH
  • LRA = PRACH sequence length (for example, 139)
  • Koffset = Frequency offset defined in 3GPP TS 38.211 (table

The scaling constant of “2” is to convert from REs (PRACH) to half-REs as required by the core.

Using the “start” Frequency for the PRACH Channel to Calculate the Offset

If the API is configured to calculate the offset from the bottom of the channel to the center, the calculation follows the same method as above, except there is no requirement to add Koffset + LRA/2. The API determines the preamble size for an RCID based on the PRACH SCS and the frame structure, and includes this value when programming the frequency offset. Thus, the calculation becomes:

Frequency_offset = 2 * (StartPRB -NRB/2) * NRB SC * (SCSCC/SCSPRACH)