Paper
Part IErrors, Information and Channels

Error-Control Strategies and Performance

November 14, 202651 min readbeginner

Correct or resend? The chapter prices stop-and-wait, go-back-N and selective repeat, finds the residual error of a checked link, defines bit and word error rates and coding gain, sizes Monte Carlo runs with Wilson intervals, and budgets reliability in FIT, SDC and DUE.

Distance, Detection and Correction closed on a caution: a guarantee says what a code can do, not what a system should do with it. A code with d=4d = 4 can correct one error and detect two, or detect three and correct none, and the guarantee is silent on which a modem or memory controller should choose, what the choice costs, and how often an error that slips past every check still reaches the user.

Channels, Signals and Likelihoods built the binary symmetric channel BSC(p)\text{BSC}(p), which flips each bit independently with probability pp, and the Gaussian channel with BPSK, whose strength is the energy per information bit over the noise density, Eb/N0E_b/N_0. Distance, Detection and Correction priced detection through the undetected-error probability and the parity detection formula, and both return here as inputs.

Why Codes Exist, in its section Detect and Resend, or Correct, promised a proper comparison of the two strategies, and this chapter keeps it. It prices three retransmission protocols, finds the error rate that survives a checked link, outlines hybrid schemes, separates bit from word error rates, defines coding gain, sizes simulations with honest confidence intervals, and closes with the units of hardware reliability.

Every number in the chapter is recomputed by ch09_error_control_strategies_and_performance.py in the python/ folder of the companion repository ecc-book-lab, and the charts are drawn by ch09_charts.py in the same folder.

01.Two Ways to Spend Redundancy

A frame of n=1000n = 1000 bits sent over BSC(10−4)\text{BSC}(10^{-4}) arrives untouched with probability (1−10−4)1000=0.904833(1 - 10^{-4})^{1000} = 0.904833, so nearly one frame in ten carries a flipped bit. A designer can spend extra bits on that problem in two ways. One adds enough redundancy for the receiver to repair the flipped bits on its own, as the repetition code of Why Codes Exist did. The other adds only enough to notice the damage, 32 check bits per frame in this chapter's running example, and asks for the frame again.

Figure 1 draws both. Forward error correction, FEC, is a one-way pipeline whose decoder hands the user its best estimate, right or wrong. Automatic repeat request, ARQ, is a loop. The sender keeps a copy of each frame, the receiver runs a detector, and a short message on a return link, an acknowledgment (ACK) for a frame that passed or a negative acknowledgment (NAK) for one that failed, tells the sender whether to send it again.

Two ways to spend redundancy. In forward error correction the encoder adds redundancy, the data crosses a one-way channel, and the decoder corrects what it can and hands its best guess to the user. In automatic repeat request the encoder adds check bits and keeps a copy, the detector passes or fails each frame, and an ACK or NAK on a return link makes the sender resend a failed frame. Forward error correction, fixed delay, may deliver errors Automatic repeat request, needs a return link, delay varies Encoder Channel Decoder User Encoder Channel Detector User adds redundancy one way only corrects up to t gets best guess keeps a copy forward link pass or fail checked data ACK or NAK on the return link a NAK or a timeout triggers a resend
Figure 1. Forward error correction and automatic repeat request. FEC repairs errors with redundancy sent in advance and needs no return link, while ARQ only detects errors and asks for the frame again.

The two designs fail differently. A forward-correcting decoder that meets more errors than its code handles gives up or, worse, corrects to the wrong codeword. Its cost is fixed, the same redundancy and decoding delay on every word. ARQ pays only when something goes wrong, so on a quiet channel nearly all of its capacity carries data, but its delay varies, since a damaged frame waits a round trip for its second chance, and it needs a return link.

ARQ leans on the asymmetry proved in Distance, Detection and Correction. A code of minimum distance dd detects every pattern of up to d−1d - 1 errors but corrects only ⌊(d−1)/2⌋\lfloor (d - 1)/2 \rfloor, so the same redundancy reaches about twice as far when it only has to notice, while 30 bits spent on correction repair only three errors per frame, as Hybrid ARQ shows. Why 32 check bits make an undetected frame rare is a separate matter, settled by the 2−r2^{-r} count of The Residual Error of a Checked Link.

Where a return path is missing or too slow, as for a distant space probe, a broadcast, a disk sector or a memory cell, FEC is the only choice. Where the return path is cheap and delay can be tolerated, as on most cabled networks, ARQ with a strong check is hard to beat. The PCI Express 6.0 link of Why Codes Exist, which corrects common errors and retries rare ones, sits between the two.

02.Stop-and-Wait, Go-Back-N and Selective Repeat

The running example is a link that sends bits at R=1R = 1 Mbit/s in frames of n=1000n = 1000 bits, of which k=968k = 968 carry data and r=n−k=32r = n - k = 32 are check bits. One frame takes Tf=n/R=1T_f = n/R = 1 ms to send. The round trip Trt=10T_{rt} = 10 ms runs from the last bit of a frame leaving the sender to the arrival of its acknowledgment, which is counted as instant. The ratio a=Trt/Tf=10a = T_{rt}/T_f = 10 is the number of frame times the sender waits for news of a frame. The channel is BSC(p)\text{BSC}(p) with p=10−4p = 10^{-4}, and a frame is damaged when any of its bits flips, which by the complement rule has probability

P=1−(1−p)n,P = 1 - (1 - p)^n ,
(1)

0.095167 here. Throughout this section the sender always has frames waiting, acknowledgments are never lost, and the check catches every damaged frame, so the only cost of an error is time. The next section drops the last assumption.

Before any algebra, Figure 2 runs the three protocols for 16 frame slots on a toy link with a=3a = 3, with frame 2 damaged on its first try. Stop-and-wait idles until each acknowledgment arrives, so every attempt occupies 1+a=41 + a = 4 slots and the 16 slots carry frames 1, 2, 2 again and 3, delivering three. Go-back-N keeps sending, up to a window of W=4W = 4 unacknowledged frames. Its receiver accepts frames only in order, so it discards frames 3 to 5, and when the NAK for frame 2 returns the sender goes back and sends frames 2 to 5 again, losing four slots and delivering 12 frames. Selective repeat in its ideal form, whose sender no window limits, buffers frames 3 to 5 at the receiver and resends only frame 2, delivering 15. Held instead to a window of four sequence numbers counted from the oldest unacknowledged frame, it could not send frame 6 until frame 2 was acknowledged and would deliver 12.

