Nested Lattice Codes

From QAM to Nested Lattices: Replacing Truncation with Modulo

A 16-QAM constellation is a 4×44 \times 4 patch of Z2\mathbb{Z}^2. How do we pick the patch? Traditionally, we truncate — keep the lattice points inside a square and discard the rest. Truncation is crude: the square has more "real estate" than a random Gaussian codeword would typically need, and the constellation boundary radiates bits of outer information that the decoder must somehow handle.

Nested lattice codes replace truncation with a much cleaner operation: reduction modulo a coarser lattice. We pick a fine lattice Λc\Lambda_c (the "coding lattice") to hold the codewords, and a coarse lattice ΛsΛc\Lambda_s \subset \Lambda_c (the "shaping lattice") whose Voronoi region V(Λs)\mathcal{V}(\Lambda_s) defines the power-constrained transmit region. The codebook is all fine-lattice points that fall inside this Voronoi cell: C  =  ΛcV(Λs).\mathcal{C} \;=\; \Lambda_c \cap \mathcal{V}(\Lambda_s).

The point is that this "modulo shaping" is algebraic. The constellation boundary is no longer a square or a cube; it is the Voronoi region of Λs\Lambda_s, which can be made as round as desired by choosing Λs\Lambda_s appropriately. The transmitter reduces its codeword mod Λs\Lambda_s; the receiver undoes the modulo at the end of decoding. No outer information is radiated because no information is encoded in the boundary — the boundary is a lattice operation, not a pattern of bits. This is the single idea that will carry us to the AWGN capacity in s02.

,

Definition:

Nested Lattice Pair

A pair (Λc,Λs)(\Lambda_c, \Lambda_s) of lattices in Rn\mathbb{R}^n is called nested if ΛsΛc\Lambda_s \subset \Lambda_c: every shaping-lattice point is also a coding-lattice point. We call Λc\Lambda_c the fine (coding) lattice and Λs\Lambda_s the coarse (shaping) lattice.

The nesting index is Λc/Λs  =  V(Λs)V(Λc),|\Lambda_c / \Lambda_s| \;=\; \frac{V(\Lambda_s)}{V(\Lambda_c)}, which counts the number of distinct cosets of Λs\Lambda_s inside Λc\Lambda_c. The cosets are the equivalence classes of the relation xx\mathbf{x} \sim \mathbf{x}' if xxΛs\mathbf{x} - \mathbf{x}' \in \Lambda_s.

Every lattice chain Zn2Zn4Zn\mathbb{Z}^n \supset 2 \mathbb{Z}^n \supset 4 \mathbb{Z}^n \supset \cdots is an example; the classic 4-PAM/16-QAM constellations are ZV(4Z)\mathbb{Z} \cap \mathcal{V}(4 \mathbb{Z}) and Z2V(4Z2)\mathbb{Z}^2 \cap \mathcal{V}(4 \mathbb{Z}^2) respectively. Choosing Λs\Lambda_s other than scaled integers is where shaping gain enters.

,

Definition:

Modulo-Lattice Operation and Nearest-Neighbour Quantiser

For a lattice ΛRn\Lambda \subset \mathbb{R}^n, the nearest-neighbour quantiser is QΛ(y)  =  argminλΛyλ,Q_\Lambda(\mathbf{y}) \;=\; \arg \min_{\boldsymbol{\lambda} \in \Lambda} \|\mathbf{y} - \boldsymbol{\lambda}\|, defined (uniquely) for y\mathbf{y} outside the (measure-zero) boundary of the Voronoi tessellation.

The modulo-lattice reduction is [y]modΛ  =  yQΛ(y)    V(Λ),[\mathbf{y}] \bmod \Lambda \;=\; \mathbf{y} - Q_\Lambda(\mathbf{y}) \;\in\; \mathcal{V}(\Lambda), i.e., the unique representative of the coset y+Λ\mathbf{y} + \Lambda inside the Voronoi region. The operation is a group homomorphism from (Rn,+)(\mathbb{R}^n, +) to (V(Λ),)(\mathcal{V}(\Lambda), \oplus), where \oplus denotes addition followed by mod-Λ\Lambda reduction.

