| Constrained-Energy Lapped Transform | |
|---|---|
| Dateiendung: | keine |
| MIME-Type: | audio/celt |
| Entwickelt von: | Xiph.Org Foundation,IETF-Codec-Arbeitsgruppe |
| Erstveröffentlichung: | Dezember 2007 |
| Aktuelle Version | 0.11.1 (15. Februar 2011) |
| Art: | Audio |
| Enthalten in: | Ogg |
| Erweitert zu: | Opus |
| Standard(s): | aktueller IETF-Internet-Entwurf |
| opus-codec.org | |
Constrained-Energy Lapped Transform (CELT; deutsch etwa:überlappende Transformation mit vorgegebener Energie) ist ein (patent-)freies Datenformat/Verfahren zur verlustbehaftetenAudiodatenkompression mit besonders niedriger Codec-Latenz, um beiEchtzeit-Anwendungen in der Verarbeitung des typischerweise unmittelbar vor der komprimierten Übertragung erzeugten Signales möglichst wenig Verzögerung (Latenzzeit) zu verursachen. Das Verfahren ist offen dokumentiert und frei vonSoftwarepatentrestriktionen nutzbar. Es wurde von derXiph.Org Foundation (als Teil derOgg-Codec-Familie) und der Codec-Arbeitsgruppe derInternet Engineering Task Force (IETF) entwickelt, ist mittlerweile jedoch in der WeiterentwicklungOpus aufgegangen. Damit ist CELT als eigenständiges Format aufgegeben worden und wird nur noch in seiner mit SILK integrierten, hybridisierten Form als eine Schicht von Opus weiterentwickelt. Dieser Artikel behandelt das historische, eigenständige Format, für die integrierte Form und die seit der Integration in Opus erfolgten Weiterentwicklungen siehe den Artikel zu Opus.
Die Zielsetzung ist ein Verfahren für Echtzeit-Anwendungen.Zentrales angestrebtes Merkmal dafür ist niedrige Codec-Latenz. CELT ermöglicht Latenzen von typischerweise 3 bis 9 ms, jedoch konfigurierbar bis hinunter zu unter 2 ms, wobei niedrigere Latenzen mit höheren Bitraten für gleiche Qualität erkauft werden.[1] CELT unterbietet damit deutlich die mit anderen Standard-Codecs möglichen Latenzen.
Dabei ist es wie das SchwesterprojektVorbis ein breitbandiges (den gesamten menschlichenHörbereich abdeckendes) Allzweck-Verfahren, also ohne Spezialisierung auf bestimmte Arten von Signalen, was es von seinem anderen SchwesterprojektSpeex abhebt. Es verarbeitet Audio-Signale mitAbtastraten zwischen 32 und 96 kHz und bis zu zwei Kanälen (Stereofonie). Damit ermöglicht das Format prinzipielltransparente Ergebnisse, jedoch auch Bitraten von bis hinunter zu 24 kBit/s.[1] Die Kompressionsfähigkeiten sollen insgesamtMP3 deutlich überlegen sein. Als weitere für einige Echtzeit-Anwendungen wie Telefonie nützliche Eigenschaft weist CELT eine sehr gute Leistung bei niedrigen Bitraten auf. Hier soll die Klangqualität mit Hilfe der Frequenzbandfaltung auch Vorbis deutlich überlegen und sogar ähnlich der vonHE-AACv1 sein.[2][3] Auch erwies es sich in vergleichendenDoppelblind-Hörtests bei ~64 kBit/s deutlich als HE-AACv1 überlegen.[4]
Es hat eine vergleichsweise geringe Komplexität; der Berechnungsaufwand ähnelt dem der verzögerungsarmen Variante vonAAC (AAC-LD) und hält sich deutlich unter dem von Vorbis.[5]
Es ermöglicht konstante und variable Bitraten. Verschwindet in Sprechpausen und ähnlichen Fällen auf Encoder-Seite das Signal im Rauschteppich, so kann die Übertragung darauf beschränkt werden, dem Dekodierer die Überbrückung mit erzeugtemKomfortrauschen zu signalisieren. Die meisten Einstellungen desstreamingfähigen Formates können im laufenden Datenstrom gewechselt werden.
Das Format reagiert robust auf Übertragungsfehler. Sowohl der Verlust ganzer Pakete als auch Bitfehler können mit einer gleichmäßigen Zunahme an Störungen maskiert werden (Packet Loss Concealment, PLC).

