Codec 2 is a low-bitrate speech audio codec (speech coding) that is patent free and open source. Codec 2 compresses speech using sinusoidal coding, a method specialized for human speech. Bit rates of 3200 to 450 bit/s have been successfully created. Codec 2 was designed to be used for amateur radio and other high compression voice applications.
Codec 2 consists of 3200, 2400, 1600, 1400, 1300, 1200, 700 and 450 bit/s codec modes. It outperforms most other low-bitrate speech codecs. For example, it uses half the bandwidth of Advanced Multi-Band Excitation to encode speech with similar quality. The speech codec uses 16-bit PCM sampled audio, and outputs packed digital bytes. Likewise, you send it packed digital bytes, and it outputs PCM sampled audio. The audio sample rate is fixed at 8 kHz.
The reference implementation is open source and is freely available in a subversion (SVN) repository. The source code is released under the terms of version 2.1 of the GNU Lesser General Public License (LGPL). It is programmed in C and so far doesn't work without floating-point arithmetic, although the algorithm itself does not require this. The reference software package also includes an frequency-division multiplex digital voice (FDMDV) software modem and a graphical user interface based on FLTK. The software is developed on Linux and a port for Microsoft Windows created with Cygwin is offered in addition to a Linux version.
Rowe has also created a frequency-division multiplex (FDM) modem which carries the digital voice (DV) in only 1.3 kHz of radio bandwidth. The codec and FDM modem are used every day on amateur radio shortwave bands using both the SM1000 hardware implementation, and the FreeDV application.
This modem operates at 50 Baud with a bit rate of 1600 bit/s. This is sent using sixteen QPSK FDM carriers (2 bits each), or 32 bits 50 times a second. 64 bits are needed to make a vocoder frame, thus it has a 25 Hz effective rate. The 64 bits contain 52 bits of vocoder data, and 12 bits of Forward Error Correction (Golay). Thus an effective 1300 bit/s is used for the vocoder. A separate BPSK carrier is sent in the middle of the spectrum (1500 Hz) for synchronization.
The ITU emission designation is J2E for phone payload, and J2D for data payload.
A new FDM modem waveform was developed for the 700 bit/s vocoder. This modem operates with a symbol rate of 75 Baud, using Coherent Quadrature Phase-Shift Keying (QPSK) with seven subcarriers. A duplicate set of subcarriers are used as a diversity channel. This diversity channel is used to combat the effects of fading with shortwave propagation. The modem will still perform well with a ± 40 Hz tuning error.
The FDM modem sends and receives a row of subcarriers 75 times a second. However, it takes six of these rows to make up a modem frame. First, two pilot reference-phase rows (28 bits), then two speech vocoder rows (28 bits), and finally two more rows for the second speech vocoder frame (28 bits). The process then repeats as long as the transmitter Push-To-Talk (PTT) is keyed.
Thus, a modem frame is 84 bits total. 56 bits are used for speech, and 28 bits are used for the reference-phase pilots. These pilots are what makes this a coherent modem. They are used to correct the received data bit phases. The data rate is 1050 bit/s (75 Baud × 14 bits). The effective data rate is 700 bit/s (75 Baud / 6 or 12.5 Baud × 56 bits). Each row of 14 bits is sent as seven QPSK carriers (2 bits per carrier).
The modem timings are also relevant, in that each speech vocoder frame outputs 28 bits every 40 ms. Since the modem has an 80 ms modem frame, it can transport two speech vocoder frames.
There are 100 complex IQ (In-Phase and Quadrature-Phase) audio samples for each row, at a 7500 Hz rate. 600 samples total for the modem frame. Thus, 100×6 * 12.5 equals the 7500 Hz sample rate. Using a rate conversion filter, the application is provided an 8 kHz interface, which is much more compatible with sound cards. There are 640 complex audio samples at the 8 kHz rate. This rate conversion would not be necessary in firmware.
The FDM modem operates with a center frequency of 1500 Hz. The initial FDM subcarrier frequencies are set using a spreading function. This changes the spacing of each subcarrier a little bit more each subcarrier further to the left. About 105 Hz apart on the right, to about 109 Hz apart on the left. This design, along with spectrum clipping, improves the Peak to Average Power Ratio (PAPR). The measured Crest factor is about 8.3 dB with clipping, and about 10.3 dB without clipping.
The FDM modem waveform consumes a different amount of bandwidth, depending on whether the diversity channel is enabled. About 750 Hz per group of seven subcarriers. Normally you would want to use diversity on shortwave, but optionally on VHF and above.
The ITU emission designation is J2E for phone payload, and J2D for data payload.
Internally, parametric audio coding algorithms operate on 10 ms PCM frames using a model of the human voice. Each of these audio segments is declared voiced (vowel) or unvoiced (consonant).
Codec 2 uses sinusoidal coding to model speech, which is closely related to that of multi-band excitation codecs. Sinusoidal coding is based on regularities (periodicity) in the pattern of overtone frequencies and layers harmonic sinusoids. Spoken audio is recreated by modelling speech as a sum of harmonically related sine waves with independent amplitudes called Line spectral pairs, or LSP, on top of a determined fundamental frequency of the speaker's voice (pitch). The (quantised) pitch and the amplitude (energy) of the harmonics are encoded, and with the LSP's are exchanged across a channel in a digital format. The LSP coefficients represent the Linear Predictive Coding (LPC) model in the frequency domain, and lend themselves to a robust and efficient quantisation of the LPC parameters.
The digital bytes are in a bit-field format that have been packed together into bytes. These bit fields are also optionally gray coded before being grouped together. The gray coding may be useful if sending raw, but normally an application will just burst the bit fields out. The bit fields make up the various parameters that are stored or exchanged (pitch, energy, voicing booleans, LSP's, etc.).
For example, Mode 3200, has 20 ms of audio converted to 64 Bits. So 64 Bits will be output every 20 ms (50 times a second), for a minimum data rate of 3200 bit/s. These 64 bits are sent as 8 bytes to the application, which has to unwrap the bit fields, or send the bytes over a data channel.
Another example is Mode 1300, which is sent 40 ms of audio, and outputs 52 Bits every 40 ms (25 times a second), for a minimum rate of 1300 bit/s. These 52 bits are sent as 7 bytes to the application or data channel.
Codec 2 is currently used in several radios and Software Defined Radio Systems
There is a FM-to-Codec2 digital voice repeater in earth orbit on amateur radio CubeSat LilacSat-1 (call sign ON02CN, QB50 constellation), which was launched and subsequently deployed from the International Space Station in 2017.
The prominent Free Software advocate and radio amateur Bruce Perens lobbied for the creation of a free speech codec for operation at less than 5 kBit/s. Since he did not have the background himself, he approached Jean-Marc Valin in 2008, who introduced him to lead developer David Grant Rowe, who has worked with Valin on Speex on several occasions. Rowe himself is also a radio amateur (amateur radio call sign VK5DGR) and has experience in creating and using voice codecs and other signal processing algorithms for speech signals. He obtained a PhD in speech coding in the 1990s and was involved in the development of one of the first satellite telephony systems (Mobilesat).
He agreed to the task and announced his decision to work on a format on August 21, 2009. He built on the research and findings from his doctoral thesis. The underlying sinusoidal modelling goes back to developments by Robert J. McAulay and Thomas F. Quatieri (MIT Lincoln labs) from the mid-1980s.
In August 2010, David Rowe published version 0.1 alpha. Version 0.2 was released towards the end of 2011, introducing a mode with 1,400 bits/s and significant improvements in quantization.
In January 2012, at linux.conf.au, Jean-Marc Valin helped improve the quantization of line spectral pairs, which Rowe is less familiar with. After several changes to the available bit rate modes in winter and spring 2011/2012, 2,400, 1,400 and 1,200 bit/s modes have been available since May.
Codec 2 700C, a new mode with a bit rate of 700 bit/s, was finished in early 2017.
In July 2018 an experimental 450 bit/s mode was demonstrated, which was developed as part of a master thesis at the University of Erlangen-Nuremberg. By clever training of the vector quantization the data rate could be further reduced based on the principle of the 700C mode.
- "DCC2011-Codec2-VK5DGR" (PDF).
- "A Pitch-Energy Quantizer for Codec2". Archived from the original on 2015-06-19.
- "Repository for Codec2 Source".
- "Codec2 – an Open Source, Low-Bandwidth Voice Codec". Slashdot.
- ARRL Technical Innovation Award in 2012
- "Linux Australia 2012 conference".
- "FDMDV Modem".
- "Techniques for Harmonic Sinusoidal Coding" (PDF).
- "FreeDV, CODEC2 and the WaveformAPI".
- "Introducing the SM1000 Smart Mic".
- "QB-50 Constellation Satellites Deployed from ISS". American Radio Relay League website. 2017-11-15. Retrieved 2019-03-31.
- "Open Source Codec Encodes Voice Into Only 700 Bits Per Second". Slashdot. Retrieved 2019-03-31.
- "Codec2 HF digital voice at 450 bps". Southgate Amateur Radio News. 2018-07-08. Retrieved 2019-03-31.