Three ARQ protocols on a link whose round trip lasts three frame slots, with frame 2 hit by an error. Stop-and-wait sends one frame and waits for its ACK, so it delivers frames 1 to 3 in 16 slots. Go-back-N with a window of 4 keeps sending, discards frames 3 to 5 at the receiver, resends frames 2 to 5 when the NAK arrives, and delivers 12 frames. Selective repeat with no window limit on its sender buffers frames 3 to 5, resends only frame 2, and delivers 15 frames. Stop-and-wait, 3 frames delivered in 16 slots Go-back-N with a window of 4, 12 frames delivered in 16 slots Selective repeat with no window limit, 15 frames delivered in 16 slots 1 waiting for ACK 2 waiting for ACK 2 waiting for ACK 3 waiting for ACK 1 2 3 4 5 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 2 6 7 8 9 10 11 12 13 14 15 NAK returns after a round trip of 3 slots NAK returns after a round trip of 3 slots 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 time, in frame slots error detected discarded buffered resent
Figure 2. Stop-and-wait, go-back-N and ideal selective repeat over 16 slots, with a round trip of three slots and frame 2 damaged. They deliver 3, 12 and 15 frames. Selective repeat held to a window of four sequence numbers, counted from the oldest unacknowledged frame, would deliver 12.

Proof. Each formula follows from Equation 2 once SS is known. In stop-and-wait every attempt occupies the frame time plus the round trip, 1+a1 + a slots, and succeeds with probability 1−P1 - P, independently of earlier attempts. Detect and Resend, or Correct showed that a trial succeeding with probability qq takes 1/q1/q attempts on average, so SSW=(1+a)/(1−P)S_{\text{SW}} = (1 + a)/(1 - P).

Go-back-N never idles, so a frame that passes costs one slot, and one that fails costs its own slot and the W−1W - 1 discarded slots behind it, after which delivery starts over from the same frame. Averaging over the first attempt,

SGBN=(1−P)⋅1+P (W+SGBN).S_{\text{GBN}} = (1 - P) \cdot 1 + P \, (W + S_{\text{GBN}}) .
(6)

Collecting the SGBNS_{\text{GBN}} terms gives (1−P)SGBN=1−P+PW=1+(W−1)P(1 - P) S_{\text{GBN}} = 1 - P + PW = 1 + (W - 1)P, so SGBN=(1+(W−1)P)/(1−P)S_{\text{GBN}} = (1 + (W - 1)P)/(1 - P). Selective repeat loses only the failed frame's own slot, so the same reasoning with WW replaced by 1 gives SSR=1/(1−P)S_{\text{SR}} = 1/(1 - P). Substituting each SS into Equation 2 gives the three formulas. ■\blacksquare

The window W=1+aW = 1 + a is the smallest that keeps the sender busy, since a frame's acknowledgment arrives aa slots after the frame ends. Selective repeat pays in memory. One failure makes the receiver hold the 1+a1 + a or so frames sent behind it until the gap fills, and each further failure of the same frame adds as many again, so a real, bounded buffer stalls the sender and costs throughput.

Table 1. Slots per delivered frame, efficiency and goodput of the three protocols for , , and , so that

ProtocolSlots per delivered frame SSEfficiency η\etaGoodput (kbit/s)
Stop-and-wait12.15690.07962579.6
Go-back-N, W=11W = 112.156940.44878448.8
Selective repeat1.105180.87588875.9

Source: reproduced by ch09_error_control_strategies_and_performance.py.

Table 1 puts numbers on the link. Stop-and-wait spends 11 slots per attempt and averages 1.10518 attempts, so it keeps under 8% of the raw rate. Its trouble is idleness, not errors, since even with P=0P = 0 it would reach only kn⋅11+a=0.088\frac{k}{n} \cdot \frac{1}{1 + a} = 0.088. Go-back-N's denominator, 1+10×0.095167=1.951671 + 10 \times 0.095167 = 1.95167, charges 11 slots per failure, and it reaches 0.44878, 5.64 times stop-and-wait. Selective repeat loses only the damaged frames and reaches 0.87588, a further factor of 1.95. A simulation of 200,000 frames per protocol averages 12.160, 2.149 and 1.105 slots per frame. It charges each failure as the proof does, so it checks only the averaging. Lin, Costello and Miller survey these protocols and their refinements [1].

Figure 3 sweeps pp from 10−610^{-6} to 10−210^{-2}. When frames rarely fail, go-back-N and selective repeat both approach k/n=0.968k/n = 0.968, while stop-and-wait stays below its ceiling. Once pp passes about 10−310^{-3} a 1000-bit frame is more often damaged than not, and all three collapse.

Throughput efficiency against the bit error probability p, from 0.000001 to 0.01 on a log scale, for 1000-bit frames with 32 check bits on a link where the round trip lasts ten frame times. At p = 0.0001, marked by a dashed vertical line, stop-and-wait reaches 0.080, go-back-N 0.449 and selective repeat 0.876. Stop-and-wait never rises above 0.088. A type-I hybrid scheme that corrects up to three errors per frame holds near 0.938 until p passes 0.001, then falls, while the three plain protocols fall toward zero above about p = 0.001. bit error probability p, log scale throughput efficiency 0 0.2 0.4 0.6 0.8 1.0 0.000001 0.00001 0.0001 0.001 0.01 stop-and-wait, 0.080 at p = 0.0001 go-back-N, 0.449 at p = 0.0001 selective repeat, 0.876 at p = 0.0001 type-I hybrid ARQ, 0.938 at p = 0.0001
Figure 3. Throughput efficiency of the three protocols and of a type-I hybrid scheme, for 1000-bit frames on a link whose round trip lasts ten frame times. The plain protocols collapse once frames are usually damaged, while the hybrid scheme holds its rate until errors outrun its correcting power. Data: computed by ch09_charts.py in the companion repository.

Throughput hides the cost users notice first, delay. Under stop-and-wait each retransmission adds the frame time plus the round trip, (1+a)Tf=11(1 + a) T_f = 11 ms on this link. The mean number of retries is 1/(1−P)−1=P/(1−P)=0.105181/(1 - P) - 1 = P/(1 - P) = 0.10518, so the mean extra delay is only 1.16 ms, but it comes in lumps. A frame needs at least jj retries exactly when its first jj attempts fail, with probability PjP^j, and P2=0.0090568P^2 = 0.0090568, so one frame in 110 waits at least 22 ms longer than a clean one. Those figures count a frame's own retries only. The faster protocols release frames in order, so an intact frame also waits behind any damaged one ahead of it. Simulated over 400,000 slots of this link, selective repeat averages 5.68 ms of extra delay, with one frame in 58 waiting at least 22 ms, and go-back-N, which resends the frames behind a failure too, has one frame in 3 waiting that long. Its mean needs no simulation. Each resend trails the previous attempt by 1+a1 + a slots, and a frame is sent SGBNS_{\text{GBN}} times on average, so the mean extra delay is (1+a)(SGBN−1)Tf=12.7(1 + a)(S_{\text{GBN}} - 1) T_f = 12.7 ms, which the simulation matches. A voice call must budget for that tail, not the mean. Forward error correction has no such tail, which is a main reason real-time links prefer it.

A real check lets some damaged frames through as correct. Take an 8-bit word protected by single parity on BSC(0.01)\text{BSC}(0.01). Each transmission ends in one of three ways, drawn in Figure 4. With probability c=0.998=0.922745c = 0.99^8 = 0.922745 no bit flips and the word is accepted correctly. With probability α\alpha an odd number of bits flip, the check raises the alarm, and the sender tries again. With probability ss an even number of bits, at least two, flip and the receiver accepts a wrong word, called here a slip. The parity detection formula of Single Parity gives the alarm probability,

