5.7.1 Algebraic codebook structure

26.0903GPPAdaptive Multi-Rate (AMR) speech codecMandatory speech CODEC speech processing functionsRelease 17Transcoding functionsTS

The algebraic codebook structure is based on interleaved single‑pulse permutation (ISPP) design.

12.2 kbit/s mode

In this codebook, the innovation vector contains 10 non‑zero pulses. All pulses can have the amplitudes +1 or ‑1. The 40 positions in a subframe are divided into 5 tracks, where each track contains two pulses, as shown in table 3.

Table 3: Potential positions of individual pulses in the algebraic codebook, 12.2 kbit/s.

Track

Pulse

Positions

1

i0, i5

0, 5, 10, 15, 20, 25, 30, 35

2

i1, i6

1, 6, 11, 16, 21, 26, 31, 36

3

i2, i7

2, 7, 12, 17, 22, 27, 32, 37

4

i3, i8

3, 8, 13, 18, 23, 28, 33, 38

5

i4, i9

4, 9, 14, 19, 24, 29, 34, 39

Each two pulse positions in one track are encoded with 6 bits (total of 30 bits, 3 bits for the position of every pulse), and the sign of the first pulse in the track is encoded with 1 bit (total of 5 bits).

For two pulses located in the same track, only one sign bit is needed. This sign bit indicates the sign of the first pulse. The sign of the second pulse depends on its position relative to the first pulse. If the position of the second pulse is smaller, then it has opposite sign, otherwise it has the same sign than in the first pulse.

All the 3‑bit pulse positions are Gray coded in order to improve robustness against channel errors. This gives a total of 35 bits for the algebraic code.

10.2 kbit/s mode

In this codebook, the innovation vector contains 8 non‑zero pulses. All pulses can have the amplitudes +1 or ‑1. The 40 positions in a subframe are divided into 4 tracks, where each track contains two pulses, as shown in table 4.

Table 4: Potential positions of individual pulses in the algebraic codebook, 10.2 kbit/s.

Track

Pulse

Positions

1

i0, i4

0, 4, 8, 12, 16, 20, 24, 28, 32, 36

2

i1, i5

1, 5, 9, 13, 17, 21, 25, 29, 33, 37

3

i2, i6

2, 6, 10, 14, 18, 22, 26, 30, 34, 38

4

i3, i7

3, 7, 11, 15, 19, 23, 27, 31, 35, 39

The pulses are grouped into 3, 3, and 2 pulses and their positions are encoded with 10, 10, and 7 bits, respectively (total of 27 bits). The sign of the first pulse in each track is encoded with 1 bit (total of 4 bits).

For two pulses located in the same track, only one sign bit is needed. This sign bit indicates the sign of the first pulse. The sign of the second pulse depends on its position relative to the first pulse. If the position of the second pulse is smaller, then it has opposite sign, otherwise it has the same sign than in the first pulse.

This gives a total of 31 bits for the algebraic code.

7.95, 7.40 kbit/s modes

In this codebook, the innovation vector contains 4 non‑zero pulses. All pulses can have the amplitudes +1 or ‑1. The 40 positions in a subframe are divided into 4 tracks, where each track contains one pulse, as shown in table 5.

Table 5: Potential positions of individual pulses in the algebraic codebook, 7.95, 7.40 kbit/s.

Track

Pulse

Positions

1

i0

0, 5, 10, 15, 20, 25, 30, 35

2

i1

1, 6, 11, 16, 21, 26, 31, 36

3

i2

2, 7, 12, 17, 22, 27, 32, 37

4

i3

3, 8, 13, 18, 23, 28, 33, 38,

4, 9, 14, 19, 24, 29, 34, 39

The pulse positions are encoded with 3, 3, 3, and 4 bits (total of 13 bits), and the sign of the each pulse is encoded with 1 bit (total of 4 bits). This gives a total of 17 bits for the algebraic code.

6.70 kbit/s mode

In this codebook, the innovation vector contains 3 non‑zero pulses. All pulses can have the amplitudes +1 or ‑1. The 40 positions in a subframe are divided into 3 tracks, where each track contains one pulse, as shown in table 6.

Table 6: Potential positions of individual pulses in the algebraic codebook, 6.70 kbit/s.

Track

Pulse

Positions

1

i0

0, 5, 10, 15, 20, 25, 30, 35

2

i1

1, 6, 11, 16, 21, 26, 31, 36,

3, 8, 13, 18, 23, 28, 33, 38

3

i2

2, 7, 12, 17, 22, 27, 32, 37,

4, 9, 14, 19, 24, 29, 34, 39

The pulse positions are encoded with 3, 4, and 4 bits (total of 11 bits), and the sign of the each pulse is encoded with 1 bit (total of 3 bits). This gives a total of 14 bits for the algebraic code.

5.90 kbit/s mode

In this codebook, the innovation vector contains 2 non‑zero pulses. All pulses can have the amplitudes +1 or ‑1. The 40 positions in a subframe are divided into 2 tracks, where each track contains one pulse, as shown in table 7.

Table 7: Potential positions of individual pulses in the algebraic codebook, 5.90 kbit/s.

Track

Pulse

Positions

1

i0

1, 6, 11, 16, 21, 26, 31, 36,

3, 8, 13, 18, 23, 28, 33, 38

2

i1

0, 5, 10, 15, 20, 25, 30, 35,

1, 6, 11, 16, 21, 26, 31, 36,

2, 7, 12, 17, 22, 27, 32, 37,

4, 9, 14, 19, 24, 29, 34, 39

The pulse positions are encoded with 4 and 5 bits (total of 9 bits), and the sign of the each pulse is encoded with 1 bit (total of 2 bits). This gives a total of 11 bits for the algebraic code.

5.15, 4.75 kbit/s modes

In this codebook, the innovation vector contains 2 non‑zero pulses. All pulses can have the amplitudes +1 or ‑1. The 40 positions in a subframe are divided into 5 tracks. Two subsets of 2 tracks each are used for each subframe with one pulse in each track. Different subsets of tracks are used for each subframe. The pulse positions used in each subframe are shown in table 8.

Table 8: Potential positions of individual pulses in the algebraic codebook, 5.15, 4.75 kbit/s.

Subframe

Subset

Pulse

Positions

1

i0

0, 5, 10, 15, 20, 25, 30, 35

1

i1

2, 7, 12, 17, 22, 27, 32, 37

2

i0

1, 6, 11, 16, 21, 26, 31, 36

i1

3, 8, 13, 18, 23, 28, 33, 38

1

i0

0, 5, 10, 15, 20, 25, 30, 35

2

i1

3, 8, 13, 18, 23, 28, 33, 38

2

i0

2, 7, 12, 17, 22, 27, 32, 37

i1

4, 9, 14, 19, 24, 29, 34, 39

1

i0

0, 5, 10, 15, 20, 25, 30, 35

3

i1

2, 7, 12, 17, 22, 27, 32, 37

2

i0

1, 6, 11, 16, 21, 26, 31, 36

i1

4, 9, 14, 19, 24, 29, 34, 39

1

i0

0, 5, 10, 15, 20, 25, 30, 35

4

i1

3, 8, 13, 18, 23, 28, 33, 38

2

i0

1, 6, 11, 16, 21, 26, 31, 36

i1

4, 9, 14, 19, 24, 29, 34, 39

One bit is needed to encoded the subset used. The two pulse positions are encoded with 3 bits each (total of 6 bits), and the sign of the each pulse is encoded with 1 bit (total of 2 bits). This gives a total of 9 bits for the algebraic code.