Distance Spectrum of IEEE 802.11 Binary Convolutional Codes

Rethna Pulikkoonattu

Abstract. Binary convolutional coding (BCC) has been a cornerstone of the IEEE 802.11 wireless LAN standard since its inception, and it remains relevant today across the full generational arc from legacy 802.11a/g through Wi-Fi 6 (802.11ax) and into the forthcoming Wi-Fi 8 (802.11bn). Although LDPC codes now dominate high-throughput applications, BCC is mandatory for backward compatibility and continues to serve as the default FEC scheme in 20 MHz-only devices, IoT nodes, and other cost-sensitive deployments where LDPC decoder complexity is prohibitive. BCC at rate 1/2 is the coding scheme used throughout the packet preamble in every 802.11-compliant frame. The new Enhanced Long Range (ELR) packet format in 802.11bn also mandates rate-1/2 BCC for the data portion, reinforcing its continued importance.

The performance of BCC under Viterbi decoding is governed by the distance spectrum {(αd, βd)}d ≥ dfree. This note explains how to compute that spectrum exactly for the IEEE 802.11 mother code (rate 1/2, K=7, generators 1338/1718) and its three standard punctured derivatives (rates 2/3, 3/4, 5/6). Union-bound BEP and FER curves are derived for AWGN with BPSK/QPSK and Gray-coded M-QAM and validated against Monte Carlo simulation. Python, Julia, and C++ implementations are openly available at github.com/geekymode/bcc_spectrum.

1 Introduction

Despite the ubiquity of BCC in deployed IEEE 802.11 systems, a recurring obstacle when analysing or benchmarking its performance is the absence of a self-contained, publicly accessible resource that derives the distance spectrum from first principles and connects it cleanly to BER and FER bounds. Existing textbook treatments (Lin and Costello Jr. 2004Lin, S., and D. J. Costello Jr. 2004. Error Control Coding. 2nd ed. Upper Saddle River, NJ, USA: Pearson Prentice Hall.; Proakis 2001Proakis, J. G. 2001. Digital Communications. 4th ed. New York, NY, USA: McGraw-Hill.; Viterbi and Omura 1979Viterbi, A. J., and J. K. Omura. 1979. Principles of Digital Communication and Coding. New York, NY, USA: McGraw-Hill.) cover the theory at varying levels of generality but do not provide spectrum tables, working code, or simulation-validated bound curves specific to the 802.11 puncture schedules. Standards documents (IEEE Std 802.11-2020: IEEE Standard for Information Technology — Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications” 2021) state the generator polynomials and puncture matrices but say nothing about performance analysis.

This report attempts to fill that gap. The distance spectrum for each of the four standard rates is tabulated exactly; union-bound BEP and FER curves are derived and cross-validated against Monte Carlo simulation for both QPSK and 256-QAM; and the complete computational procedure is documented in pseudocode and three reference implementations (Python, Julia, C++). The source code is freely available at https://github.com/geekymode/bcc_spectrum (geekymode 2024geekymode. 2024. bcc_spectrum: Distance Spectrum and Performance Bounds for IEEE 802.11 BCC.” GitHub repository. https://github.com/geekymode/bcc_spectrum.).

2 The Mother Code

2.1 Encoder shift register

