Estimating OFDM Capacity in DOCSIS 3.1 / 4.0

A Simplified Approach

I am often asked how one estimates the data capacity on a OFDM (orthogonal frequency division multiplexing) channel in DOCSIS 3.1 networks. The question is easy, the answer is not. In this article I provide the background behind estimating OFDM data channel capacity, at least what I can do within the confines of a three-page article. I’ll also provide some practical calculations and a link to a Python script which will do the work for you. Please note that inspiration for this paper was taken from Karthik Sundaresan’s SCTE Cable-Tec Expo paper titled, Accurately Estimating D3.1 Channel Capacity [1]. Enjoy.

The core of OFDM in DOCSIS 3.1

(and now DOCSIS 4.0)

First, we need to start out by defining some key variables that determine how the OFDM channel has been configured. Each of the variables in bold in the following paragraphs will be used as part of the capacity calculation.

  • DSOccupiedSpectrum: Amount of RF spectrum occupied by the OFDM channel.
  • DSAvgModulationOrder: The downstream average modulation order for the OFDM channel. For this article, we use a fixed DSAvgModulationOrder of 4096-QAM, which translates to 12 bits (212 = 4096).
  • DSSubcarrierSpacing: The downstream subcarrier spacing is typically 50 kHz in DOCSIS 3.1 but can also be set to 25 kHz if supported by the CMTS.
  • DSGuardBand: The downstream guard band; and
  • DSExcludedBand: Downstream excluded band act as buffers, ensuring clear channel separation. These result in unoccupied RF spectrum and thus result in no subcarriers to transmit data.

Simplifying the calculations

Using the initial variables outlined previously as our input, we’re now ready to dive into the steps for calculating OFDM channel capacity. It’s important to note that our focus here is on computing the capacity for a single profile modulation and bandwidth. This approach, while specific, will equip you with the methodology to apply these calculations to other bandwidths and profile modulations. So, let’s jump right in!

STEP 1: HOW MANY SUBCARRIERS ARE IN USE?

To obtain the number of subcarriers that could be candidates for transmitting subscriber data, we simply take the total occupied spectrum (using DSOcuupiedSpectrum) and then subtract any unoccupied RF spectrum, such as DS_Guardband and DS_ExcludedBand, and finally divided by the subcarrier spacing. The formula would look like [eq 1] below:

DS_ModulatedSubcarriers = (DSOccupiedSpectrum – DS_GuardBand – DS_ExcludedBand) x 1000) / DSSubcarrierSpacing  [eq 1]

Let’s see how this plays out using real values. Say our occupied spectrum is 192 MHz, with a standard guard and excluded band of 2 MHz each, and a subcarrier spacing of 50 kHz. Our formula becomes:

DS_ModulatedSubcarriers = (192 – 2 – 2) x 1000) / 50 = 3760                         [eq 2]

This calculation results in 3,760 modulated subcarriers potentially available for transmitting subscriber data in the OFDM channel. However, it’s key to note that not all of these subcarriers are actively used for data traffic. Regarding the multiplication by 1000 in the formula’s numerator, this constant is used to simplify the conversion between MHz and kHz, ensuring the math is more straightforward and manageable.

STEP 2: DETERMINING THE EFFECTIVE SUBCARRIERS

In subcarrier land, not all are key players. Some handle tasks like error correction or synchronization, while others remain idle to prevent interference. For capacity calculations, we focus on “effective” subcarriers that carry data. Suppose we have 20 reserved subcarriers and 8 PLC (physical layer link channel) subcarriers, none transmitting data. We calculate our effective subcarriers by subtracting non-data subcarriers from our total count. Here is an example formula of how this is accomplished:

DS_EffectiveSubcarriers = DS_ModulatedSubcarriers (DS_ExcludedSubcarriers +DS_NumPLCSubcarriers× DS_NumFFTBlocks + DS_NumContPilots+ DS_NumScatteredPilots)                                 [eq 3]

Without getting too bogged down in pilot calculations, let’s say we end up with around 3500 effective subcarriers. As can be seen in [eq 3], this is really a straightforward calculation where we simply took the total available subcarriers and subtracted the ones that are not transmitting subscriber data. These include PLC, continuous pilots and scattered pilots, the details of which are outside the scope of this article.

STEP 3: CALCULATE TOTAL BITS PER SYMBOL

When we’re sizing up the muscle of an OFDM channel in a DOCSIS system, we’re ultimately interested in how much data we can send through per symbol. This is where the concept of total data bits comes in, serving as a core metric for the capacity of our communication system.

Calculating Total Data Bits

Assuming we have 3500 effective subcarriers, and each can carry 12 bits, the calculation for the total data bits per OFDM symbol becomes a simple multiplication:

Data Bits per OFDM Symbol = Effective Subcarriers × DSAvgModulationOrder  [eq 4]