Computing QΛQ_\Lambda is the closest-lattice-point problem — NP-hard in the worst case and the topic of s05. For Λ=Zn\Lambda = \mathbb{Z}^n it reduces to scalar rounding (O(n)O(n)); for Z\mathbb{Z}-dilates of E8E_8 or Λ24\Lambda_{24} there are fast decoding algorithms (Forney's). For a generic integer lattice, one resorts to the sphere decoder.

,

Definition:

Nested Lattice Code

Given a nested lattice pair ΛsΛc\Lambda_s \subset \Lambda_c, the associated nested lattice code is C  =  ΛcV(Λs).\mathcal{C} \;=\; \Lambda_c \cap \mathcal{V}(\Lambda_s). That is, C\mathcal{C} consists of all fine-lattice points that lie inside the Voronoi region of the coarse lattice around the origin. The code has C=Λc/Λs|\mathcal{C}| = |\Lambda_c / \Lambda_s| codewords, and we encode a message u{0,1,,C1}u \in \{0, 1, \ldots, |\mathcal{C}| - 1\} by a fixed enumeration uxuCu \mapsto \mathbf{x}_u \in \mathcal{C}.

The rate (bits per real dimension) is R  =  R  =  1nlog2C  =  1nlog2V(Λs)V(Λc).R \;=\; R \;=\; \frac{1}{n} \log_2 |\mathcal{C}| \;=\; \frac{1}{n} \log_2 \frac{V(\Lambda_s)}{V(\Lambda_c)}.

The codebook size is the nesting index. The rate — whose units are bits per real dimension — directly compares against the per-dimension AWGN capacity 12log2(1+SNR)\tfrac12 \log_2(1 + \text{SNR}). Chapter 15's coding-gain vocabulary (γc(Λc)\gamma_c(\Lambda_c), γs(Λs)\gamma_s(\Lambda_s)) will re-enter in s03 as the two independent knobs controlling how close this RR gets to 12log2(1+SNR)\tfrac12 \log_2(1 + \text{SNR}).

,

Theorem: Codebook Size Equals Volume Ratio

For any nested lattice pair ΛsΛcRn\Lambda_s \subset \Lambda_c \subset \mathbb{R}^n, the number of fine-lattice points inside a Voronoi region of the coarse lattice is exactly the index: ΛcV(Λs)  =  Λc/Λs  =  V(Λs)V(Λc).|\Lambda_c \cap \mathcal{V}(\Lambda_s)| \;=\; |\Lambda_c / \Lambda_s| \;=\; \frac{V(\Lambda_s)}{V(\Lambda_c)}.

Each coset of Λs\Lambda_s in Λc\Lambda_c has exactly one representative inside any fundamental region of Λs\Lambda_s — this is just the statement that a fundamental region tiles Rn\mathbb{R}^n under translations by Λs\Lambda_s. The Voronoi region is one such fundamental region, so each coset contributes exactly one point to ΛcV(Λs)\Lambda_c \cap \mathcal{V}(\Lambda_s).

,

Nested Lattice Pair ΛcΛs\Lambda_c \supset \Lambda_s in 2D

Visualisation of a 2D nested lattice pair: the fine coding lattice Λc=Z2\Lambda_c = \mathbb{Z}^2 and a scaled shaping sublattice Λs=NZ2\Lambda_s = N \mathbb{Z}^2 (hexagonal-rotated for realism). The Voronoi cell V(Λs)\mathcal{V}(\Lambda_s) is outlined; the codeword set C=ΛcV(Λs)\mathcal{C} = \Lambda_c \cap \mathcal{V}(\Lambda_s) is highlighted; the other Λc\Lambda_c-points are shown faintly to emphasise the periodic lattice outside. Increasing the nesting ratio NN grows both C|\mathcal{C}| and the rate R=log2N2/2=log2NR = \log_2 N^2 / 2 = \log_2 N bits per real dimension.

Parameters
5

Example: 16-QAM as a Nested Lattice Code

Express the 16-QAM constellation {±1,±3}2\{\pm 1, \pm 3\}^2 as a nested lattice code ΛcV(Λs)\Lambda_c \cap \mathcal{V}(\Lambda_s) for some fine and coarse lattices. Compute the codebook size and the rate.

,

Encoder and Decoder, in One Picture

With the definitions in place, the nested-lattice coding system is: u{0,,2nR1}message  enumerator  xCcodeword in V(Λs)  AWGN  y=x+w  decoder  x^C  un-enumerator  u^.\underbrace{u \in \{0, \ldots, 2^{nR} - 1\}}_{\text{message}} \;\xrightarrow{\text{enumerator}}\; \underbrace{\mathbf{x} \in \mathcal{C}}_{\text{codeword in } \mathcal{V}(\Lambda_s)} \;\xrightarrow{\text{AWGN}}\; \mathbf{y} = \mathbf{x} + \mathbf{w} \;\xrightarrow{\text{decoder}}\; \hat{\mathbf{x}} \in \mathcal{C} \;\xrightarrow{\text{un-enumerator}}\; \hat{u}. The two "trivial" steps — the enumerator and its inverse — are implementation-level and will be treated in s05. The interesting content is in what the decoder does, and whether the choice of (Λc,Λs)(\Lambda_c, \Lambda_s) plus a small amount of additional processing (MMSE scaling + dither, in s02) is enough to achieve the AWGN capacity. Erez and Zamir (2004) proved the answer is yes — with a single algebraic scheme, no random codebook required.

Common Mistake: Nesting Must Be Strict for a Nontrivial Code

Mistake:

Taking Λc=Λs\Lambda_c = \Lambda_s and expecting a nontrivial code. If the two lattices coincide, then Λc/Λs=1|\Lambda_c / \Lambda_s| = 1 and the code has exactly one "codeword" (the origin) — a zero-rate code that transmits no information. Similarly, using ΛsΛc\Lambda_s \supsetneq \Lambda_c violates the nesting ordering.

Correction:

Always check: ΛsΛc\Lambda_s \subsetneq \Lambda_c, i.e., the coarse lattice is a proper sublattice of the fine lattice. For positive rate we need V(Λs)>V(Λc)V(\Lambda_s) > V(\Lambda_c). The standard language is "Λc\Lambda_c is a refinement of Λs\Lambda_s," or equivalently "Λs\Lambda_s is a sublattice of Λc\Lambda_c."

Historical Note: Forney, 1989: Lattice Shaping Is Coding

1988–1989

The coset-code framework of Forney (1988) explicitly separated the coding lattice (which provides asymptotic coding gain) from the shaping lattice (which provides asymptotic shaping gain). In the 1989 follow-up, Forney showed that Voronoi-constellation shaping of Λs\Lambda_s can achieve up to 1.531.53 dB of shaping gain — a number that earned a proper name in the modulation community. What neither Forney's paper nor the Ungerboeck–Forney 1998 survey proved was that this "fine + coarse lattice" architecture could close the remaining capacity gap entirely. That took another 1515 years: Erez and Zamir (2004) showed that a careful choice of Λc\Lambda_c (a random lattice via Loeliger's averaging), a coarse Λs\Lambda_s (any lattice with G(Λs)1/(2πe)G(\Lambda_s) \to 1/(2\pi e)), an MMSE scalar α\alpha, and a dither d\mathbf{d}, achieve 12log2(1+SNR)\tfrac12 \log_2(1 + \text{SNR}) — the AWGN capacity, exactly.