The 802.11 BCC is a rate-\(\frac{1}{2}\), constraint-length-\(7\) convolutional encoder (Forney Jr. 1970Forney Jr., G. D. 1970. “Convolutional Codes I: Algebraic Structure.” IEEE Transactions on Information Theory 16 (6): 720–38.) with generator polynomials \[g_1 = 133_8 = (1,0,1,1,0,1,1), \qquad g_2 = 171_8 = (1,1,1,1,0,0,1).\] In polynomial form, with \(D\) the unit-delay operator, \[g_1(D)=1+D^2+D^3+D^5+D^6, \qquad g_2(D)=1+D+D^2+D^3+D^6.\] These generators were identified by Odenwalder (Odenwalder 1970Odenwalder, J. P. 1970. “Optimal Decoding of Convolutional Codes.” PhD thesis, University of California, Los Angeles.) as maximising free distance at rate \(\frac{1}{2}\), \(K=7\), standardised by CCSDS (Consultative Committee for Space Data Systems 2013Consultative Committee for Space Data Systems. 2013. “Telemetry Channel Coding.” CCSDS 131.0-B-3. Washington, DC, USA: CCSDS.), and adopted in IEEE 802.11 (IEEE Std 802.11-2020: IEEE Standard for Information Technology — Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications” 2021). At each clock cycle the encoder reads one input bit \(u_n\), shifts it into a 6-stage register, and XORs selected taps to produce two output bits \((v_n^{(1)}, v_n^{(2)})\).

IEEE 802.11 K=7 BCC shift-register encoder. Each D box is a unit-delay; ⊕ is mod-2 addition. The g₁=133₈ XOR chain runs above (taps 0,2,3,5,6); g₂=171₈ runs below (taps 0,1,2,3,6).

IEEE 802.11 K=7 BCC shift-register encoder. Each D box is a unit-delay; ⊕ is mod-2 addition. The g₁=133₈ XOR chain runs above (taps 0,2,3,5,6); g₂=171₈ runs below (taps 0,1,2,3,6).

2.2 Trellis state

The encoder state \(\sigma_n=(u_{n-1},\ldots,u_{n-6})\in\{0,\ldots,63\}\). A transition \(\sigma\xrightarrow{u}\sigma'\) is (Forney Jr. 1970Forney Jr., G. D. 1970. “Convolutional Codes I: Algebraic Structure.” IEEE Transactions on Information Theory 16 (6): 720–38.; Lin and Costello Jr. 2004Lin, S., and D. J. Costello Jr. 2004. Error Control Coding. 2nd ed. Upper Saddle River, NJ, USA: Pearson Prentice Hall.): \[\sigma'=\bigl((\sigma\ll 1)\;\&\;\texttt{0x3F}\bigr)\;|\;u, \qquad v^{(k)}=\bigoplus_{i=0}^{6}g_k[i]\cdot r_i,\quad \mathbf{r}=(u,\sigma_0,\ldots,\sigma_5).\] The trellis (Forney Jr. 1973Forney Jr., G. D. 1970. “Convolutional Codes I: Algebraic Structure.” IEEE Transactions on Information Theory 16 (6): 720–38. 1973. “The Viterbi Algorithm.” Proceedings of the IEEE 61 (3): 268–78.) has 64 states, each with two outgoing branches.

Rate-1/2 trellis, 4 lowest states over n=0,…,7. Blue solid: u=0; red dashed: u=1. Edge labels (v⁽¹⁾v⁽²⁾) shown at first transition only.

Rate-1/2 trellis, 4 lowest states over n=0,…,7. Blue solid: u=0; red dashed: u=1. Edge labels (v⁽¹⁾v⁽²⁾) shown at first transition only.

3 Puncturing and Puncture Matrices

Higher code rates are obtained by puncturing: periodically deleting output bits before transmission (Cain, Clark Jr., and Geist 1979Cain, J. B., G. C. Clark Jr., and J. M. Geist. 1979. “Punctured Convolutional Codes of Rate ((n-1)/n) and Simplified Maximum Likelihood Decoding.” IEEE Transactions on Information Theory 25 (1): 97–100.; Yasuda, Kashiki, and Hirata 1984Yasuda, Y., K. Kashiki, and Y. Hirata. 1984. “High-Rate Punctured Convolutional Codes for Soft Decision Viterbi Decoding.” IEEE Transactions on Communications 32 (3): 315–19.; Hagenauer 1988Hagenauer, J. 1988. “Rate-Compatible Punctured Convolutional Codes (RCPC Codes) and Their Applications.” IEEE Transactions on Communications 36 (4): 389–400.). A binary puncture matrix \(\mathbf{P}\) specifies which bits survive (1 = transmit, 0 = delete). The serialised mask \(\mathbf{p}\) is read column-by-column.