α=1−(1−2p)n2,\alpha = \frac{1 - (1 - 2p)^n}{2} ,
(7)

which is 0.074618 here since 0.988=0.8507630.98^8 = 0.850763, and the slip probability is the undetected-error probability of Detecting Errors,

s=∑i=1nAi pi(1−p)n−i=∑i≥2i even(ni)pi(1−p)n−i,s = \sum_{i=1}^{n} A_i \, p^i (1 - p)^{n - i} = \sum_{\substack{i \ge 2 \\ i \text{ even}}} \binom{n}{i} p^i (1 - p)^{n - i} ,
(8)

where AiA_i counts the codewords of weight ii, which for the even-weight code are all (ni)\binom{n}{i} words of each even weight. The three outcomes exhaust the possibilities, so s=1−c−α=0.0026368s = 1 - c - \alpha = 0.0026368, and the companion script confirms all three by listing the 256 error patterns of 8 bits.

The three outcomes of one transmission of an 8-bit word protected by single parity, at bit error probability 0.01. No flips, with probability 0.922745, is accepted and correct. An even number of flips, 2 or more, with probability 0.0026368, passes the check and is accepted wrong. An odd number of flips, with probability 0.074618, raises the alarm and the same frame is sent again, so a frame takes 1.080635 transmissions on average and 0.0028494 of accepted frames are wrong. one transmission 8 bits, p = 0.01 no flips even number, 2 or more odd number of flips 0.922745 0.0026368 0.074618 accept accept alarm correct wrong, undetected resend the frame send the same frame again, 1.080635 transmissions per frame on average wrong among accepted: 0.0026368 / 0.925382 = 0.0028494
Figure 4. The three outcomes of a transmission under single parity. Only an alarm leads to a resend, so the accepted words are the clean ones and the slips in their original proportion.

Proof. Condition on the first transmission. A clean transmission ends with a correct frame and a slip with a wrong one. An alarm starts the process again, and because the channel has no memory the fresh start has the same chance PresP_{\text{res}} of ending wrong. So Pres=s+αPresP_{\text{res}} = s + \alpha P_{\text{res}}, which rearranges to Pres=s/(1−α)P_{\text{res}} = s/(1 - \alpha), and 1−α=c+s1 - \alpha = c + s. Likewise the first transmission counts once and an alarm adds a fresh process, so E[X]=1+αE[X]E[X] = 1 + \alpha E[X], giving E[X]=1/(1−α)E[X] = 1/(1 - \alpha). ■\blacksquare

Retransmission never repairs a slip, it only discards alarms, so the accepted frames are the clean ones and the slipped ones in their original ratio of cc to ss. Only a better check lowers ss.

Table 2. Single parity under ARQ, for an 8-bit word at and a 1000-bit frame at

Quantityn=8n = 8, p=0.01p = 0.01n=1000n = 1000, p=10−4p = 10^{-4}
(1−2p)n(1 - 2p)^n0.8507630.818714
Clean, c=(1−p)nc = (1 - p)^n0.9227450.904833
Alarm, α\alpha0.0746180.090643
Slip, ss0.00263680.0045243
Transmissions, E[X]E[X]1.0806351.099678
Residual, PresP_{\text{res}}0.00284940.0049753

Source: reproduced by ch09_error_control_strategies_and_performance.py.

For the 8-bit word, Table 2 shows that ARQ costs about 8% more transmissions and leaves 0.0028494 of accepted words wrong, against the 1−c=0.0772551 - c = 0.077255 wrong with no check at all. The 1000-bit frame shows why no real link relies on one parity bit. The 0.0475 of damaged frames with an even number of errors slip, so one accepted frame in 201 is wrong. A link sending 1000 frames a second accepts about 909 of them, so about 4.5 wrong frames get through every second.

Real links use a cyclic redundancy check, a CRC, with r=16r = 16 or r=32r = 32 check bits, built in Part IV. A heuristic gives a rough residual. Suppose the damage left a random error pattern, every one of the 2n−12^n - 1 nonzero patterns equally likely. A CRC is closed under XOR, so by the argument of Detecting Errors the patterns that escape are the 2k−12^k - 1 nonzero codewords, and the escape probability is

2k−12n−1≈2k2n=2−r.\frac{2^k - 1}{2^n - 1} \approx \frac{2^k}{2^n} = 2^{-r} .
(10)

With r=32r = 32, 2−32=2.33×10−102^{-32} = 2.33 \times 10^{-10}, and the chance that a frame is both damaged and undetected is about P⋅2−32=2.22×10−11P \cdot 2^{-32} = 2.22 \times 10^{-11}. At 1000 frames a second, one undetected frame then arrives on average every 1.43 years, against 4.5 every second for single parity.

04.Hybrid ARQ

Combining forward correction with retransmission is called hybrid ARQ. In type-I hybrid ARQ every frame carries a correcting code and a CRC. The receiver corrects what it can, checks the result with the CRC, and asks for a resend only when the correction has failed. Give the 1000-bit frame 938 data bits, 32 CRC bits and 30 bits of a code that corrects any 3 errors. A BCH code of Part V over a field of 2m2^m elements with m=10m = 10 spends mt=30mt = 30 check bits to correct t=3t = 3 errors, so the frame efficiency drops from 0.968 to 0.938. If the decoder succeeds whenever a frame holds at most 3 errors and the CRC catches every failure, a resend is needed only when 4 or more bits flip, with probability

Pf=∑i=41000(1000i)pi(1−p)1000−i,P_f = \sum_{i=4}^{1000} \binom{1000}{i} p^i (1 - p)^{1000 - i} ,
(11)

and with selective repeat the efficiency is ηH=(1−Pf)×0.938\eta_{\text{H}} = (1 - P_f) \times 0.938. At p=10−4p = 10^{-4}, Pf=3.8×10−6P_f = 3.8 \times 10^{-6} and ηH=0.93800\eta_{\text{H}} = 0.93800, against 0.87588 for plain selective repeat. At very low error rates the 30 correcting bits are dead weight, and plain selective repeat wins below about p=3.1×10−5p = 3.1 \times 10^{-5}.

Type-II hybrid ARQ, or incremental redundancy, is thriftier. The first transmission carries data and a CRC only. If it fails, the sender sends extra parity bits that, together with the first transmission, form a stronger code of lower rate. A third variant, Chase combining, resends the same frame and adds the soft received values of the copies, the soft repetition code of Hard and Soft Decisions spread over time. Both draw on Part VI, Soft Decisions and Concatenation, and run in the 5G NR systems of Part XII.

05.Bit and Word Error Rates

Send a 4-bit word with no code over BSC(0.01)\text{BSC}(0.01) and let JJ count its wrong bits. JJ follows the binomial distribution of Counting Errors with the Binomial Distribution, P(J=j)=(4j)(0.01)j(0.99)4−jP(J = j) = \binom{4}{j} (0.01)^j (0.99)^{4 - j}, and Table 3 lists its five values.

Table 3. The number of wrong bits in a 4-bit word sent uncoded over

