Project 25 is a digital radio airlink standard designed to create interoperability on 12.5 kHz and 6.25 kHz channels. Although Project 25 radios can pass voice or data communications, this article will focus strictly on error-control coding for voice communications.

P25 modulation comes in two flavors, Compatible 4 FM (C4FM) and Compatible Quadrature Phase Shift Keying (CQPSK) [1]. C4FM is intended for Phase I P25 systems that operate on 12.5 kHz channels, while CQPSK is intended for Phase II P25 systems that will operate on 6.25 kHz channels. In both cases, the signaling rate is 4.8 k symbols per second (sps) and there are two bits per symbol for a gross bit rate of 9.6 kb/s.

The vocoder (voice encoder/decoder) adopted by the APCO Project 25 committee is the Improved Multi-Band Excitation (IMBE) vocoder, developed by Digital Voice Systems Inc. [2]. The IMBE vocoder operates at a basic rate of 4.4 kb/s, but an additional 2.8 kb/s is required for error-control coding. Thus, the bit rate for the vocoder and its error-control coding is 7.2 kb/s. An additional 2.4 kb/s is used for channel signaling, so the gross bit rate is 9.6 kb/s.

Rather than think in terms of bit rate, we also can think in terms of bits per vocoder frame. Each frame is 20 milliseconds (ms) long (50 frames per second) and contains 88 vocoder bits, 56 error-control-coding bits and 48 signaling bits for a total of 192 bits.

A full explanation of the IMBE vocoder is beyond the scope of this article, but suffice it to say that unlike most cell phone vocoders, IMBE was optimized for low bit-rate applications (less than 4.8 kb/s). However, like most cell phone vocoders, IMBE is model-based, meaning that rather than sending digital samples of voice, the vocoder sends the parameters to be used in a human speech model.

Fewer bits are needed to specify the model parameters, and both the transmitter and the receiver include a full description of the model before they leave the factory. The IMBE vocoder and its successor, AMBE, also are used in many satellite voice networks, including Iridium's.

The mobile radio channel is hostile to digital communications, and for best performance, the error-control-coding scheme must be adapted to the channel's characteristics. Because of multipath fading, the mobile radio channel is inherently a burst-error channel, and compatible correcting techniques should be employed. Candidate burst-error-correcting techniques include Reed-Solomon codes and interleaving (which can be used with any code).

The protection provided by the 56 error-control-coding bits is not applied equally over the 88 vocoder bits. Some vocoder bits are more important for intelligibility than others, so nearly all modern vocoders, including IMBE, apply error-control coding unequally. IMBE uses three principal coding techniques: interleaving, Hamming codes, and Golay codes. The signaling protocol (56 bits per frame) employs other coding techniques, including Reed-Solomon codes and trellis coded modulation. We'll limit the following discussion to the IMBE techniques: interleaving, Hamming and Golay codes.

Bit interleaving is used to spread short bursts of errors among several code words. The error-correction decoder is less likely to be overwhelmed if these bursts of errors arrive in multiple code blocks. The frame is interleaved in such a way that the minimum separation between any two bits of the same error-correction code is 3 symbols, or 6 bits [2]. Long bursts, such as those that occur when the user is walking or driving slowly, will be longer than the interleaver depth, so the interleaver design is not perfect. The designer is forced to make tradeoffs because greater interleaver depth means longer delay, and very long delays cannot be tolerated, especially on voice networks.

The 56 error-control bits are divided between four (23, 12) Golay codes and three (15, 11) Hamming codes. Both codes are binary block codes. Recall that an (n, k) binary block code has k information bits and n-k parity bits. In our case, there are 4×11 parity bits for the Golay codes plus 3×4 parity bits for the Hamming codes, for a total of 56 error-control bits. Figure 2 shows the arrangement of bits in the vocoder frame.

Hamming codes can correct just one error per code word. They often are used in a shortened form in other communication systems for error detection and are called cyclic redundancy checks, but in P25, the Hamming code is used strictly for error correction. The Hamming code is a single error-correcting perfect code.

The (23, 12) Golay code has some unique properties. It is the only known multiple-error-correcting binary perfect code. It can correct any combination of three or fewer random errors in a block of 23 bits.

So, what is a perfect code? Recall from January's Tech Speak that we can represent a code word in decoding space as the center of a sphere of radius t, where t is the number of errors the code can correct. The encoder takes k bits at time and encodes them into an n-bit code word. For a binary code, there are 2k code words, but there are 2n possible n-tuples to consider at the decoder because bit errors may occur on the channel.

For nearly all codes, many of the n-tuples will fall outside any sphere, and this information can be used to detect an errored code word even if it cannot be corrected. For the very small class of perfect codes (there are only two non-trivial binary perfect codes), all n-tuples fall within a decoding sphere. This relationship is shown in Figure 3.

If this were a data system, the use of error-control codes would be relatively straightforward. Some number of parity bits would be dedicated to error detection to ensure a small probability of undetected errors. The remaining parity bits would be used for error correction. Those frames with uncorrectable error patterns (as determined by the error-detection code) would be re-transmitted using some form of automatic repeat request (ARQ), an error-correcting technique that always delivers error-free code words, but at the cost of decreased throughput.

Voice systems are different. Because voice quality is subjective, we have another bag of tricks to mitigate the effect of bit errors.

The IMBE vocoder performs error estimation as part of the decoding process. The speech decoder estimates the number of errors in each received frame by computing the number of errors corrected by each of the (23, 12) Golay codes and each of the (15, 11) Hamming codes (a total of 7 code words per frame). The expression for the error estimate is found in reference [2] on page 45 or in Equations 1 and 2. It includes an estimate of the number of errors in the current frame plus a weighted version of the error estimate of the previous frame. Thus, the algorithm looks back at earlier frames and has some ability to detect trends.

When we say the number of errors corrected, we really mean the number of errors the decoder thinks it corrected. For example, if the received Golay n-tuple differs from the nearest valid code word in 1 bit position, the decoder must assume there is just one error. However, the code word may actually have five errors, placing it in an entirely different decoding sphere. This is an example of decoding failure, and it affects the accuracy of the error estimate. When the error rate is high, the probability of decoding failure also is high, and the error estimate will be somewhat flawed.

Once the error estimate is computed, the decoder does the following:

  1. If the error estimate is below some threshold, it decodes the frame normally.

  2. If the error estimate is above the threshold, it:

  • repeats the frame,

  • mutes the frame or

  • performs adaptive smoothing of the frame.

When a frame is repeated, the assumption is that it is better to “stretch” the speech fragment rather than deliver a frame that is known to have problems. Remember that a frame is only 20 ms long, so a single repeat may not be noticeable to the human ear.

In a severe bit-error environment, a frame is muted. When muted, a replica of white noise is created, sometimes called “comfort noise.”

Adaptive smoothing allows the decoder to take information from the previous frame and the next frame (there is a two-frame look-ahead in IMBE) to “smooth” the effects of the errored frame. Adaptive smoothing only is done over an intermediate range of bit error estimates.

Jay Jacobsmeyer is president of Pericle Communications Co., a consulting engineering firm located in Colorado Springs, Colo. He holds bachelor's and master's degrees in Electrical Engineering from Virginia Tech and Cornell University, respectively, and has more than 20 years experience as a radio frequency engineer.


  1. TIA-102.BAAA-A, “Project 25 FDMA: Common Air Interface,” Sept. 2003.

  2. TIA-102.BABA, “Project 25 Vocoder Description,” Dec. 2003.

  3. S. Lin and D.J. Costello Jr., Error Control Coding: Fundamentals and Applications, Prentice-Hall, 1983.