3.1 Rate \(\frac{1}{2}\) — unpunctured

\[\mathbf{P}_{1/2}=\begin{pmatrix}1\\1\end{pmatrix},\quad\mathbf{p}=(1,1).\]

3.2 Rate \(\frac{2}{3}\)

\[\mathbf{P}_{2/3}=\begin{pmatrix}1&1\\1&0\end{pmatrix},\quad\mathbf{p}=(1,1,1,0),\quad L=4.\]

3.3 Rate \(\frac{3}{4}\)

\[\mathbf{P}_{3/4}=\begin{pmatrix}1&1&0\\1&0&1\end{pmatrix},\quad\mathbf{p}=(1,1,1,0,0,1),\quad L=6.\]

3.4 Rate \(\frac{5}{6}\)

\[\mathbf{P}_{5/6}=\begin{pmatrix}1&1&0&1&0\\1&0&1&0&1\end{pmatrix},\quad\mathbf{p}=(1,1,1,0,0,1,1,0,1,0),\quad L=10.\]

IEEE 802.11 puncture masks and free distances.

Rate Mask p L d_free
1/2 11 2 10
2/3 1110 4 6
3/4 111001 6 5
5/6 1110011010 10 4

Rate-3/4 mask 111001 over two periods. Solid border: transmitted. Dashed: deleted.

Rate-3/4 mask 111001 over two periods. Solid border: transmitted. Dashed: deleted.

4 Distance Spectrum: Definitions

Definition (Distance spectrum (Lin and Costello Jr. 2004Lin, S., and D. J. Costello Jr. 2004. Error Control Coding. 2nd ed. Upper Saddle River, NJ, USA: Pearson Prentice Hall.; Ryan and Lin 2009Ryan, W. E., and S. Lin. 2009. Channel Codes: Classical and Modern. Cambridge, UK: Cambridge University Press.; Viterbi and Omura 1979Viterbi, A. J., and J. K. Omura. 1979. Principles of Digital Communication and Coding. New York, NY, USA: McGraw-Hill.)). The distance spectrum \(\{(\alpha_d,\beta_d)\}_{d\geq d_\mathrm{free}}\): \(\alpha_d\) counts error events at Hamming distance \(d\) from the all-zero codeword; \(\beta_d\) is the total input Hamming weight of those paths. The smallest \(d\) with \(\alpha_d>0\) is the free distance \(d_\mathrm{free}\) (Viterbi 1967Viterbi, A. J. 1967. “Error Bounds for Convolutional Codes and an Asymptotically Optimum Decoding Algorithm.” IEEE Transactions on Information Theory 13 (2): 260–69.; Forney Jr. 1970Forney Jr., G. D. 1970. “Convolutional Codes I: Algebraic Structure.” IEEE Transactions on Information Theory 16 (6): 720–38.).

5 BER Bounds from the Distance Spectrum

5.1 Union bound on bit-error probability