Wrong bits jjPatterns (4j)\binom{4}{j}P(J=j)P(J = j)
010.96059601
140.03881196
260.00058806
343.96×10−63.96 \times 10^{-6}
4110−810^{-8}

Source: reproduced by ch09_error_control_strategies_and_performance.py.

Two numbers summarize the table. The word is wrong whenever J≥1J \ge 1, with probability 1−0.96059601=0.039403991 - 0.96059601 = 0.03940399. The mean number of wrong bits is E[J]=4×0.01=0.04E[J] = 4 \times 0.01 = 0.04, by the binomial mean of Expectation and Variance, so the fraction of wrong bits is 0.04/4=0.010.04/4 = 0.01, the channel's pp. A system that discards a packet with one bad bit cares about the first number, and a voice stream that tolerates scattered bad bits cares about the second.

Proof. Write 1{J≥1}\mathbf{1}\{J \ge 1\} for the indicator that equals 1 when J≥1J \ge 1 and 0 otherwise. Since JJ is a whole number from 0 to kk, 1{J≥1}≤J≤k 1{J≥1}\mathbf{1}\{J \ge 1\} \le J \le k \, \mathbf{1}\{J \ge 1\}, as all three are 0 when J=0J = 0 and 1≤J≤k1 \le J \le k otherwise. Taking expectations, with E[1{J≥1}]=P(J≥1)=PwE[\mathbf{1}\{J \ge 1\}] = P(J \ge 1) = P_w, gives Pw≤E[J]≤kPwP_w \le E[J] \le k P_w, and dividing by kk gives the result. ■\blacksquare

For the uncoded 4-bit word the bounds read 0.0098510≤0.01≤0.039403990.0098510 \le 0.01 \le 0.03940399. The lower bound is nearly reached because a wrong word almost always has one wrong bit. The upper bound is approached by decoders that fail badly, replacing the sent word with a distant codeword. A fair comparison of two codes therefore states which rate it uses.

For a coded scheme the word error rate follows from the correction bound of Correcting Errors. A decoder that corrects every pattern of up to tt errors in nn bits, and nothing more, fails exactly when more than tt bits flip. There are (ni)\binom{n}{i} patterns of exactly ii flips, each with probability pi(1−p)n−ip^i (1 - p)^{n - i}, and summing over every ii beyond tt gives the key result.

For R3R_3 at p=0.01p = 0.01, t=1t = 1 and the sum has two terms, 3p2(1−p)=2.97×10−43p^2 (1 - p) = 2.97 \times 10^{-4} and p3=10−6p^3 = 10^{-6}, so Pw=2.98×10−4P_w = 2.98 \times 10^{-4}. For R5R_5, t=2t = 2 and the three terms 10p3(1−p)2=9.801×10−610 p^3 (1 - p)^2 = 9.801 \times 10^{-6}, 5p4(1−p)=4.95×10−85 p^4 (1 - p) = 4.95 \times 10^{-8} and p5=10−10p^5 = 10^{-10} give Pw=9.8506×10−6P_w = 9.8506 \times 10^{-6}, 30.3 times smaller. The first term carries almost everything, because each extra flip multiplies a term by roughly pp. A repetition code carries one data bit, so k=1k = 1 and Pb=PwP_b = P_w, and the companion script confirms both sums by listing all 8 and all 32 error patterns.

06.Coding Gain

The repetition codes just cut the error rate, but by sending three or five pulses per data bit. On a power-limited channel the fair question is whether, at the same energy per data bit, the code beats sending the bit plainly. Fix a target bit error rate of 10−610^{-6} on the Gaussian channel with BPSK. The Gaussian Channel and BPSK showed that an uncoded bit is wrong with probability Q(2Eb/N0)Q(\sqrt{2E_b/N_0}), so the target needs Q(x)=10−6Q(x) = 10^{-6}, which holds at x=4.7534x = 4.7534, and then Eb/N0=x2/2=11.2975E_b/N_0 = x^2/2 = 11.2975, or 10.530 dB.

Hard-decision R3R_3 sends each bit as three pulses of energy Es=RcEb=Eb/3E_s = R_c E_b = E_b/3, as Energy per Bit and the Decibel showed, and decodes by majority. Each pulse flips with probability p=Q(2Es/N0)p = Q(\sqrt{2E_s/N_0}), and by Equation 13 the decoded bit is wrong with probability 3p2(1−p)+p33p^2 (1 - p) + p^3. Setting that to 10−610^{-6} gives p=5.7746×10−4p = 5.7746 \times 10^{-4}, then Q(x)=pQ(x) = p gives x=3.2498x = 3.2498, so Es/N0=x2/2E_s/N_0 = x^2/2 is 7.227 dB, and Eb/N0E_b/N_0 is 10log⁡103=4.77110 \log_{10} 3 = 4.771 dB higher, at 11.998 dB. The code needs 1.468 dB more energy per bit than no code, and Table 4 repeats the computation for R5R_5.

Table 4. Energy needed for a bit error rate of with BPSK, uncoded and with hard-decision repetition codes

SchemeFlip probability ppxx with Q(x)=pQ(x) = pEs/N0E_s/N_0 (dB)Eb/N0E_b/N_0 (dB)Gain (dB)
Uncoded BPSK10−610^{-6}4.753410.53010.5300
Hard R3R_35.7746×10−45.7746 \times 10^{-4}3.24987.22711.998−1.468-1.468
Hard R5R_54.6524×10−34.6524 \times 10^{-3}2.60065.29112.281−1.751-1.751

Source: reproduced by ch09_error_control_strategies_and_performance.py.

Figure 5 plots the three curves. Both repetition curves sit right of the uncoded one at every useful error rate, and at 12 dB hard R3R_3 has only just reached 9.9×10−79.9 \times 10^{-7}. Repetition divides a bit's energy among nn pulses, a loss of 4.771 dB for R3R_3 and 6.990 dB for R5R_5, and hard majority voting wins back less than that. Hard and Soft Decisions found a gain of −1.441-1.441 dB for R3R_3 at 10−510^{-5}, and for R5R_5 it is −1.718-1.718 dB there and −1.751-1.751 dB at 10−610^{-6}, so the longer code loses more.

Bit error rate on a log scale against the energy per information bit Eb/N0 from 0 to 14 dB, for uncoded BPSK, which soft-decision R3 matches exactly, and for hard-decision R3 and R5. A dashed line marks a bit error rate of one in a million, which uncoded BPSK reaches at 10.53 dB, hard-decision R3 at 12.00 dB and hard-decision R5 at 12.28 dB, so both repetition curves lie to the right of the uncoded one and their coding gain is negative. energy per information bit Eb/N0, dB bit error rate, log scale 1e-9 1e-6 0.001 1 0 2 4 6 8 10 12 14 uncoded BPSK and soft-decision R3, 10.53 dB hard-decision R3, 12.00 dB hard-decision R5, 12.28 dB
Figure 5. Bit error rate of uncoded BPSK, which soft-decision R3 matches, and of hard-decision R3 and R5. At one error in a million both repetition codes need more energy per bit than no code at all. Data: computed by ch09_charts.py in the companion repository.

