# Codec2

Codec2 ist ein (patent-)freier verlustbehafteter Audio-Codec, der auf verständliche Übertragung menschlicher Sprache bei extrem niedrigen Bitraten spezialisiert ist. Der Codec wurde zur Übertragung von Sprachsignalen über schmalbandige Funkkanäle im Amateurfunk geschaffen. Die Referenzimplementierung unterliegt den Bedingungen von Version 2.1 der GNU Lesser General Public License (LGPL).
Die offene Spezifikation des Verfahrens ermöglicht eine digitale Kommunikation über Amateurfunk-Frequenzen, ohne durch die Verwendung von bisher verfügbaren proprietären Codecs wie AMBE oder MELP zwangsläufig unspezifizierte digitale Inhalte zu übertragen, was Funkamateuren verboten ist.
Codec2 wurde bereits offiziell in FreeSWITCH integriert und es steht ein Patch für die Integration in Asterisk zur Verfügung.

## Merkmale

Codec2 bietet Modi mit fester Bitrate von 3.200, 2.400, 1.600, 1.400, 1.300, 1.200, 700 oder 450 Bit/s. Er verarbeitet und liefert PCM-Daten mit einer Abtastfrequenz von 8 kHz. Die einzelnen (Parameter-)Datenpakete decken jeweils 10 bis 20 (2,4 kBit/s) beziehungsweise 40 (1,4 kBit/s) Millisekunden ab. Die algorithmische Latenz beziffert der Autor auf etwa 100 Millisekunden. Die Sprachqualität bewegt sich etwas unter der gewöhnlicher 2G-Mobiltelefone und kann sich angeblich bei vergleichsweise deutlich niedrigerer Bitrate mit der von AMBE messen.
Die Referenzimplementierung ist in C programmiert und kommt bisher nicht ohne Gleitkomma-Arithmetik aus, wobei das Verfahren an sich dies nicht verlangt. Das Referenz-Software-Paket enthält auch ein FDMDV-Software-Modem und eine graphische Oberfläche auf Basis von FLTK. Die Software wird auf Linux entwickelt und es wird neben einer Linux-Version auch ein mittels Cygwin erstellter Windows-Port angeboten.
Hauptentwickler Rowe vermied grundsätzlich Algorithmen, die von gültigen Patenten betroffen sind, indem er sein Verfahren grundlegend auf jahrzehntelang bekannte Techniken aufbaute. Allerdings ist bis zur Vorstellung auf der linux.conf.au im Januar 2012 noch keine umfassende Patent-Suche durchgeführt worden.

## Technik

Das Verfahren arbeitet mit Mitteln der Parametrischen Audiokodierung unter Benutzung eines Modells der menschlichen Stimme. Es nutzt unter anderem ein Sinusoidales Modell als Grundverfahren, welches auf Entwicklungen von Robert J. McAulay and Thomas F. Quatieri (MIT Lincoln labs) aus der Mitte der 1980er Jahre zurückgeht und eng mit dem der Multi-Band-Excitation-Codecs verwandt ist. Aus dem Eingangssignal werden Parameter zur Beschreibung von Linienspektrumspaaren (eine Art LPC-Koeffizienten), (Grund-)Tonhöhe, Energie und Stimmhaftigkeit des Signals bestimmt und quantisiert. Auf Empfängerseite wird daraus wieder ein PCM-Signal synthetisiert. Das Sinusoidale Modell stützt sich auf Regelmäßigkeiten (Periodizität) im Muster der Obertonfrequenzen und schichtet harmonisch Sinusoide über einer ermittelten Grundfrequenz. Die Amplituden der Oberfrequenzen werden mit Linear Predictive Coding (LPC) modelliert.

## Geschichte

Der prominente Freie-Software-Verfechter und Funkamateur Bruce Perens sah den Bedarf an einem freien Sprach-Codec für unter 5 kBit/s. Er sprach 2008 Jean-Marc Valin (Speex, Opus) darauf an, welcher ihn mit dem Hauptentwickler David Grant Rowe bekannt machte, der verschiedentlich mit Valin zusammen an Speex gearbeitet hat. Rowe ist selber auch Funkamateur (Rufzeichen VK5DGR) und hat Erfahrung mit der Erstellung und dem Einsatz von Codecs und anderen Signalverarbeitungsalgorithmen für Sprachsignale. Er hat unter anderem in den 1990er-Jahren einen Doktorgrad in Sprachkodierung erlangt und war am Aufbau eines der ersten Satellitentelefonie-Systeme (Mobilesat) beteiligt.
Rowe ließ sich von der Aufgabe überzeugen und gab am 21. August 2009 seine Entscheidung bekannt, an einem entsprechenden Codec arbeiten zu wollen. Er baute auf den Forschungen und Erkenntnissen aus seiner Doktorarbeit auf. Im August 2010 veröffentlichte er Version 0.1 alpha.
Gegen Ende 2011 wurde Version 0.2 veröffentlicht, die einen Modus mit 1.400 Bits/s einführt und wesentliche Verbesserungen bei der Quantisierung bringt.
Im Januar 2012 im Rahmen der linux.conf.au half Jean-Marc Valin mit der Verbesserung der Quantisierung der Linienspektrumspaare, womit sich Rowe weniger auskennt. Nach mehreren Änderungen an den verfügbaren Bitraten-Modi in Winter und Frühjahr 2011/2012 sind seit Mai Modi mit 2.400, 1.400 und 1.200 Bit/s verfügbar.
Im Juli 2018 wurde ein Modus mit 450 Bit/s veröffentlicht, der im Rahmen einer Masterarbeit an der Universität Erlangen-Nürnberg entwickelt wurde. Durch geschicktes Trainieren der Vektorquantisierung konnte die Datenrate aufbauend auf dem Prinzip des 700C-Modus weiter verringert werden.