For the Viterbi decoder (Viterbi 1967Viterbi, A. J. 1967. “Error Bounds for Convolutional Codes and an Asymptotically Optimum Decoding Algorithm.” IEEE Transactions on Information Theory 13 (2): 260–69.; Forney Jr. 1973Forney Jr., G. D. 1970. “Convolutional Codes I: Algebraic Structure.” IEEE Transactions on Information Theory 16 (6): 720–38. 1973. “The Viterbi Algorithm.” Proceedings of the IEEE 61 (3): 268–78.) over AWGN with BPSK, the pairwise error probability at Hamming distance \(d\) is (Proakis 2001Proakis, J. G. 2001. Digital Communications. 4th ed. New York, NY, USA: McGraw-Hill.; Ryan and Lin 2009Ryan, W. E., and S. Lin. 2009. Channel Codes: Classical and Modern. Cambridge, UK: Cambridge University Press.) \[P_2(d)=Q\!\left(\sqrt{2d\,R_c\,\frac{E_b}{N_0}}\right).\] The union-bound bit-error probability is (Viterbi 1967Viterbi, A. J. 1967. “Error Bounds for Convolutional Codes and an Asymptotically Optimum Decoding Algorithm.” IEEE Transactions on Information Theory 13 (2): 260–69.; Lin and Costello Jr. 2004Lin, S., and D. J. Costello Jr. 2004. Error Control Coding. 2nd ed. Upper Saddle River, NJ, USA: Pearson Prentice Hall.) \[P_b\;\lesssim\;\sum_{d=d_\mathrm{free}}^{D_{\max}}\beta_d\;Q\!\left(\sqrt{2d\,R_c\,\frac{E_b}{N_0}}\right). \tag{UB}\]

5.2 Frame error rate

\[P_f\;\lesssim\;\sum_{d=d_\mathrm{free}}^{D_{\max}}\alpha_d\;Q\!\left(\sqrt{2d\,R_c\,\frac{E_b}{N_0}}\right). \tag{FER}\]

5.3 Single-term approximation

\[P_b\;\approx\;\beta_{d_\mathrm{free}}\;Q\!\left(\sqrt{2\,d_\mathrm{free}\,R_c\,\frac{E_b}{N_0}}\right).\]

Union-bound BEP and FER (10 spectrum terms, BPSK/AWGN).

Eb/N0 (dB) Pb R=1/2 Pf R=1/2 Pb R=2/3 Pf R=2/3 Pb R=3/4 Pf R=3/4 Pb R=5/6 Pf R=5/6
3 1.6e-1 1.8e-1 1.4e-1 1.4e-1 1.3e-1 1.1e-1 1.2e-1 1.7e-1
4 4.2e-2 5.3e-2 5.1e-2 5.3e-2 6.3e-2 5.5e-2 8.1e-2 1.1e-1
5 4.2e-4 5.3e-4 8.7e-3 9.0e-3 1.7e-2 1.5e-2 4.4e-2 6.2e-2
6 5.8e-8 7.2e-8 4.4e-4 4.5e-4 2.0e-3 1.7e-3 1.3e-2 1.8e-2
7 <1e-14 <1e-14 3.6e-6 3.7e-6 5.4e-5 4.7e-5 1.9e-3 2.6e-3
8 <<1e-20 <<1e-20 3.5e-9 3.6e-9 2.7e-7 2.4e-7 1.4e-4 2.0e-4

The union bound is loose at low SNR but tightens rapidly in the waterfall region (Forney Jr. 1973Forney Jr., G. D. 1970. “Convolutional Codes I: Algebraic Structure.” IEEE Transactions on Information Theory 16 (6): 720–38. 1973. “The Viterbi Algorithm.” Proceedings of the IEEE 61 (3): 268–78.). The rate-1/2 code provides roughly 4–5 dB coding gain at \(P_b=10^{-5}\) (Heller and Jacobs 1971Heller, J. A., and I. M. Jacobs. 1971. “Viterbi Decoding for Satellite and Space Communication.” IEEE Transactions on Communication Technology 19: 835–48.; Proakis 2001Proakis, J. G. 2001. Digital Communications. 4th ed. New York, NY, USA: McGraw-Hill.). Figure \(\ref{fig:ber_fer}\) shows both bounds.

BEP (left) and FER (right, K=1024) union bounds with simulation markers for all four IEEE 802.11 BCC rates over AWGN/QPSK. Lines: bounds (30 terms); dot-dashed+markers: Monte Carlo. Dotted black: uncoded BPSK.

BEP (left) and FER (right, K=1024) union bounds with simulation markers for all four IEEE 802.11 BCC rates over AWGN/QPSK. Lines: bounds (30 terms); dot-dashed+markers: Monte Carlo. Dotted black: uncoded BPSK.