The loss grows as the target falls, toward a limit set by exponents. Write γ=Eb/N0\gamma = E_b/N_0 as a plain ratio, not in decibels. A code of rate RcR_c gives each pulse the energy Es=RcEbE_s = R_c E_b, so a pulse flips with probability p=Q(x)p = Q(x) at x=2Rcγx = \sqrt{2 R_c \gamma}, where x2/2=Rcγx^2/2 = R_c \gamma. Uncoded BPSK is the case Rc=1R_c = 1.

Proof. Assume γ≥1/(2Rc)\gamma \ge 1/(2R_c), so that x≥1x \ge 1, and note that p=Q(x)≤12p = Q(x) \le \tfrac12. The proof bounds the coded bit error rate PbP_b on both sides with the bounds on the Q-function that Probability for Coding proves in The Gaussian and the Q-Function.

For the upper bound, Pb≤PwP_b \le P_w by Equation 12. In each term of Equation 13, pi≤pt+1p^i \le p^{t+1} since i≥t+1i \ge t + 1, and (1−p)n−i≤1(1 - p)^{n-i} \le 1, so Pw≤pt+1∑i(ni)≤2npt+1P_w \le p^{t+1} \sum_{i} \binom{n}{i} \le 2^n p^{t+1}. The bound Q(x)≤12e−x2/2Q(x) \le \tfrac12 e^{-x^2/2} gives p≤12e−Rcγp \le \tfrac12 e^{-R_c \gamma}, hence

Pb≤2 n−t−1 e−(t+1)Rcγ.P_b \le 2^{\,n - t - 1} \, e^{-(t+1) R_c \gamma} .

For the lower bound, Pb≥Pw/kP_b \ge P_w/k, and PwP_w is at least its term with i=t+1i = t + 1, which is at least pt+1(1−p)n−t−1p^{t+1}(1 - p)^{n-t-1}, and (1−p)n−t−1≥2−n(1 - p)^{n-t-1} \ge 2^{-n} because p≤12p \le \tfrac12. The same theorem gives Q(x)>x1+x2 ϕ(x)Q(x) > \frac{x}{1+x^2}\,\phi(x) with ϕ(x)=e−x2/2/2π\phi(x) = e^{-x^2/2}/\sqrt{2\pi}. For x≥1x \ge 1, 1+x2≤2x21 + x^2 \le 2x^2, so x1+x2≥12x\frac{x}{1+x^2} \ge \frac{1}{2x}, and with 2x2π=4πRcγ2x\sqrt{2\pi} = 4\sqrt{\pi R_c \gamma},

p>e−Rcγ4πRcγ,Pb>1k 2n(e−Rcγ4πRcγ)t+1.p > \frac{e^{-R_c \gamma}}{4\sqrt{\pi R_c \gamma}} , \qquad P_b > \frac{1}{k \, 2^n} \left( \frac{e^{-R_c \gamma}}{4\sqrt{\pi R_c \gamma}} \right)^{t+1} .

Taking natural logarithms of the two bounds,

−(t+1)Rcγ−c1−t+12ln⁡(πRcγ)<ln⁡Pb≤−(t+1)Rcγ+c2,-(t+1) R_c \gamma - c_1 - \tfrac{t+1}{2} \ln(\pi R_c \gamma) < \ln P_b \le -(t+1) R_c \gamma + c_2 ,

with c1=ln⁡k+nln⁡2+(t+1)ln⁡4c_1 = \ln k + n \ln 2 + (t + 1) \ln 4 and c2=(n−t−1)ln⁡2c_2 = (n - t - 1) \ln 2, neither of which depends on γ\gamma. So ln⁡Pb=−(t+1)Rcγ+D(γ)\ln P_b = -(t+1) R_c \gamma + D(\gamma), where ∣D(γ)∣|D(\gamma)| is at most a constant plus a constant times ln⁡γ\ln \gamma, and D(γ)/γ→0D(\gamma)/\gamma \to 0 as γ→∞\gamma \to \infty. The uncoded case, Rc=1R_c = 1, t=0t = 0 and n=k=1n = k = 1, reads ln⁡Pu=−γ+Du(γ)\ln P_u = -\gamma + D_u(\gamma) with Du(γ)/γ→0D_u(\gamma)/\gamma \to 0 in the same way.

Let γu\gamma_u and γc\gamma_c be the smallest energies at which the uncoded and coded rates reach a target ε\varepsilon. Both grow without bound as ε→0\varepsilon \to 0, since over any bounded range of γ\gamma each rate stays above a fixed positive number. Setting ln⁡Pu(γu)=ln⁡Pb(γc)=ln⁡ε\ln P_u(\gamma_u) = \ln P_b(\gamma_c) = \ln \varepsilon and dividing by γc\gamma_c,

γuγc(1−Du(γu)γu)=(t+1)Rc−D(γc)γc.\frac{\gamma_u}{\gamma_c} \left( 1 - \frac{D_u(\gamma_u)}{\gamma_u} \right) = (t+1) R_c - \frac{D(\gamma_c)}{\gamma_c} .

Both fractions D/γD/\gamma tend to zero, so γu/γc→(t+1)Rc\gamma_u/\gamma_c \to (t+1) R_c, and the gain 10log⁡10(γu/γc)10 \log_{10}(\gamma_u/\gamma_c) tends to Equation 15. ■\blacksquare

For RnR_n with odd n=2t+1n = 2t + 1, Rc(t+1)=(t+1)/(2t+1)R_c (t + 1) = (t + 1)/(2t + 1), which is 2/32/3 for R3R_3 and 3/53/5 for R5R_5, giving −1.761-1.761 dB and −2.218-2.218 dB, and it falls toward 12\tfrac12, or −3.010-3.010 dB, as nn grows. The finite-target gains of R3R_3 creep toward −1.761-1.761 dB as the target falls, slowly, because D(γ)/γD(\gamma)/\gamma fades only like ln⁡γ/γ\ln \gamma / \gamma. A code gains only when Rc(t+1)>1R_c (t + 1) > 1, which repetition can never give, and the codes of Part II onward reach it by keeping a high rate while correcting several errors.

Soft decisions lift repetition, though only back to zero. Add the three received values instead of voting on their signs. Each value is ±Es\pm\sqrt{E_s} plus Gaussian noise of variance N0/2N_0/2, so the sum has mean ±3Es\pm 3\sqrt{E_s} and, since independent variances add, variance 3N0/23N_0/2. It lands on the wrong side of zero with probability Q(3Es/3N0/2)=Q(6Es/N0)Q\bigl(3\sqrt{E_s}/\sqrt{3N_0/2}\bigr) = Q(\sqrt{6E_s/N_0}), and since 3Es=Eb3E_s = E_b that is Q(2Eb/N0)Q(\sqrt{2E_b/N_0}), the uncoded error rate exactly. Soft R3R_3 has a coding gain of exactly 0 dB at every target, as Hard and Soft Decisions found, and a simulation of 200,000 bits at 2 dB agrees. A soft decoder gathers back all the energy repetition spread out, while a hard decoder throws information away at the threshold.