,

Nested lattice code

A codebook C=ΛcV(Λs)\mathcal{C} = \Lambda_c \cap \mathcal{V}(\Lambda_s) defined by a fine lattice Λc\Lambda_c and a coarse lattice ΛsΛc\Lambda_s \subset \Lambda_c. The number of codewords equals the index Λc/Λs=V(Λs)/V(Λc)|\Lambda_c / \Lambda_s| = V(\Lambda_s) / V(\Lambda_c), and the rate is R=(1/n)log2Λc/ΛsR = (1/n) \log_2 |\Lambda_c / \Lambda_s|.

Related: Fine (coding) lattice, Coarse (shaping) lattice, Voronoi Region

Fine (coding) lattice

The lattice Λc\Lambda_c in a nested pair; carries the individual codewords and provides the coding gain γc(Λc)\gamma_c(\Lambda_c). Typically Λc\Lambda_c is chosen to be dense in the packing sense (e.g., E8E_8, Λ24\Lambda_{24}, or random lattices via Loeliger).

Related: Nested Lattice Code, Coding Gain of a Full-Rank Space-Time Code, Coarse (shaping) lattice

Coarse (shaping) lattice

The sublattice ΛsΛc\Lambda_s \subset \Lambda_c in a nested pair; its Voronoi region V(Λs)\mathcal{V}(\Lambda_s) defines the power-constrained transmit region and provides the shaping gain γs(Λs)\gamma_s(\Lambda_s), bounded by πe/61.53\pi e / 6 \approx 1.53 dB.