Total Data Bits per OFDM Symbol = 3500×12                                                            [eq 5]

Total Data Bits per OFDM Symbol = 42000                                                                [eq 6]

This means that for every OFDM symbol we transmit, we’re sending out 42,000 bits of data. In practice, these 42,000 bits/symbol represent the raw capacity before considering protocol overhead and error correction. But we need actual capacity, not raw capacity.

The total data bits are also influenced by other factors like the cyclic prefix (CP), which is a repetition of the end of the OFDM symbol at the beginning to combat multipath interference. While this does not add to the total data, it’s vital for maintaining a robust communication link.

STEP 4: ESTIMATING CHANNEL CAPACITY

Yes, you finally made it, the grand finale is our channel capacity calculation. We now need to take these 42,000 bits that are spread over our OFDM symbol period and figure out how they translate into channel capacity. I need a coffee!

In [eq 7], we present a streamlined version of the formula. To make it more user-friendly, we’ve further simplified it in [eq 8]. Essentially, this boils down to dividing the bits per symbol, as calculated in step #3, by the symbol period. Note that [eq 8] includes certain assumptions and constants for ease of understanding.

OFDM Channel Capacity (Gbps) = totalDataBits / (1/ DSSubcarrierSpacing) + DSCyclicPrefix / DSSamplingRate) * numSymbolsPerProfile * 1000)                                                                                       [eq 7]

OFDM Channel Capacity (Gbps) = Total Data Bits per OFDM Symbol / (Symbol Period (μs) x 103 )     [eq 8]

Considering error correction, it’s prudent to factor in an approximate 12% LDPC (low-density parity check) overhead. To refine our estimates, this overhead should be deducted from our total. Keep in mind, LDPC overhead varies with packet sizes in DOCSIS. For a straightforward approach, you can apply the 12% estimate directly in your calculations, or for more precision, utilize tools like Python or Excel, employing algorithms like those found in Karthik’s work. For a Python-based OFDM estimator, check out my Github page: https://github.com/BradyVolpe/ofdmEstimator/

For this article, let’s use the 12% estimation.

Re-examining our calculation for the channel rate, we start with the initial total data bits per OFDM symbol, which was calculated as 42,000 bits. Considering the LDPC FEC overhead of approximately 12%, the effective total data bits available for user data is:

Effective Total Data Bits per OFDM Symbol = Total Data Bits × (1−FEC Overhead)                              [eq 9]

Effective Total Data Bits per OFDM Symbol = 42,000 × (1−0.1225)                                                         [eq 10]

Effective Total Data Bits per OFDM Symbol ≈ 36,885                                                                                [eq 11]

Now, finally we can calculate a reasonably accurate channel capacity estimate for a 192 MHz wide OFDM channel running at 4096-QAM:

OFDM Channel Capacity (Gbps) = Total Data Bits per OFDM Symbol / Symbol Period (μs) x 103)   [eq 12]

And now plugging in real world numbers gives us the true capacity:

OFDM Channel Capacity (Gbps) = 36,855 / 20×103 = 1.84 Gbps                                                              [eq 13]

For a 192 MHz OFDM channel with 50 kHz spacing running at 4096-QAM, one should expect a total capacity of 1.84 Gbps. See, wasn’t that simple?

Too long; didn’t read (Tl;dr)

Alright, hold onto your hats! I know you’ve just waded through a sea of math, equations, and probably more numbers than found in a phone book (remember those?). But hey, maybe you’re just here for the quick and dirty, back-of-the-napkin way to estimate the capacity of an OFDM channel. Well, here is the easy way:

  • Take your OFDM channel bandwidth, say it is 96 MHz, and substruct the unused spectrum (typically 2 MHz + 2 MHz on either side)

96 MHz – (2 MHz + 2 MHz) = 4 MHz

  • Divide the remaining bandwidth by 50 kHz (subcarrier spacing)

94 MHz / 50 kHz = 1,880 subcarriers

We are going to drop 7% of those subcarriers, because they don’t transport data

1,880 * (1-0.07) = 1,748 subcarriers carrying data

Calculate our total bits in the OFDM Channel

1,748 subcarriers * 12 bits (for 4096 QAM) = 20,976 total bits

Finally, calculate the channel capacity and remove 12% LDPC error correction overhead (that is just a very rough estimate)

Channel capacity (Gbps) = Total Bits x (1 – 0.12) / 20×10= 20,976 x (1 – 0.12) / 20×10= 922 Mbps

And that is it. You can now perform rough estimates of the OFDM channel or feel free to download my Python estimator, which is based on the work done by Karthik in his paper. Let me know if you are interested in an OFDMA estimator.

References:

[1] Accurately Estimating D3.1 Channel Capacity, Karthik Sundaresan, Principal Architect, CableLabs, SCTE Cable-Tec Expo 2017.

As seen in BBL