How much gain is there to find? By Capacity and Shannon's Theorem a rate one half code with BPSK cannot work below 0.19 dB with soft decisions or 1.77 dB with hard ones. Uncoded BPSK needs 10.530 dB for 10−610^{-6}, so such a code could save up to about 10.530−0.19=10.3410.530 - 0.19 = 10.34 dB soft, or 8.76 dB hard. The codes of Parts VII to X close much of that gap.

07.Measuring Error Rates by Simulation

Most real decoders have no formula like Equation 13, so their error rate is measured by counting failures among random words sent through a simulated channel. Take R3R_3 on BSC(0.1)\text{BSC}(0.1), where the exact answer is known, Pw=3(0.1)2(0.9)+(0.1)3=0.028P_w = 3(0.1)^2(0.9) + (0.1)^3 = 0.028. The companion script sends 10,000 words through a seeded random channel and sees K=266K = 266 failures, an estimate of 0.0266. Figure 6 follows the estimate as trials accumulate, 0.01 after 100, 0.02 after 300, 0.022 after 1000 and 0.026333 after 3000. The question is how far to trust any one of these numbers.

Running estimate of the word error rate of R3 on a binary symmetric channel with p = 0.1, after each number of trials from 100 to 10000 on a log scale, with its 95 percent Wilson interval shaded around it and the exact value 0.028 as a dashed line. After 100 trials the estimate is 0.01 and the interval runs from 0.0018 to 0.0545. After 10000 trials the estimate is 0.0266 and the interval has narrowed to 0.0236 to 0.0299, which contains the exact value. number of trials N, log scale estimated word error rate 0 0.01 0.02 0.03 0.04 0.05 0.06 100 300 1000 3000 10000 running estimate K/N 95% Wilson interval exact value 0.028
Figure 6. Running estimate of the word error rate of R3 at a flip probability of 0.1, with its 95% Wilson interval shaded. The interval narrows as the trials accumulate and ends around the exact value 0.028. Data: computed by ch09_charts.py in the companion repository.

Proof. KK counts failures in NN independent trials, so it is binomial, with E[K]=NPeE[K] = N P_e and Var⁡(K)=NPe(1−Pe)\operatorname{Var}(K) = N P_e (1 - P_e) by Expectation and Variance. Dividing by NN scales the mean by 1/N1/N and, by the rule Var⁡(cX)=c2Var⁡(X)\operatorname{Var}(cX) = c^2 \operatorname{Var}(X), the variance by 1/N21/N^2. ■\blacksquare

The estimator is unbiased, and its standard error, Pe(1−Pe)/N\sqrt{P_e (1 - P_e)/N}, shrinks as 1/N1/\sqrt{N}, so halving the error bar takes four times the trials. For the run above the true standard error is 0.028×0.972/10000=0.0016497\sqrt{0.028 \times 0.972/10000} = 0.0016497, and 0.0266 sits 0.85 standard errors below the truth. In a real simulation PeP_e is unknown, and putting P^e\hat{P}_e in its place estimates the standard error as 0.0016091.

By the central limit theorem of The Gaussian and the Q-Function, P^e\hat{P}_e is close to Gaussian for large NN, so it lands within zz standard errors of PeP_e with probability about 1−2Q(z)1 - 2Q(z), and z=1.96z = 1.96 makes that 0.95. Turning the statement around, with the estimated standard error, gives the textbook interval.

For the run above the half-width is 1.96×0.0016091=0.00315391.96 \times 0.0016091 = 0.0031539, and the interval runs from 0.023446 to 0.029754, which contains 0.028. The Wald interval breaks down where error-rate simulation lives, at small KK. With K=0K = 0 it shrinks to the point 0, claiming certainty from silence, and with a few failures its lower end can drop below zero.

The repair, due to Wilson [2], keeps the unknown PeP_e inside the standard error. It collects every value of PeP_e for which the observed P^e\hat{P}_e lies within zz true standard errors, ∣P^e−Pe∣≤zPe(1−Pe)/N|\hat{P}_e - P_e| \le z \sqrt{P_e (1 - P_e)/N}. The endpoints are where equality holds, and squaring gives

(P^e−Pe)2=z2N Pe(1−Pe).(\hat{P}_e - P_e)^2 = \frac{z^2}{N} \, P_e (1 - P_e) .
(19)

Expanding both sides and collecting powers of PeP_e gives a quadratic,

(1+z2N)Pe2−(2P^e+z2N)Pe+P^e2=0.\Bigl( 1 + \frac{z^2}{N} \Bigr) P_e^2 - \Bigl( 2\hat{P}_e + \frac{z^2}{N} \Bigr) P_e + \hat{P}_e^2 = 0 .
(20)

In the quadratic formula, the discriminant (2P^e+z2/N)2−4(1+z2/N)P^e2(2\hat{P}_e + z^2/N)^2 - 4(1 + z^2/N)\hat{P}_e^2 simplifies to 4z2P^e(1−P^e)/N+z4/N24 z^2 \hat{P}_e (1 - \hat{P}_e)/N + z^4/N^2, and halving top and bottom leaves the Wilson interval.

For the run above the Wilson interval runs from 0.023623 to 0.029940. Its center, 0.026782, sits a little above P^e\hat{P}_e, pulled toward one half by the z2/2Nz^2/2N terms, most strongly when KK is small. Agresti and Coull found the score interval far more dependable than the Wald interval at small counts [3], and Jeruchim surveys bit error rate estimation in communication simulations [4]. Table 5 collects the numbers.

Table 5. A Monte Carlo estimate of the word error rate of on from 10,000 seeded trials, with its 95% intervals

QuantityValue
Trials NN10,000
Failures KK266
Estimate P^e\hat{P}_e0.0266
Estimated standard error0.0016091
True standard error0.0016497
Wald interval0.023446 to 0.029754
Wilson interval0.023623 to 0.029940
Exact PwP_w0.028

Source: reproduced by ch09_error_control_strategies_and_performance.py.

The 95% does not say that PeP_e, a fixed number, has a 95% chance of lying in this particular interval. It says that the recipe, repeated over many experiments, produces intervals that contain PeP_e about 95% of the time. Figure 7 runs it at five flip probabilities with 10,000 trials each. At p=0.02p = 0.02 only 9 words fail, against an exact rate of 0.001184, and at p=0.3p = 0.3, 2155 fail against 0.216. Every interval contains its exact value.