Related: Nested Lattice Code, Shaping Gain γs(Λ)\gamma_s(\Lambda), Voronoi Region

Modulo-lattice reduction

The operation [y]modΛ=yQΛ(y)[\mathbf{y}] \bmod \Lambda = \mathbf{y} - Q_\Lambda( \mathbf{y}), which returns the unique representative of the coset y+Λ\mathbf{y} + \Lambda inside the Voronoi region V(Λ)\mathcal{V}(\Lambda). A group homomorphism from Rn\mathbb{R}^n onto V(Λ)\mathcal{V}(\Lambda).

Related: Voronoi Region, Quantiser, Crypto-Lemma (Zamir–Feder)

Quick Check

A nested lattice code uses Λc=Z2\Lambda_c = \mathbb{Z}^2 and Λs=5Z2\Lambda_s = 5 \mathbb{Z}^2. How many codewords does it have, and what is its rate RR (bits per real dimension)?

C=5|\mathcal{C}| = 5, R=log25/21.16R = \log_2 5 / 2 \approx 1.16

C=25|\mathcal{C}| = 25, R=log225/22.32R = \log_2 25 / 2 \approx 2.32

C=10|\mathcal{C}| = 10, R=log210/21.66R = \log_2 10 / 2 \approx 1.66

C=25|\mathcal{C}| = 25, R=log2254.64R = \log_2 25 \approx 4.64

Key Takeaway

A nested lattice code is a fine lattice intersected with the Voronoi region of a coarse sublattice: C=ΛcV(Λs)\mathcal{C} = \Lambda_c \cap \mathcal{V}(\Lambda_s), with C=V(Λs)/V(Λc)|\mathcal{C}| = V(\Lambda_s) / V(\Lambda_c) codewords and rate R=(1/n)log2V(Λs)/V(Λc)R = (1/n) \log_2 V(\Lambda_s)/ V(\Lambda_c). The construction decouples the "coding" job (done by Λc\Lambda_c) from the "shaping" job (done by Λs\Lambda_s), and the key operation — reduction modulo Λs\Lambda_s — is algebraic. s02 shows that a careful choice of Λc\Lambda_c, Λs\Lambda_s, an MMSE scalar, and a uniform dither yields the AWGN capacity 12log2(1+SNR)\tfrac12 \log_2(1 + \text{SNR}) exactly.