6 Bounds for Gray-Coded \(M\)-QAM

6.1 Channel model and penalty factor \(\Delta_M\)

Under the BICM model (Caire, Taricco, and Biglieri 1998Caire, Giuseppe, Giorgio Taricco, and Ezio Biglieri. 1998. “Bit-Interleaved Coded Modulation.” IEEE Transactions on Information Theory 44 (3): 927–46. https://doi.org/10.1109/18.669123.), the pairwise error probability at distance \(d\) becomes \[P_2(d)\leq Q\!\left(\sqrt{2\,R_c\,d\,\Delta_M\,\frac{E_b}{N_0}}\right),\qquad \Delta_M=\frac{3\,m}{2(M-1)},\quad m=\log_2 M,\quad M\geq 4.\] For QPSK (\(M=4\)), \(\Delta_M=1\), recovering the BPSK result.

Modulation penalty factor. Each QAM order step costs roughly 4–5 dB.

M m Δ_M Penalty (dB)
4 2 1 0.0
16 4 2/5 = 0.4 −4.0
64 6 2/14 ≈ 0.143 −8.5
256 8 8/170 ≈ 0.047 −13.3

6.2 Union bounds

Substituting \(\Delta_M\) into the BPSK bounds replaces \(E_b/N_0\) by \(\Delta_M E_b/N_0\). Setting \(\Delta_M=1\) recovers (UB) and (FER) exactly.

BEP union bounds for Gray-coded M-QAM (30 spectrum terms). Left: rate 1/2, varying M; dotted: uncoded references. Right: 256-QAM, all four rates; dot-dashed+markers: Monte Carlo for R=2/3 and R=3/4.

BEP union bounds for Gray-coded M-QAM (30 spectrum terms). Left: rate 1/2, varying M; dotted: uncoded references. Right: 256-QAM, all four rates; dot-dashed+markers: Monte Carlo for R=2/3 and R=3/4.

7 Augmented Trellis and Transfer Function

7.1 Why augment the state

For the unpunctured code the transfer function method uses a \(64\times64\) state space (Lin and Costello Jr. 2004Lin, S., and D. J. Costello Jr. 2004. Error Control Coding. 2nd ed. Upper Saddle River, NJ, USA: Pearson Prentice Hall.; Viterbi and Omura 1979Viterbi, A. J., and J. K. Omura. 1979. Principles of Digital Communication and Coding. New York, NY, USA: McGraw-Hill.). Puncturing makes branch weight phase-dependent; augmenting the state with the puncture phase \(\phi\in\{0,\ldots,L-1\}\) converts this to a time-invariant problem (Hagenauer 1988Hagenauer, J. 1988. “Rate-Compatible Punctured Convolutional Codes (RCPC Codes) and Their Applications.” IEEE Transactions on Communications 36 (4): 389–400.). The augmented state is \((\sigma,\phi)\); for rate-3/4 (\(L=6\)) this gives \(64\times6=384\) states.

Each branch carries weight \(D^d N^u\) where \(d=p_\phi v^{(1)}+p_{(\phi+1)\bmod L}v^{(2)}\). Branches partition into \(\mathbf{E}\): START\(\to\mathcal{S}\); \(\mathbf{Q}\): \(\mathcal{S}\to\mathcal{S}\); \(\mathbf{R}\): \(\mathcal{S}\to\)START.

E/Q/R partition of the augmented trellis. The transfer function sums over all first-return paths from START to START.

E/Q/R partition of the augmented trellis. The transfer function sums over all first-return paths from START to START.

8 Computing the Transfer Function

The first-return transfer polynomial (Lin and Costello Jr. 2004Lin, S., and D. J. Costello Jr. 2004. Error Control Coding. 2nd ed. Upper Saddle River, NJ, USA: Pearson Prentice Hall.; Viterbi and Omura 1979Viterbi, A. J., and J. K. Omura. 1979. Principles of Digital Communication and Coding. New York, NY, USA: McGraw-Hill.; Blahut 1983Blahut, R. E. 1983. Theory and Practice of Error Control Codes. Reading, MA, USA: Addison-Wesley.) is \[T(D,N)=\mathbf{E}^\top(\mathbf{I}-\mathbf{Q})^{-1}\mathbf{R},\qquad \alpha_d=[D^d]T(D,1),\quad\beta_d=[D^d]\tfrac{\partial T}{\partial N}\big|_{N=1}.\]

The Neumann series \((\mathbf{I}-\mathbf{Q})^{-1}\mathbf{R}=\sum_{k\geq0}\mathbf{Q}^k\mathbf{R}\) avoids matrix inversion (Lin and Costello Jr. 2004Lin, S., and D. J. Costello Jr. 2004. Error Control Coding. 2nd ed. Upper Saddle River, NJ, USA: Pearson Prentice Hall.; Ryan and Lin 2009Ryan, W. E., and S. Lin. 2009. Channel Codes: Classical and Modern. Cambridge, UK: Cambridge University Press.). Implementation uses: sparse polynomials Dict[int→(count,weight)], combined multiply tracking both \(\alpha\) and \(\beta\) in one pass, and early termination when all terms exceed \(d_{\max}\).

9 Pseudocode

Algorithm: First-Return Spectrum for Punctured BCC

Input: Puncture mask p ∈ {0,1}^L, max distance d_max
Output: d_free, {α_d}, {β_d} for d ≤ d_max

  1. For each augmented state (σ,φ) and u ∈ {0,1}:
    • Compute (σ′,φ′) and outputs (v⁽¹⁾, v⁽²⁾)
    • d ← p_φ v⁽¹⁾ + p_{(φ+1) mod L} v⁽²⁾; pol ← {d ↦ (1,u)}
    • Route pol to E, Q, or R based on src/dst vs. START
  2. x ← 0; term ← R
  3. Repeat:
    • x += term; term ← Q · term (sparse, truncate at d_max)
    • Until term = 0
  4. T ← E^⊤ x; remove T[0]
  5. d_free ← min(keys(T)); α_d ← T[d].count; β_d ← T[d].weight

Note: The all-zero self-loop (START→START, u=0) is excluded.

10 Full Distance Spectrum Tables

Rate 1/2, d_free=10. First 16 non-zero terms. Only even-d terms appear.

d α_d β_d
10 11 36
12 38 211
14 193 1,404
16 1,331 11,633
18 7,275 77,433
20 40,406 502,690
22 234,969 3,322,763
24 1,337,714 21,292,910
26 7,594,819 134,365,911
28 43,375,588 843,425,871
30 247,339,453 5,245,283,348
32 1,409,277,901 32,372,937,519
34 8,034,996,288 198,723,833,069
36 45,808,756,116 1,213,657,958,889
38 261,128,775,464 7,378,557,447,583
40 1,488,634,502,286 44,686,304,667,721

Rate 2/3, d_free=6. First 15 non-zero terms. Puncturing introduces odd-d terms.

d α_d β_d
6 1 3
7 16 70
8 48 285
9 158 1,276
10 642 6,160
11 2,435 27,128
12 9,174 117,019
13 34,705 498,860
14 131,585 2,103,891
15 499,608 8,784,123
16 1,893,179 36,328,084
17 7,172,729 149,215,136
18 27,191,646 609,374,214
19 103,077,011 2,475,565,587
20 390,696,502 10,011,487,814

Rate 3/4, d_free=5. First 15 non-zero terms.

d α_d β_d
5 8 42
6 31 201
7 160 1,492
8 892 10,469
9 4,512 62,935
10 23,307 379,644
11 121,077 2,253,373
12 625,059 13,073,811
13 3,234,886 75,152,755
14 16,753,077 428,005,675
15 86,686,071 2,415,121,123
16 448,565,858 13,534,984,705
17 2,321,546,552 75,422,690,722
18 12,014,661,684 418,134,779,192
19 62,177,678,298 2,307,775,877,171

Rate 5/6, d_free=4. First 13 non-zero terms.

d α_d β_d
4 14 92
5 69 528
6 654 8,694
7 4,996 79,453
8 39,699 792,114
9 315,371 7,375,573
10 2,507,890 67,884,974
11 19,921,920 610,875,423
12 158,275,483 5,427,275,376
13 1,257,455,600 47,664,215,639
14 9,990,453,938 414,847,451,604
15 79,372,452,075 3,583,040,670,062
16 630,602,872,400 30,748,409,619,146

11 Complexity and Correctness

State space. \(64L\) augmented states; for \(L\leq10\) at most \(639\times639\). The Neumann iteration converges in milliseconds.

Convergence. \(\mathbf{Q}^k\mathbf{R}\) has minimum polynomial degree \(\geq k\), guaranteeing termination within \(d_{\max}\) steps (Lin and Costello Jr. 2004Lin, S., and D. J. Costello Jr. 2004. Error Control Coding. 2nd ed. Upper Saddle River, NJ, USA: Pearson Prentice Hall.; Viterbi and Omura 1979Viterbi, A. J., and J. K. Omura. 1979. Principles of Digital Communication and Coding. New York, NY, USA: McGraw-Hill.).

Validation. Published reference values (\(d_\mathrm{free}=10\), \(\alpha_{10}=11\), \(\beta_{10}=36\) for rate-1/2) (IEEE Std 802.11-2020: IEEE Standard for Information Technology — Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications” 2021; Proakis 2001Proakis, J. G. 2001. Digital Communications. 4th ed. New York, NY, USA: McGraw-Hill.) are reproduced exactly by all three implementations.

Method: Augmented-Trellis First-Return Series

The augmented-trellis first-return series expansion combines three ideas. Augmented trellis: the encoder state is extended by a puncture-phase coordinate (Hagenauer 1988Hagenauer, J. 1988. “Rate-Compatible Punctured Convolutional Codes (RCPC Codes) and Their Applications.” IEEE Transactions on Communications 36 (4): 389–400.; Yasuda, Kashiki, and Hirata 1984Yasuda, Y., K. Kashiki, and Y. Hirata. 1984. “High-Rate Punctured Convolutional Codes for Soft Decision Viterbi Decoding.” IEEE Transactions on Communications 32 (3): 315–19.), converting a phase-dependent problem into a time-invariant graph. First-return: only paths from START back to START are enumerated — exactly the error events entering Viterbi’s union bound (Viterbi 1967Viterbi, A. J. 1967. “Error Bounds for Convolutional Codes and an Asymptotically Optimum Decoding Algorithm.” IEEE Transactions on Information Theory 13 (2): 260–69.). Series expansion: the Neumann series \((I-Q)^{-1}=\sum_k Q^k\) avoids explicit matrix inversion (Lin and Costello Jr. 2004Lin, S., and D. J. Costello Jr. 2004. Error Control Coding. 2nd ed. Upper Saddle River, NJ, USA: Pearson Prentice Hall.; Blahut 1983Blahut, R. E. 1983. Theory and Practice of Error Control Codes. Reading, MA, USA: Addison-Wesley.).

This is closely related to the transfer function method of Lin & Costello (Lin and Costello Jr. 2004Lin, S., and D. J. Costello Jr. 2004. Error Control Coding. 2nd ed. Upper Saddle River, NJ, USA: Pearson Prentice Hall.), Viterbi & Omura (Viterbi and Omura 1979Viterbi, A. J., and J. K. Omura. 1979. Principles of Digital Communication and Coding. New York, NY, USA: McGraw-Hill.), Blahut (Blahut 1983Blahut, R. E. 1983. Theory and Practice of Error Control Codes. Reading, MA, USA: Addison-Wesley.), and Ryan & Lin (Ryan and Lin 2009Ryan, W. E., and S. Lin. 2009. Channel Codes: Classical and Modern. Cambridge, UK: Cambridge University Press.). Phase augmentation for punctured codes is due to Hagenauer (Hagenauer 1988Hagenauer, J. 1988. “Rate-Compatible Punctured Convolutional Codes (RCPC Codes) and Their Applications.” IEEE Transactions on Communications 36 (4): 389–400.) and Yasuda et al. (Yasuda, Kashiki, and Hirata 1984Yasuda, Y., K. Kashiki, and Y. Hirata. 1984. “High-Rate Punctured Convolutional Codes for Soft Decision Viterbi Decoding.” IEEE Transactions on Communications 32 (3): 315–19.); the free-distance optimality of \(133_8/171_8\) was established by Odenwalder (Odenwalder 1970Odenwalder, J. P. 1970. “Optimal Decoding of Convolutional Codes.” PhD thesis, University of California, Los Angeles.) and documented by Heller & Jacobs (Heller and Jacobs 1971Heller, J. A., and I. M. Jacobs. 1971. “Viterbi Decoding for Satellite and Space Communication.” IEEE Transactions on Communication Technology 19: 835–48.).

Spectrum Toolkit

Three independent implementations, all producing bit-identical results.
Source: https://github.com/geekymode/bcc_spectrum (geekymode 2024geekymode. 2024. bcc_spectrum: Distance Spectrum and Performance Bounds for IEEE 802.11 BCC.” GitHub repository. https://github.com/geekymode/bcc_spectrum.).

Python


# Run from terminal: d_max=30, show 5 terms per rate
python3 python/bcc_spectrum.py 30 5

# Library API
from python.bcc_spectrum import compute_spectrum, PUNCTURE_MASKS
dfree, alpha, beta = compute_spectrum(PUNCTURE_MASKS["1/2"], d_max=60)
print(dfree, alpha[10], beta[10])   # 10  11  36

# Custom puncture mask
my_mask = [1, 1, 0, 1, 1, 0]
dfree, alpha, beta = compute_spectrum(my_mask, d_max=80)

Julia


# Run from terminal
julia julia/bcc_spectrum.jl 30 5

# REPL / script
include("julia/bcc_spectrum.jl")
dfree, alpha, beta = compute_spectrum(PUNCTURE_MASKS["3/4"], 60)
println(dfree, "  ", alpha[5], "  ", beta[5])   # 5  8  42

C++


// Build
g++ -std=c++17 -O2 -o bcc_spectrum cpp/bcc_spectrum.cpp cpp/main.cpp

// Run from terminal
./bcc_spectrum 30 5

// Library API
#include "bcc_spectrum.h"
auto [dfree, alpha, beta] = bcc::compute_spectrum(bcc::mask_half(), 60);
// dfree=10  alpha[10]=11  beta[10]=36

Sample output

IEEE 802.11 BCC Distance Spectrum  |  K=7, generators 133_8/171_8
d_max=30, 5 terms per rate
============================================================
Rate 1/2  (puncture period=2)   d_free=10
   d       alpha_d        beta_d
  10            11            36
  12            38           211
  14           193         1,404
  16         1,331        11,633
  18         7,275        77,433

Rate 2/3  (puncture period=4)   d_free=6
   d       alpha_d        beta_d
   6             1             3
   7            16            70
   8            48           285
   9           158         1,276
  10           642         6,160

Rate 3/4  (puncture period=6)   d_free=5
   d       alpha_d        beta_d
   5             8            42
   6            31           201
   7           160         1,492
   8           892        10,469
   9         4,512        62,935

Rate 5/6  (puncture period=10)  d_free=4
   d       alpha_d        beta_d
   4            14            92
   5            69           528
   6           654         8,694
   7         4,996        79,453
   8        39,699       792,114