Monte Carlo estimates of the word error rate of R3 at p = 0.02, 0.05, 0.1, 0.2 and 0.3, each from 10000 seeded trials and drawn with its 95 percent Wilson interval, over the exact rate as a dashed curve, on log scales. In turn, at p = 0.02 the estimate is 9/10000 against the exact 0.001184, at p = 0.05 the estimate is 78/10000 against the exact 0.00725, at p = 0.1 the estimate is 270/10000 against the exact 0.028, at p = 0.2 the estimate is 1064/10000 against the exact 0.104, at p = 0.3 the estimate is 2155/10000 against the exact 0.216. Every interval contains the exact value, and the intervals are widest, relative to the rate, where the rate is smallest. bit error probability p, log scale word error rate of R3, log scale 0.0001 0.001 0.01 0.1 1 0.01 0.02 0.05 0.1 0.2 0.5 K = 9 K = 78 K = 270 K = 1064 K = 2155 exact word error rate estimate from 10000 trials 95% Wilson interval
Figure 7. Monte Carlo estimates of the word error rate of R3 at five flip probabilities, 10,000 trials each, with 95% Wilson intervals over the exact rate. Small error rates give few failures and relatively wide intervals. Each point is its own seeded run, so the point at counts 270 failures where the run in the text counted 266, a difference that comes from sampling alone and sits well inside either interval. Data: computed by ch09_charts.py in the companion repository.

The width also says how many trials a simulation needs. Aim for a relative half-width rr, an interval of P^e±rPe\hat{P}_e \pm r P_e. The Gaussian half-width is zPe(1−Pe)/Nz \sqrt{P_e (1 - P_e)/N}, and requiring it to be at most rPer P_e, then squaring and solving for NN, gives the trial count.

NPeN P_e is the expected number of failures, so Equation 22 asks for about 96 of them, and with 100 failures the relative half-width is about z/100=0.196z/\sqrt{100} = 0.196. Table 6 checks the rule without the Gaussian approximation. For each rate it takes N=⌈100/Pe⌉N = \lceil 100/P_e \rceil trials and sums the exact binomial probabilities of every count KK that puts P^e\hat{P}_e within 20% of PeP_e.

Table 6. Trials needed for a 95% interval within 20% of the true rate, and the exact chance, boundary counts included, that trials deliver it

Rate PeP_eTrials for r=0.2r = 0.2⌈100/Pe⌉\lceil 100/P_e \rceilExact chance within 20%
0.0283,3343,5720.958
10−310^{-3}95,944100,0000.960
10−610^{-6}9.604×1079.604 \times 10^{7}10810^{8}0.960

Source: reproduced by ch09_error_control_strategies_and_performance.py.

The exact chance is 0.95767 in the first row. In the other two NPe=100N P_e = 100 exactly, so the counts K=80K = 80 and K=120K = 120 sit on the 20% boundary, and the 0.960 includes them. Without them it is 0.949, just under 0.95, so the rule delivers about what it promises, with no margin to spare. Of 400 seeded runs of 3,572 trials at Pe=0.028P_e = 0.028, 381 landed within 20%. Chebyshev's inequality from The Law of Large Numbers gives a guarantee with no Gaussian approximation, P(∣P^e−Pe∣≥rPe)≤Var⁡(P^e)/(rPe)2=(1−Pe)/(Nr2Pe)P(|\hat{P}_e - P_e| \ge r P_e) \le \operatorname{Var}(\hat{P}_e)/(r P_e)^2 = (1 - P_e)/(N r^2 P_e). Making the right side 0.05 needs N≥(1−Pe)/(0.05 r2Pe)N \ge (1 - P_e)/(0.05 \, r^2 P_e), which rounds up to 17,358 trials at Pe=0.028P_e = 0.028, 5.2 times the Gaussian count, because 1/(0.05 r2)=5001/(0.05 \, r^2) = 500 replaces (z/r)2=96.04(z/r)^2 = 96.04.

A rate of 10−610^{-6} needs about 10810^8 trials, and a storage system promising 10−1510^{-15} is far beyond direct simulation. Such rates are reached by analysis, or by importance sampling, which makes failures artificially common and corrects for the distortion, as Jeruchim's survey describes.

08.Reliability in FIT, SDC and DUE

Memories and processors face the same trade-off with no sender to ask, since a flipped stored bit is wrong in the only copy. Suppose one server's memory suffers bit flips at 40,000 FIT, where a FIT is one failure in 10910^9 device-hours, so 40,000 FIT is 4×10−54 \times 10^{-5} flips per hour. These are the single-event upsets of Fault Models for Memory, caused by alpha particles from packaging materials [5] and by cosmic-ray particles [6], and Baumann reviews how their rate depends on the process technology [7].

Figure 8 follows one flip to its end: masked if nothing reads it, fixed if the code corrects it, a stopped program if a check notices but cannot correct it, and wrong data flowing on if no check notices.

What becomes of a fault that flips a stored bit. If the value is never read, the fault is masked. If it is read and no check notices it, the result is a silent data corruption, SDC. If a check notices it and the code can correct it, the error is corrected and logged. If a check notices it but the code cannot correct it, the result is a detected unrecoverable error, DUE. a fault flips a stored bit is the value read later? does a check notice it? can the code correct it? yes yes yes no no no masked SDC, silent data corruption DUE, detected unrecoverable error corrected overwritten or never read, no effect wrong answer, and nothing signals it machine check, the system stops fixed and logged, work continues
Figure 8. The fate of a flipped bit. Masked and corrected faults do no harm, a DUE stops the work, and an SDC lets wrong data through unnoticed.

The vocabulary follows Mukherjee, Emer and Reinhardt [8], and it maps onto ARQ. A DUE is an alarm and an SDC is a slip, except that a memory cannot resend, so every alarm costs a crash or a recovery from another copy. Designers accept a higher DUE rate to keep the SDC rate tiny, because a DUE stops the work while an SDC lets wrong answers spread.

Suppose failures arrive at a constant rate of λ\lambda per hour, so that in any short interval of length Δ\Delta the chance of a failure is λΔ\lambda \Delta, independently of other intervals. In this section tt stands for time, not a number of correctable errors. Split the time from 0 to tt into mm equal pieces. The device survives the stretch only if it survives every piece, with probability (1−λt/m)m(1 - \lambda t/m)^m, and as the pieces shrink the limit (1+x/m)m→ex(1 + x/m)^m \to e^x gives

P(T>t)=e−λt,P(T > t) = e^{-\lambda t} ,
(23)

where TT is the time to the first failure.

Proof. For any time T≥0T \ge 0, T=∫0∞1{T>t} dtT = \int_0^\infty \mathbf{1}\{T > t\} \, dt, since the integrand is 1 for t<Tt < T and 0 afterward. Taking expectations inside the integral, E[T]=∫0∞P(T>t) dt=∫0∞e−λt dt=1/λE[T] = \int_0^\infty P(T > t) \, dt = \int_0^\infty e^{-\lambda t} \, dt = 1/\lambda. A rate of FF FIT is λ=F×10−9\lambda = F \times 10^{-9} per hour, so 1/λ=109/F1/\lambda = 10^9/F hours. When a failed device is restored at once, the mean time between failures equals the mean time to failure. ■\blacksquare

FIT suits budgets for two more reasons. A system that fails when any part fails survives only if all parts survive, and e−λ1te−λ2t=e−(λ1+λ2)te^{-\lambda_1 t} e^{-\lambda_2 t} = e^{-(\lambda_1 + \lambda_2) t} shows that rates in series add. A fleet of DD identical devices is such a system, so its rate is DD times one device's rate.

