G.729
G.729 is an audio data compression algorithm for voice that compresses digital voice in packets of 10 milliseconds duration. It is officially described as Coding of speech at 8 kbit/s using code-excited linear prediction speech coding (CS-ACELP).[1]
Because of its low bandwidth requirements, G.729 is mostly used in Voice over Internet Protocol (VoIP) applications where bandwidth must be conserved, such as conference calls. Standard G.729 operates at a bit rate of 8 kbit/s, but there are extensions, which provide rates of 6.4 kbit/s (Annex D, F, H, I, C+) and 11.8 kbit/s (Annex E, G, H, I, C+) for worse and better speech quality, respectively.
G.729 has been extended with various features, commonly designated as G.729a and G.729b. The differences between these versions are noteworthy because they each have additional properties and thus different use-cases:
- G729: original codec. Uses high-complexity algorithm
- G729A or A annex: medium complexity variant of G.729 and it is compatible with G729. It is less complex but has slightly lower voice quality
- G729B or B annex: G729 with silence suppression and not compatible with the previous ones.
- G729AB: G729A with silence suppression and only compatible with G729B.
Dual-tone multi-frequency signaling (DTMF), fax transmissions, and high-quality audio cannot be transported reliably with this codec. DTMF requires the use of the RTP Payload for DTMF Digits, Telephony Tones, and Telephony Signals as specified in RFC 2833.
Contents
G.729 Annexes
Functionality | - | A | B | C | D | E | F | G | H | I | C+ | J |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Low complexity | X | X | ||||||||||
Fixed-point | X | X | X | X | X | X | X | X | X | X | ||
Floating-point | X | X | ||||||||||
8 kbit/s | X | X | X | X | X | X | X | X | X | X | X | X |
6.4 kbit/s | X | X | X | X | X | |||||||
11.8 kbit/s | X | X | X | X | X | |||||||
DTX | X | X | X | X | X | |||||||
Embedded variable bit rate, wideband | X |
G.729 Annex A
G.729a is a compatible extension of G.729, but requires less computational power. This lower complexity, however, bears the cost of marginally reduced speech quality.
G.729a was developed by a consortium of organizations: France Telecom, Mitsubishi Electric Corporation, Nippon Telegraph and Telephone Corporation (NTT)
The features of G.729a are:
- Sampling frequency 8 kHz/16-bit (80 samples for 10 ms frames)
- Fixed bit rate (8 kbit/s 10 ms frames)
- Fixed frame size (10 bytes for 10 ms frame)
- Algorithmic delay is 15 ms per frame, with 5 ms look-ahead delay
- G.729a is a hybrid speech coder which uses Algebraic Code Excited Linear Prediction (ACELP)
- The complexity of the algorithm is rated at 15, using a relative scale where G.711 is 1 and G.723.1 is 25.
- PSQM testing under ideal conditions yields Mean Opinion Scores of 4.04 for G.729a, compared to 4.45 for G.711 (μ-law)
- PSQM testing under network stress yields Mean Opinion Scores of 3.51 for G.729a, compared to 4.13 for G.711 (μ-law)
Some VoIP phones incorrectly use the description "G729a/8000" in SDP (e.g. this affects some Cisco and Linksys phones). This is incorrect as G729a is an alternative method of encoding the audio, but still generates data decodable by either G729 or G729a - i.e. there is no difference in terms of codec negotiation. Since the SDP RFC allows static payload types to be overridden by the textual rtpmap description this can cause problems calling from these phones to endpoints adherring to the RFC unless the codec is renamed in their settings since they will not recognise 'G729a' as 'G729' without a specific workaround in place for the bug.
G.729 Annex B
G.729 has been extended in Annex B (G.729b) which provides a silence compression method that enables a voice activity detection (VAD) module. It is used to detect voice activity in the signal. It also includes a discontinuous transmission (DTX) module which decides on updating the background noise parameters for non speech (noisy frames). It uses 2-byte Silence Insertion Descriptor (SID) frames transmitted to initiate comfort noise generation (CNG). If transmission is stopped, and the link goes quiet because of no speech, the receiving side might assume that the link has been cut. By inserting comfort noise, analog hiss is simulated digitally during silence to assure the receiver that the link is active and operational.
Other extensions
Recently, G.729 has been extended (with Annex J) to provide support for wideband speech and audio coding, i.e., the transmitted acoustic frequency range is extended to 50 Hz - 7 kHz. The respective extension to G.729 is referred to as G.729.1. The G.729.1 codec is hierarchically organized: Its bit rate and the obtained quality are adjustable by simple bitstream truncation.
Licensing
G.729 includes patents from several companies and is licensed by Sipro Lab Telecom. Sipro Lab Telecom is the authorized Intellectual Property Licensing Administrator for G.729 technology and patent pool.[3][4][5][6] In a number of countries, the use of G.729 may require a license fee and/or royalty fee.[5]
Patent Litigation
AIM IP, a non-practicing entity based in Mission Viejo, CA has made complaints for infringement of U.S. Patent No. 5,920,853 to a number of companies .[7][8] The patent contains lookup tables including the sequence 1486, 2168, 3751... which is integral to g.729.[9]
The European counterpart of this patent, according to Google patent records appears to have been withdrawn:[10]
RTP Payload
G.729 is assigned the static payload type 18 for RTP by IANA.[11] The correct rtpmap description for this payload type is "G729/8000".
Both G.729a and G.729b use the same rtpmap description as G.729. G.729a and G.729b is indicated using annexb=no or annexb=yes respectively. G.729 Annex B (G.729b) is the default in absence of annexb parameter in Session Description Protocol.[12]
See also
References
- ↑ International Telecommunications Union, Standardization Sector (ITU-T), Study Group 15 (1993-1996), Recommendation G.729, March 1996.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Sipro Lab Telecom Website
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ 5.0 5.1 Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ [1]
- ↑ [2]
- ↑ [3]
- ↑ [4]
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.