CELT ist einTransformations-Codec auf Basis dermodifizierten diskreten Kosinustransformation (MDCT) und Ansätzen vonCELP (Codebuch zur Anregung, jedoch in der Frequenzdomäne).
Das ursprünglichePCM-codierte Signal wird für die MDCT (Fensterfunktion) in vergleichsweise kleine, überlappende Blöcke zerlegt und in Frequenzkoeffizienten transformiert. Durch die Wahl einer besonders geringen Blocklänge wird einerseits geringe Latenz ermöglicht, ergibt sich andererseits aber auch eine schlechte Frequenzauflösung, die ausgeglichen werden muss. Zur weiteren Reduzierung der Codec-Latenz auf Kosten geringfügiger Qualitätsverluste wird die ihrer Natur nach jeweils 50-prozentige Überlappung der MDCT-Zeitfenster praktisch halbiert, indem Anfang und Ende des Fensters für jeweils ein Achtel der Zeit das Signal auf Null gesetzt wird.[1] Unter anderem zur besseren Ausnutzung von blockübergreifenden Korrelationen trotz der sehr kurzen Blocklängen ist das Verfahrenzustandsbehaftet und stützt die Kodierung eines CELT-Blockes auf Daten vergangener Blöcke.
Die Koeffizienten werden gruppiert zuFrequenzgruppen, die weitgehend denen der menschlichen Wahrnehmung entsprechen. Der gesamte Energiegehalt jeder Gruppe wird ausgewertet und diese Energiewerte werdenquantisiert (=Datenreduktion) und mit einer Vorhersage komprimiert, indem nur noch Korrekturwerte zu den Vorhersagewerten übertragen werden müssen (Delta-Kodierung).
Aus den DCT-Koeffizienten werden jeweils die (unquantisierten) Energiewerte herausgerechnet (Normierung). Die Koeffizienten des somit erhaltenen Restsignales (englisch „band shape“) werden mitPyramid Vector Quantisation (PVQ, einer sphärischenVektorquantisierung)[6] kodiert. Diese Kodierung führt zu Codeworten von fester (vorhersehbarer) Länge, was Toleranz gegenüber Bitfehlern ermöglicht, und macht weiterhin eineEntropiekodierung überflüssig.[3] Zum Abschluss werden dennoch alle Ausgangsdaten des Encoders noch mit einerBereichskodierung zu einem einzigenBitstrom zusammengepackt.[7] In Verbindung mit der PVQ nutzt CELT eine als Frequenzbandfaltung bezeichnete Technik, die durch die Wiederverwendung von Koeffizienten tieferer für höhere Frequenzbänder ähnliches wie dieSpektralbandreplikation (SBR) leisten soll und dabei wesentlich niedrigere Implikationen für die Codec-Latenz und die Komplexität (Berechnungsaufwand) hat. Die dadurch erhöhte Reichhaltigkeit in den entsprechenden Frequenzbereichen verhindert die sonst üblicherweise auftretenden störenden Zwitscher-Artefakte (englisch „birdie artifacts“, „musical noise artifacts“).
Der Dekodierer entpackt den Bitstrom wieder in seine Bestandteile, multipliziert die errechneten separaten Energiewerte wieder mit den DCT-Koeffizienten des Restsignals zusammen und überführt sie mit der inversen MDCT wieder in PCM-Daten. Die einzelnen Blöcke werden mittels gewichtetersegmentierter Faltung (englisch „weighted overlap add“, WOLA) wieder zusammengefügt. Viele Parameter werden nicht explizit übertragen, sondern stattdessen im Dekodierer mittels derselben Funktion gewonnen, wie im Encoder.
Für dieKanalkopplung stehen bei CELTM/S-Stereo undPegeldifferenzstereophonie zur Verfügung. Blöcke können auch unabhängig beschrieben werden (Intra-kodierter Schlüsselblock), um zum Beispiel dem Dekodierer einen Einstieg in einen laufenden Datenstrom zu ermöglichen. Da bei Transformations-Codecs scharfe, energiereiche Klangereignisse (Transienten) hörbare Quantisierungsfehler im gesamten DCT-Block erzeugen können, welche vom Transienten in rückwärtiger zeitlicher Richtung weit weniger maskiert werden als danach, können als vorauseilende Echos wahrnehmbare Artefakte (englisch „pre-echo artifacts“) auftreten. Bei CELT können die Blöcke jeweils nochmal unterteilt werden, um solchen Artefakten entgegenzuwirken.
2005 arbeitete man bei Xiph im Rahmen des Ghost-Projekts erstmals an Plänen und Entwürfen für einen Vorbis-Nachfolger (anfangs im Gespräch als Vorbis II). Daraus entsprang neben den Codec-Plänen von Vorbis-SchöpferChristopher Montgomery, die zugunsten der Weiterentwicklung vonTheora gestoppt wurden, auchJean-Marc Valins Konzept für ein besonders latenzarmes Verfahren. Seit 2007 entwickelt Valin an CELT und übertrug am 29. November ersten Code ins Repositorium des Projektes.[3] Im Dezember 2007 wurde die erste Entwicklungsversion 0.0.1 veröffentlicht, zunächst benannt als Code-Excited Lapped Transform.[8] CELT liegt seit Juli 2009 bei derIETF als Vorschlag für einen freien Codec-Standard für Telekommunikation über das Internet vor[9][10], womit nun auch die Codec-Arbeitsgruppe der IETF an der Entwicklung beteiligt ist.
Ab Version 0.9 ist die bisher eingesetzteTonhöhen-Vorhersage in der Frequenz-Domäne durch eine weniger komplexe Lösung mit einem Vor- und einem Nachfilter in der Zeitdomäne ersetzt,[11] welche von Raymond Chen vonBroadcom beigesteuert wurde.[3]
Mit CELT 0.11 vom 4. Februar 2011 wurde dasBitstromformat vorläufig festgelegt – unter Vorbehalt eventueller, wider Erwarten nötiger letzter Änderungen.
Obwohl das Format noch nicht endgültig festgelegt ist, wird das Verfahren seit Januar 2009 in denIP-Telefonie-AnwendungenEkiga undFreeSWITCH sowie mittlerweile auchMumble,TeamSpeak und weiterer[12] Software verwendet. Kurz nach dem Erscheinen des Hybrid-CodecsOpus (früher bekannt als „Harmony“) ist CELT als Grundlage von Opus in diesem aufgegangen und wird ausschließlich im Rahmen dieses Nachfolgeprojektes weiterentwickelt.[13] Opus stellt eine Obermenge zu CELT und dem VerfahrenSILK dar, in dem die CELT-Algorithmen für einen oberen Frequenzanteil, die von SILK für den unteren zuständig sind. Der entsprechende Entwurf liegt bei der IETF seit September 2010 vor.
Im April 2011 wurde Unterstützung für CELT inFFmpeg aufgenommen.[14][15]
Referenzimplementierung ist eine in der ProgrammierspracheC geschriebeneProgrammbibliothek namens libcelt, die alsfreie Software unter Xiphs eigener dreiklausligerBSD-artiger Lizenz veröffentlicht wird.