Now spend the server's 40,000 FIT, a raw mean time between flips of 109/40000=25,00010^9/40000 = 25{,}000 hours, or 2.85 years. Suppose the code corrects 99.75% of flips, leaving 100 FIT uncorrected, and detects 95% of those, a DUE rate of 95 FIT, while 5% slip through as SDC at 5 FIT. These shares are illustrative, and Part XI analyzes the real split. Table 7 converts each rate with Equation 24, at 8760 hours to a year.

Table 7. A FIT budget for one server's memory, converted to mean time between failures for one server and for a fleet of 100,000 servers

ClassRate (FIT)MTBF, one serverMTBF, fleet of 100,000
Raw flips40,00025,000 h (2.85 years)15 minutes
DUE951.0526×1071.0526 \times 10^7 h (1,202 years)105.3 h (4.39 days)
SDC52×1082 \times 10^8 h (22,831 years)2,000 h (83.3 days)

Source: reproduced by ch09_error_control_strategies_and_performance.py.

One server's 1,202 and 22,831 years invite complacency, but a hundred thousand servers flip a bit every 15 minutes, stop on an uncorrectable error every 4.39 days and absorb a silent corruption every 83.3 days. Schroeder, Pinheiro and Weber found DRAM errors in Google's servers far more common than earlier reports suggested [9], and Hochschild and colleagues at Google [10] and Dixit and colleagues at Meta [11] report processors that silently compute wrong results, rare on one machine and routine across a fleet.

09.Looking Ahead

Selective repeat runs close to k/nk/n, stop-and-wait is crippled by idleness, and the check alone sets the residual error, Pres=s/(1−α)P_{\text{res}} = s/(1 - \alpha). Forward correction buys a fixed delay and a coding gain that repetition cannot deliver. Bit and word error rates bracket each other within a factor of kk, simulation measures them with the Wilson interval after about 100/Pe100/P_e trials, and hardware reliability splits into the loud DUE and the quiet SDC.

The next chapter follows these ideas into real systems, each taught properly later. Parity in early memories leads to Part XI, and Hamming's code [12] and the Reed–Muller code of the Mariner probes to Part II. Voyager's convolutional and Reed–Solomon codes belong to Parts VII and V, and their pairing, later standardized for space missions [13], to Part VI. The compact disc draws on Parts IV and V, QR codes are Reed–Solomon codes again [14], Hsiao's memory codes [15] come from Parts II and XI, and 5G NR [16] uses the LDPC, polar and hybrid ARQ schemes of Parts IX, X and XII. The project chapter then builds a channel simulator around the estimator and interval defined here.

10.Worked Examples

11.Exercises

References

  1. [1]Lin, Shu and Costello, Daniel J. and Miller, Michael J. (1984). “Automatic-Repeat-Request Error-Control Schemes.” IEEE Communications Magazine, 22(12), pp. 5–17. doi:10.1109/MCOM.1984.1091865
  2. [2]Wilson, Edwin B. (1927). “Probable Inference, the Law of Succession, and Statistical Inference.” Journal of the American Statistical Association, 22(158), pp. 209–212. doi:10.1080/01621459.1927.10502953
  3. [3]Agresti, Alan and Coull, Brent A. (1998). “Approximate is Better than "Exact" for Interval Estimation of Binomial Proportions.” The American Statistician, 52(2), pp. 119–126. doi:10.1080/00031305.1998.10480550
  4. [4]Jeruchim, Michel C. (1984). “Techniques for Estimating the Bit Error Rate in the Simulation of Digital Communication Systems.” IEEE Journal on Selected Areas in Communications, 2(1), pp. 153–170. doi:10.1109/JSAC.1984.1146031
  5. [5]May, T. C. and Woods, M. H. (1979). “Alpha-Particle-Induced Soft Errors in Dynamic Memories.” IEEE Transactions on Electron Devices, 26(1), pp. 2–9. doi:10.1109/T-ED.1979.19370
  6. [6]Ziegler, J. F. and Lanford, W. A. (1979). “Effect of Cosmic Rays on Computer Memories.” Science, 206(4420), pp. 776–788. doi:10.1126/science.206.4420.776
  7. [7]Baumann, R. C. (2005). “Radiation-Induced Soft Errors in Advanced Semiconductor Technologies.” IEEE Transactions on Device and Materials Reliability, 5(3), pp. 305–316. doi:10.1109/TDMR.2005.853449
  8. [8]Mukherjee, Shubhendu S. and Emer, Joel and Reinhardt, Steven K. (2005). “The Soft Error Problem: An Architectural Perspective.” In Proceedings of the 11th International Symposium on High-Performance Computer Architecture (HPCA-11), pp. 243–247. doi:10.1109/HPCA.2005.37
  9. [9]Schroeder, Bianca and Pinheiro, Eduardo and Weber, Wolf-Dietrich (2009). “DRAM Errors in the Wild: A Large-Scale Field Study.” In Proceedings of the Eleventh International Joint Conference on Measurement and Modeling of Computer Systems (SIGMETRICS '09), pp. 193–204. doi:10.1145/1555349.1555372
  10. [10]Hochschild, Peter H. and Turner, Paul and Mogul, Jeffrey C. and Govindaraju, Rama and Ranganathan, Parthasarathy and Culler, David E. and Vahdat, Amin (2021). “Cores that Don't Count.” In Proceedings of the Workshop on Hot Topics in Operating Systems (HotOS '21), pp. 9–16. doi:10.1145/3458336.3465297
  11. [11]Dixit, Harish Dattatraya and Pendharkar, Sneha and Beadon, Matt and Mason, Chris and Chakravarthy, Tejasvi and Muthiah, Bharath and Sankar, Sriram (2021). “Silent Data Corruptions at Scale.” arXiv:2102.11245. https://arxiv.org/abs/2102.11245
  12. [12]Hamming, Richard W. (1950). “Error Detecting and Error Correcting Codes.” Bell System Technical Journal, 29(2), pp. 147–160. doi:10.1002/j.1538-7305.1950.tb00463.x
  13. [13]Consultative Committee for Space Data Systems “TM Synchronization and Channel Coding.” CCSDS 131.0-B-5, Blue Book. Issue 5. https://public.ccsds.org/Pubs/131x0b5.pdf
  14. [14]ISO/IEC (2015). “Information Technology, Automatic Identification and Data Capture Techniques, QR Code Bar Code Symbology Specification.” ISO/IEC 18004:2015. https://www.iso.org/standard/62021.html
  15. [15]Hsiao, M. Y. (1970). “A Class of Optimal Minimum Odd-weight-column SEC-DED Codes.” IBM Journal of Research and Development, 14(4), pp. 395–401. doi:10.1147/rd.144.0395
  16. [16]3GPP (2017). “NR; Multiplexing and Channel Coding.” 3GPP Technical Specification 38.212. First issued in Release 15; later releases revise it. https://www.3gpp.org/dynareport/38212.htm

— Anirban

Hardware–software at the seam where compilers meet microcode.

FeedbackBook modePaper
error-correction-codinginformation-and-channels