Codec 2

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search

Codec 2 is a low-bitrate speech audio codec (speech coding) that is patent free and open source.[1] 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.


The codec was developed by David Grant Rowe, with support and cooperation of other researchers (e.g., Jean-Marc Valin from Opus).[2]

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.[citation needed] The speech codec uses 16-bit PCM sampled audio, and outputs packed digital bytes. When sent packed digital bytes, 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 GitHub repository.[3] The source code is released under the terms of version 2.1 of the GNU Lesser General Public License (LGPL).[4] It is programmed in C and current source code requires floating-point arithmetic, although the algorithm itself does not require this. The reference software package also includes a frequency-division multiplex digital voice software modem and a graphical user interface based on WxWidgets. The software is developed on Linux and a port for Microsoft Windows created with Cygwin is offered in addition to an Apple Macintosh version.

The codec has been presented in various conferences and has received the 2012 ARRL Technical Innovation Award,[5] and the Linux Australia Conference's Best Presentation Award.[6]

Non-Coherent PSK[edit]

Rowe has also created a frequency-division multiplex (FDM) modem which carries the digital voice (DV) in only 1.3 kHz of radio bandwidth.[7] 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.

Coherent PSK[edit]

A second 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.

Orthogonal PSK[edit]

In 2018, a third modem was released which was based on Orthogonal frequency-division multiplexing (OFDM). This modem operates at 50 baud, with a default number of 17 QPSK carriers. This parameter and many others were made adjustable to satisfy other OFDM waveform designs. The modem can operate with up to a ± 60 Hz tuning error.

With 17 carriers it uses a Cyclic prefix duration of 2 ms and a symbol time of 18 ms. The symbol time produces a modulation symbol rate of 55.556 baud. With a sampling rate of 8 kHz this produces 144 symbol samples and 16 Cyclic prefix samples, for a total of 160 samples for each of seven rows, and requiring 994 Hz of bandwidth. The number of carriers is low enough that a Discrete Fourier transform (DFT) is used instead of a Fast Fourier transform (FFT), which operates with enough speed on 32-bit floating point firmware devices (such as the STM32 as used in the SM1000 device).

The difference in this modem from many other OFDM designs, is it uses multiple data rows to send all the bits. With 17 carriers this results in seven data rows producing 238 bits total. These bits contain the four 700 bps vocoder words of 28 bits each, and the same number of Low-density parity-check code (LDPC) bits, plus four text bits, and a 10 bit unique sync word. Each data packet is preceded by a 19 carrier BPSK pilot signal. The two extra carriers are used to bracket each QPSK carrier with three pilots to average phase and provide coherency.

This particular modem was written in the C99 standard so as to use the modern complex math features.

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.[8]

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

Codec2 has also been integrated into FreeSWITCH and there's a patch available for support in Asterisk.

There was 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.[14]


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.[15][16] 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.[17] 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, Jean-Marc Valin helped improve the quantization of line spectral pairs, which Rowe is less familiar with.[18] 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 were available after May of that year.

Codec 2 700C, a new mode with a bit rate of 700 bit/s, was finished in early 2017.[19]

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.[20]


  1. ^ "DCC2011-Codec2-VK5DGR" (PDF).
  2. ^ "A Pitch-Energy Quantizer for Codec2". Archived from the original on 2015-06-19.
  3. ^ "Repository for Codec 2 Source".
  4. ^ "Codec2 – an Open Source, Low-Bandwidth Voice Codec". Slashdot.
  5. ^ ARRL Technical Innovation Award in 2012
  6. ^ "Linux Australia 2012 conference". Archived from the original on 2012-11-29. Retrieved 2012-08-02.
  7. ^ "FDMDV Modem".
  8. ^ "Techniques for Harmonic Sinusoidal Coding" (PDF).
  9. ^ "FreeDV".
  10. ^ "FreeDV, CODEC2 and the WaveformAPI". Archived from the original on 2015-04-02. Retrieved 2015-03-06.
  11. ^ "Introducing the SM1000 Smart Mic".
  12. ^ "Quisk Software defined radio".
  13. ^ "M17 protocol description" (PDF).
  14. ^ "QB-50 Constellation Satellites Deployed from ISS". American Radio Relay League website. 2017-11-15. Retrieved 2019-03-31.
  15. ^
  16. ^
  17. ^
  18. ^
  19. ^ "Open Source Codec Encodes Voice Into Only 700 Bits Per Second". Slashdot. Retrieved 2019-03-31.
  20. ^ "Codec2 HF digital voice at 450 bps". Southgate Amateur Radio News. 2018-07-08. Retrieved 2019-03-31.

External links[edit]