Rethna Pulikkoonattu
rethna@broadcom.com
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.
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.).
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).
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.
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.
\[\mathbf{P}_{1/2}=\begin{pmatrix}1\\1\end{pmatrix},\quad\mathbf{p}=(1,1).\]
\[\mathbf{P}_{2/3}=\begin{pmatrix}1&1\\1&0\end{pmatrix},\quad\mathbf{p}=(1,1,1,0),\quad L=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.\]
\[\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.
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.).
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}\]
\[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}\]
\[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.
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 |
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.
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.
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}\).
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
Note: The all-zero self-loop (START→START, u=0) is excluded.
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 |
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.
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.).
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/bcc_spectrum.py — Pure Python 3, stdlib only.julia/bcc_spectrum.jl — Julia with typed dicts and in-place polynomial arithmetic.cpp/bcc_spectrum.cpp + bcc_spectrum.h — C++17 library with command-line driver.
# 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)
# 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
// 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
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