PatentDe  


Dokumentenidentifikation DE69522979T2 25.04.2002
EP-Veröffentlichungsnummer 0673018
Titel Erzeugung von linearen Prädiktionskoeffizienten bei Ausfall von Datenrahmen oder Verlust von Datenpaketen
Anmelder AT&T Corp., New York, N.Y., US
Erfinder Chen, Juin-Hwey, Neshanic Station, New Jersey 08853, US;
Watkins, Craig Robert, Latham ACT 2615, AU
Vertreter derzeit kein Vertreter bestellt
DE-Aktenzeichen 69522979
Vertragsstaaten DE, ES, FR, GB, IT
Sprache des Dokument EN
EP-Anmeldetag 08.03.1995
EP-Aktenzeichen 953014883
EP-Offenlegungsdatum 20.09.1995
EP date of grant 04.10.2001
Veröffentlichungstag im Patentblatt 25.04.2002
IPC-Hauptklasse G10L 19/00
IPC-Nebenklasse G10L 19/12   

Beschreibung[de]
Technisches Gebiet

Die vorliegende Erfindung betrifft allgemein Sprachcodieranordnungen zur Verwendung in drahtlosen Kommunikationssystemen und insbesondere, wie derartige Sprachcodierer bei burstartigen Fehlern bei der drahtlosen Übertragung funktionieren.

Allgemeiner Stand der Technik

Viele Kommunikationssysteme, wie etwa zellulare Fernsprech- und persönliche Kommunikationssysteme, verwenden Funkkanäle, um Informationen zu übermitteln. Im Verlauf der Weiterleitung derartiger Informationen kann es bei Funkkommunikationskanälen zu verschiedenen Fehlerquellen kommen, wie etwa zum Mehrwegeschwund. Durch diese Fehler kann es unter anderem zu dem Problem der Rahmenlöschung kommen. Löschung bezieht sich auf den vollständigen Verlust oder die wesentliche Verfälschung einer zu einem Empfänger übermittelten Menge von Bit. Ein Rahmen ist eine vorbestimmte feste Anzahl von Bit.

Wenn ein Rahmen von Bit vollständig verlorengeht, dann kann der Empfänger keine Bit interpretieren. Unter solchen Umständen kann der Empfänger möglicherweise ein sinnloses Ergebnis erzeugen. Wenn ein Rahmen empfangener Bit verfälscht und deshalb unzuverlässig wird, kann der Empfänger möglicherweise ein stark verzerrtes Ergebnis erzeugen.

Mit dem Anstieg der Nachfrage nach Funksystemkapazität ist auch der Bedarf gestiegen, die zur Verfügung stehende Funksystembandbreite so gut wie möglich auszunutzen. Die effiziente Verwendung von Systembandbreite kann beispielsweise durch den Einsatz eines Signalkomprimierungsverfahrens verbessert werden. Zu diesem Zweck können bei Funksystemen, die Sprachsignale führen, Sprachkomprimierungsverfahren (oder Sprachcodiexverfahren) zum Einsatz kommen. Zu derartigen Sprachcodierverfahren zählen Analyse-durch- Synthese-Sprachcodierer, wie etwa der wohlbekannte CELP-Sprachcodierer (CELP = Code-Excited Linear Prediction).

Das Problem des Paketverlustes bei Paketvermittlungsnetzen mit Sprachcodieranordnungen hat große Ähnlichkeit mit der Rahmenlöschung im drahtlosen Kontext. Das bedeutet, daß aufgrund eines Paketverlustes ein Sprachcodierer einen Rahmen möglicherweise nicht empfängt oder einen Rahmen empfängt, bei dem eine wesentliche Anzahl von Bit fehlt. In beiden Fällen steht der Sprachcodierer vor demselben wesentlichen Problem, nämlich der Notwendigkeit, trotz des Verlustes komprimierter Sprachinformationen Sprache zu synthetisieren. Sowohl die "Rahmenlöschung" als auch der "Paketverlust" betreffen ein Kommunikationskanalproblem (oder Netzproblem), das zu dem Verlust übertragener Bit führt. Für die vorliegende Beschreibung kann unter dem Begriff "Rahmenlöschung" auch der Begriff "Paketverlust" verstanden werden.

Bei CELP-Sprachcodierern kommt unter anderem ein Codebuch von Anregungssignalen zum Codieren eines ursprünglichen Sprachsignals zum Einsatz. Diese Anregungssignale werden nach Skalierung durch einen Anregungsverstärkungsfaktor zum "Anregen" von linearprädiktiven Filtern (LPC-Filtern) verwendet, die als Reaktion auf die Anregung ein Sprachsignal (oder einen gewissen Vorläufer eines Sprachsignals) synthetisieren. Das synthetisierte Sprachsignal wird mit dem zu codierenden Signal verglichen. Es wird das Codebuchanregungssignal identifiziert, das am besten mit dem ursprünglichen Signal übereinstimmt. Dann wird der Codebuchindex des identifizierten Anregungssignals zu einem CELP-Decodierer übermittelt (je nach der Art des CELP-Systems können auch andere Arten von Informationen übermittelt werden). Der Decodierer enthält ein Codebuch, das mit dem des CELP-Codierers identisch ist. Der Decodierer wählt mit den übertragenen Indizes ein Anregungssignal aus seinem eigenen Codebuch aus. Mit diesem ausgewählten Anregungssignal wird dann das LPC-Filter des Decodierers angeregt. Das LPC-Filter des Decodierers erzeugt mit dieser Anregung ein decodiertes (oder quantisiertes) Sprachsignal, nämlich das gleiche Sprachsignal, von dem zuvor festgestellt wurde, daß es dem ursprünglichen Sprachsignal am ehesten entspricht.

Drahtlose und andere Systeme, bei denen Sprachcodierer zum Einsatz kommen, sind möglicherweise gegenüber dem Problem der Rahmenlöschung empfindlicher als solche Systeme, die Sprache nicht komprimieren. Diese Empfindlichkeit ist auf die reduzierte Redundanz codierter Sprache (im Vergleich zu nichtcodierter Sprache) zurückzuführen, so daß der mögliche Verlust jedes übertragenen Bit signifikanter wird. Im Kontext von CELP-Sprachcodierern, die eine Rahmenlöschung erfahren, können Anregungssignalcodebuchindizes entweder verlorengehen oder wesentlich verfälscht werden. Wegen dem bzw. den gelöschten Rahmen ist der CELP-Decodierer nicht in der Lage, zuverlässig zu identifizieren, welcher Eintrag in seinem Codebuch verwendet werden soll, um Sprache zu synthetisieren. Dadurch kann die Leistung des Sprachcodiersystems erheblich verschlechtert werden.

Als Folge verlorener Anregungssignalcodebuchindizes sind normale Verfahren zum Synthetisieren eines Anregungssignals in einem Sprachdecodierer unwirksam. Diese Verfahren müssen deshalb durch alternative Maßnahmen ersetzt werden. Ein weiteres Ergebnis des Verlusts von Codebuchindizes ist, daß die zur Verwendung bei der Erzeugung von Linearprädiktionskoeffizienten verfügbaren normalen Signale nicht verfügbar sind. Deshalb wird ein alternatives Verfahren zur Erzeugung dieser Koeffzienten benötigt.

Aus EP-A-0 459 358 A2 ist ein Sprachdecodierer bekannt, bei dem der Sprachdecodierer den Verlust eines Sprachrahmens verbirgt, indem er die Parameter ordnungsgemäßer Rahmen interpoliert, die vor und nach dem verlorenen Rahmen auftreten.

Aus Y. Tohkura et al., "Spectral Smoothing Technique in PARCOR Speech XP 002032606 Analysis-Synthesis", IEEE Transactions on Acoustics, Speech and Signal Processing, Dezember 1978, USA, Band ASSP-26, Nr. 6, ISSN 0096-3518, Seiten 587-596, ist ein Verfahren zur spektralen Glättung bekannt, bei dem ein Verspätungsfenster verwendet wird, daß Fehler bei der Abschätzung der zur Abschätzung von Formantparametern benötigten Bandbreite verbessert.

Aus J. H. Chen, "A Robust Low-Delay CELP Speech Coder at 16 KB/S", Advances in Speech Coding, Vancouver, Januar 1991, Seiten 25-35, ist ein Sprachcodierer/-decodierer mit niedriger Bitrate und geringer Latenz bekannt.

Die Erfindung wird in Anspruch 1 definiert. Bevorzugte Formen werden in den abhängigen Ansprüchen definiert.

Kurze Darstellung der Erfindung

Die vorliegende Erfindung erzeugt Linearprädiktionskoeffizientensignale bei Rahmenlöschung auf der Grundlage einer gewichteten Extrapolation von Linearprädiktionskoeffizientensignalen, die während nicht gelöschter Rahmen erzeugt wurden. Diese gewichtete Extrapolation erzielt eine Expandierung der Bandbreite von Spitzen im Frequenzgang eines Linearprädiktionsfilters.

Zum Beispiel werden während eines nicht gelöschten Rahmens erzeugte Linearprädiktionskoeffizientensignale in einem Pufferspeicher gespeichert. Wenn es zu einer Rahmenlöschung kommt, wird die letzte "gute" Menge von Koeffizientensignalen mit einem zu einem Exponenten erhobenen Bandbreitenexpandierungsfaktor gewichtet. Der Exponent ist der Index, der den interessierenden Koeffizienten identifiziert. Der Faktor ist eine Zahl in dem Intervall von 0,95 bis 0,99.

Kurze Beschreibung der Zeichnungen

Fig. 1 zeigt ein Blockschaltbild eines gemäß der vorliegenden Erfindung modifizierten G.728-Decodierers.

Fig. 2 zeigt ein Blockschaltbild eines beispielhaften Anregungssynthesizers von Fig. 1 gemäß der vorliegenden Erfindung.

Fig. 3 zeigt ein Flußdiagramm des Betriebs eines Anregungssyntheseprozessors von Fig. 2 im Synthesemodus.

Fig. 4 zeigt ein Flußdiagramm eines alternativen Betriebs des Anregungssyntheseprozessors von Fig. 2 im Synthesemodus.

Fig. 5 zeigt ein Flußdiagramm der durch den Bandbreitenexpandierer von Fig. 1 durchgeführten LPC- Parameterbandbreitenexpandierung.

Fig. 6 zeigt ein Blockschaltbild der durch den Synthesefilteradapter von Fig. 1 durchgeführten Signalverarbeitung.

Fig. 7 zeigt ein Blockschaltbild der durch den Vektorverstärkungsadapter von Fig. 1 durchgeführten Signalverarbeitung.

Fig. 8 und 9 zeigen eine modifizierte Version eine LPC-Synthesefilteradapters bzw. Vektorverstärkungsadapters für G.728.

Fig. 10 und 11 zeigen den LPC-Filterfrequenzgang bzw. eine bandbreitenexpandierte Version desselben.

Fig. 12 zeigt ein beispielhaftes drahtloses Kommunikationssystem gemäß der vorliegenden Erfindung.

Ausführliche Beschreibung I. Einführung

Die vorliegende Erfindung betrifft den Betrieb eines Sprachcodiersystems, das eine Rahmenlöschung erfährt, das heißt den Verlust einer Gruppe aufeinanderfolgender Bit in dem komprimierten Bitstrom, wobei diese Gruppe gewöhnlich zur Synthetisierung von Sprache verwendet wird. Die folgende Beschreibung betrifft Merkmale der vorliegenden Erfindung bei beispielhafter Anwendung auf das wohlbekannte verzögerungsarme 16-kb/s-CELP-(LD- CELP-)Sprachcodiersystem, das vom CCITT als der internationale Standard G.728 angenommen wurde (der als der Standard G.728 angenommene Entwurf der Empfehlung wird hiermit für den Leser als Anhang beigelegt; der Entwurf soll hier als "Entwurf G.728" bezeichnet werden). Ungeachtet dieser Beschreibung ist für Fachleute erkennbar, daß Merkmale der vorliegenden Erfindung auch auf andere Sprachcodiersysteme anwendbar sind.

Der Entwurf G.728 enthält ausführliche Beschreibungen des Sprachcodierers und -decodierers des Standards (siehe Entwurf G.728, Abschnitt 3 und 4). Das erste Ausführungsbeispiel betrifft Modifikationen des Decodierers des Standards. Obwohl zur Implementierung der vorliegenden Erfindung sind keine Modifikationen des Codierers erforderlich sind, kann die vorliegende Erfindung durch Codierermodifikationen ergänzt werden. Tatsächlich enthält ein unten beschriebenes beispielhaftes Sprachcodiersystem einen modifizierten Codierer.

Das Wissen um die Löschung eines oder mehrerer Rahmen ist ein Eingangssignal für das Ausführungsbeispiel der vorliegenden Erfindung. Ein derartiges Wissen kann auf eine beliebige der in der Technik wohlbekannten Weisen erhalten werden. So können zum Beispiel ganz oder teilweise verfälschte Rahmen mit einem herkömmlichen Fehlererkennungscode erkannt werden. Ein solcher Code würde als Teil eines herkömmlichen Funksende/- empfangsteilssystems eines drahtlosen Kommunikationssystems implementiert.

In der vorliegenden Beschreibung wird das Ausgangssignal des LPC-Synthesefilters des Decodierers gleichgültig ob im Sprachbereich oder in einem Bereich, der ein Vorläufer des Sprachbereichs ist, als das "Sprachsignal" bezeichnet. Außerdem ist der Klarheit halber ein beispielhafter Rahmen ein ganzzahliges Vielfaches der Länge eines Adaptionszyklus des Standards G.728. Diese beispielhafte Rahmenlänge ist tatsächlich vernünftig und ermöglicht eine Darstellung der Erfindung in aller Allgemeinheit. Zum Beispiel kann angenommen werden, daß ein Rahmen eine Dauer von 10 ms oder viermal der Länge eines G.728-Adaptionszyklus aufweist. Der Adaptionszyklus beträgt 20 Abtastwerte und entspricht einer Dauer von 2,5 ms.

Zur einfacheren Erklärung wird das Ausführungsbeispiel der vorliegenden Erfindung in Form einzelner Funktionsblöcke dargestellt. Die Funktionen dieser Blöcke können durch Verwendung entweder gemeinsam benutzter oder eigener Hardware bereitgestellt werden, einschließlich beispielsweise Hardware, die Software ausführen kann. So können beispielsweise die in Fig. 1, 2, 6 und 7 dargestellten Blöcke durch einen einzigen, gemeinsam benutzten Prozessor bereitgestellt werden. (Die Verwendung des Ausdrucks "Prozessor" sollte nicht so ausgelegt werden, daß sie sich ausschließlich auf Hardware bezieht, die Software ausführen kann.)

Ausführungsbeispiele können Hardware in Form eines digitalen Signalprozessors (DSP), wie etwa den AT&T DSP16 oder DSP32C, einen Nur-Lese-Speicher (ROM) zum Speichern von Software, die die unten erörterten Operationen durchführt, und einen Direktzugriffsspeicher (RAM) zum Speichern von DSP- Ergebnissen umfassen. Höchstintegrierte Ausführungsformen (VLSI) sowie kundenspezifische VLSI- Schaltungen in Kombinationen mit einer Vielzweck-DSP- Schaltung können ebenfalls bereitgestellt werden.

II. Ein Ausführungsbeispiel

Fig. 1 zeigt ein Blockschaltbild eines gemäß der vorliegenden Erfindung modifizierten G.728-LD-CELP- Decodierers dar (Fig. 1 ist eine modifizierte Version von Fig. 3 des Entwurfs G.728). Bei normalem Betrieb (d.h. ohne Rahmenlöschung) wirkt der Decodierer gemäß G.728. Er empfängt zunächst Codebuchindizes i aus einem Kommunikationskanl. Jeder Index stellt einen Vektor von fünf Anregungssignalabtastwerten dar, die dem Anregungs-VQ-Codebuch 29 entnommen werden können. Das Codebuch 29 umfaßt Verstärkungs- und Formcodebücher gemäß der Beschreibung in dem Entwurf G.728. Das Codebuch 29 verwendet jeden abgerufenen Index, um einen Anregungscodevektor zu entnehmen. Der entnommene Codevektor ist der Vektor, der vom Codierer als die beste Übereinstimmung mit dem ursprünglichen Signal bestimmt wurde. Jeder entnommene Anregungscodevektor wird durch das Verstärkungsglied 31 skaliert. Der Verstärker 31 multipliziert jeden Abtastwert des Anregungsvektors mit einer Verstärkung, die durch den Vektorverstärkungsadapter 300 bestimmt wird (die Funktionsweise des Vektorverstärkungsadapter 300 wird später beschrieben). Jeder skalierte Anregungsgvektor ET wird einem Anregungssynthesizer 100 als Eingangssignal zugeführt. Wenn keine Rahmenlöschung auftritt, gibt der Synthesizer 100 einfach die skalierten Anregungsvektorern unverändert aus. Jeder skalierte Anregungsvektorer wird dann einem LPC- Synthesefilter 32 als Eingangssignal zugeführt. Das LPC-Synthesefilter 32 verwendet LPC-Koeffizienten, die durch einen Synthesefilteradapter 330 durch den Schalter 120 bereitgestellt werden (der Schalter 120 ist gemäß der "gestrichelten" Linie konfiguriert, wenn keine Rahmenlöschung auftritt; die Funktionsweise des Synthesefilteradapters 330, des Schalters 120 und des Bandbreitenexpandierers 115 werden später besprochen). Das Filter 32 erzeugt decodierte (oder "quantisierte") Sprache. Das Filter 32 ist ein Synthesefilter 50. Ordnung, das Periodizität in das decodierte Sprachsignal einführen kann (eine solche Periodizitätsvergrößerung erfordert im allgemeinen ein Filter mit einer Ordnung von mehr als 20). Gemäß dem Standard G.728 wird diese decodierte Sprache dann durch den Betrieb des Nachfilters 34 und des Nachfilteradapters 35 nachgefiltert. Nach der Nachfilterung wird das Format der decodierten Sprache durch den Formatumsetzer 28 in ein entsprechendes standardmäßiges Format umgesetzt. Diese Formatumsetzung erleichtert die spätere Verwendung der decodierten Sprache durch andere Systeme.

A. Anregungssignalsynthese während Rahmenlöschung

Wenn Rahmenlöschungen vorliegen, empfängt der Decodierer von Fig. 1 keine zuverlässigen Informationen (wenn überhaupt etwas) darüber, welcher Vektor von Anregungssignalabtastwerten aus dem Codebuch 29 entnommen werden sollen. In diesem Fall muß der Decodierer ein Ersatz-Anregungssignal zur Verwendung bei der Synthetisierung eines Sprachsignals erhalten. Die Erzeugung eines Ersatz-Anregungssignal in Zeiten der Rahmenlöschung wird durch den Anregungssynthesizer 100 erzielt.

Fig. 2 zeigt ein Blockschaltbild eines beispielhaften Anregungssynthesizers 100 gemäß der vorliegenden Erfindung. Während Rahmenlöschungen erzeugt der Anregungssynthesizer 100 einen oder mehrere Vektoren von Anregungssignalabtastwerten auf der Grundlage zuvor bestimmter Anregungssignalabtastwerte. Die zuvor bestimmten Anregungssignalabtastwerte wurden mit Hilfe der zuvor empfangenen Codebuchindizes entnommen, die aus dem Kommunikationskanal empfangen wurden. Wie in Fig. 2 gezeigt enthält der Anregungssynthesizer 100 Tandemschalter 110, 130 und den Anregungssyntheseprozessor 120. Die Schalter 110, 130 reagieren auf ein Rahmenlöschungssignal, um den Modus des Synthesizers 100 zwischen dem Normalmodus (keine Rahmenlöschung) und dem Synthesemodus (Rahmenlöschung) umzuschalten. Das Rahmenlöschungssignal ist ein binäres Flag, das anzeigt, ob der aktuelle Rahmen normal (z.B. ein Wert von "0") oder gelöscht (ein Wert von "1") ist. Dieses binäre Flag wird für jeden Rahmen aufgefrischt.

1. Normalmodus

Im Normalmodus (gestrichelte Linien in den Schaltern 110 und 130) empfängt der Synthesizer 100 verstärkungsskalierte Vektoren ET (die jeweils fünf Anregungssignalabtastwerte umfassen) und leitet diese Vektoren zu seinem Ausgang. Vektorabtastwerte werden außerdem zu dem Anregungssyntheseprozessor 120 weitergeleitet. Der Prozessor 120 speichert diese Abtastwerte in einem Puffer ETPAST zur späteren Verwendung im Fall von Rahmenlöschung. ETPAST hält 200 der jüngsten Anregungssignalabtastwerte (d.h. 40 Vektoren), um eine Vorgeschichte jüngst empfangener (oder synthetisierter) Anregungssignalwerte bereitzustellen. Wenn ETPAST voll ist, bewirkt jeder nachfolgende Vektor von fünf Abtastwerten, der in den Puffer geschoben wird, daß der älteste Vektor von fünf Abtastwerten aus dem Puffer herausfällt. (Wie später unter Bezugnahme auf den Synthesemodus besprochen wird, kann die Vorgeschichte von Vektoren die Vektoren enthalten, die im Fall von Rahmenlöschung erzeugt werden.)

2. Synthesemodus

Im Synthesemodus (durchgezogene Linien in den Schaltern 110 und 130) entkoppelt der Synthesizer 100 den Anregungsvektoreingang und koppelt den Anregungssyntheseprozessor 120 an den Synthesizerausgang an. Der Prozessor 120 wirkt als Reaktion auf das Rahmenlöschungssignal, um Anregungssignalvektoren zu synthetisieren.

Fig. 3 zeigt ein Flußdiagramm des Betriebs eines Prozessors 120 im Synthesemodus. Zu Beginn der Verarbeitung bestimmt der Prozessor 120, ob ein gelöschter Rahmen bzw. gelöschte Rahmen wahrscheinlich stimmhafte Sprache enthielten (siehe Schritt 1201) Dies kann durch herkömmliche Erkennung stimmhafter Sprache an vergangenen Sprachabtastwerten erfolgen. Im Kontext des G.728-Decodierers ist ein Signal PTAP (aus dem Nachfilter) verfügbar, das bei dem Prozeß der Entscheidung über stimmhafte Sprache verwendet werden kann. PTAP stellt das optimale Gewicht eines Tonhöhenprädiktors mit einem Abgriff für die decodierte Sprache dar. Wenn PTAP groß ist (z.B. in der Nähe von 1), dann war die gelöschte Sprache wahrscheinlich stimmhaft. Wenn PTAP klein ist (z.B. nahe bei 0), dann war die gelöschte Sprache wahrscheinlich nicht stimmhaft (d.h. nicht stimmhafte Sprache, Stille, Rauschen). Eine empirisch bestimmte Schwelle VTH dient zur Entscheidung zwischen stimmhafter und nicht stimmhafter Sprache. Diese Schwelle ist gleich 0,6/1,4 (wobei 0,6 eine von dem G.728-Nachfdilter verwendete Stimmenschwelle und 1,4 eine experimentell bestimmte Zahl ist, die die Schwelle reduziert, um stimmhafte Sprache sicherer zu erkennen).

Wenn bestimmt wird, daß der gelöschte Rahmen bzw. die gelöschten Rahmen stimmhafte Sprache enthielten, wird ein neuere verstärkungsskalierter Anregungsvektor ET synthetisiert, indem ein Vektor von Abtastwerten in dem Puffer ETPAST gefunden wird, von denen der erste KP Abtastwerte in der Vergangenheit liegt (siehe Schritt 1204). KP ist ein Abtastzählwert, der einer Tonhöhenperiode stimmhafter Sprache entspricht. KP kann auf herkömmliche Weise aus decodierter Sprache bestimmt werden; in dem Nachfilter des G.728-Decodierers wurde dieser Wert jedoch bereits berechnet. Die Synthese eines neuen Vektors ET umfaßt also eine Extrapolation (z.B. ein Kopieren) einer Menge von 5 aufeinanderfolgenden Abtaswerten in die Gegenwart. Der Puffer ETPAST wird so aktualisiert, daß er den letzten synthetisierten Vektor von Abtastwerten ET wiedergibt (siehe Schritt 1206). Dieser Prozeß wird wiederholt, bis ein guter (nicht gelöschter) Rahmen empfangen wird (siehe Schritt 1208 und 1209). Der Prozeß der Schritte 1204, 1206, 1208 und 1209 kommt einer periodischen Wiederholung der letzten KP Abtastwerte von ETPAST gleich und erzeugt eine periodische Folge von ET- Vektoren in dem gelöschten Rahmen bzw. den gelöschten Rahmen (wobei KP die Periode ist). Wenn ein guter (nicht gelöschter) Rahmen empfangen wird, endet der Prozeß.

Wenn bestimmt wird, dAß der gelöschte Rahmen bzw. die gelöschten Rahmen nicht stimmhafte Sprache enthielten (Schritt 1201), dann wird eine andere Syntheseprozedur implementiert. Eine beispielhafte Synthese von ET- Vektoren basiert auf einer randomisierten Extrapolation von Gruppen von fünf Abtastwerten in ETPAST. Diese randomisierte Extrapolationsprozedur beginnt mit der Berechnung eines mittleren Betrags der letzten 40 Abtastwerte von ETPAST (siehe Schritt 1210). Dieser mittlere Betrag wird als AVMAG bezeichnet. AVMAG wird in einem Prozeß verwendet, der sicherstellt, daß extrapolierte ET-Vektorabtastwerte denselben mittleren Betrag wie die letzten 40 Abtastwerte von ETPAST aufweisen.

Eine ganzzahlige Zufallszahl NUMR wird erzeugt, um ein Maß an Zufälligkeit in den Anregungssyntheseprozeß einzuführen. Diese Zufälligkeit ist wichtig, weil der gelöschte Rahmen nicht stimmhafte Sprache enthielt (wie im Schritt 1201 bestimmt wurde). NUMR kann einen beliebigen ganzzahligen Wert zwischen einschließlich 5 und 40 annehmen (siehe Schritt 1212). Fünf aufeinanderfolgende Abtastwerte von ETPAST werden dann gewählt, von denen der älteste NUMR Abtastwerte in der Vergangenheit liegt (siehe Schritt 1214). Der mittlere Betrag dieser gewählten Abtastwerte wird dann berechnet (siehe Schritt 1216). Dieser mittlere Betrag wird als VECAV bezeichnet. Ein Skalenfaktor SF wird als das Verhältnis von AVMAG und VECAV berechnet (siehe Schritt 1218). Jeder aus ETPAST gewählte Abtastwert wird dann mit SF multipliziert. Die skalierten Abtastwerte werden dann als die synthetisierten Abtastwerte von ET verwendet (siehe Schritt 1220). Diese synthetisierten Abtastwerte werden außerdem verwendet, um ETPAST wie oben (siehe Schritt 1222) beschrieben zu aktualisieren.

Wenn mehr synthetisierte Abtastwerte benötigt werden, um einen gelöschten Rahmen zu füllen (siehe Schritt 1224), dann werden die Schritte 1212-1222 wiederholt, bis der gelöschte Rahmen gefüllt wurde. Wenn ein nachfolgender Rahmen bzw. nachfolgende Rahmen ebenfalls gelöscht wurde(n) (siehe Schritt 1226), werden die Schritte 1210-1224 wiederholt, um den/die nachfolgenden gelöschten Rahmen zu füllen. Wenn alle nachfolgenden gelöschten Rahmen mit synthetisierten ET-Vektoren gefüllt sind, endet der Prozeß.

3. Alternativer Synthesemodus für nicht stimmhafte Sprache

Fig. 4 zeigt ein Flußdiagramm eines alternativen Betriebs des Anregungs Prozessors 120 im Synthesemodus. Bei dieser Alternative ist die Verarbeitung für stimmhafte Sprache mit der oben unter Bezugnahme auf Fig. 3 beschriebenen identisch. Der Unterschied zwischen den Alternativen liegt in der Synthese von ET- Vektoren für nicht stimmhafte Sprache. Aus diesem Grund ist in Fig. 4 nur die nicht stimmhafter Sprache zugeordnete Verarbeitung gezeigt.

Wie in der Figur gezeigt, beginnt die Synthese von ET- Vektoren für nicht stimmhafte Sprache mit der Berechnung von Korrelationen zwischen dem jüngsten Block von 30 Abtastwerten, die in dem Puffer ETPAST gespeichert werden, und jedem anderen Block von 30 Abtastwerten von ETPAST, der dem jüngsten Block um zwischen 31 und 170 Abtastwerten hinterherliegt (siehe Schritt 1230). Zum Beispiel werden die jüngsten 30 Abtastwerte von ETPAST zuerst mit einem Block von Abtastwerten zwischen den ETPAST-Abtastwerten 32-61 korrelliert. Als nächstes wird der jüngste Block von 30 Abtastwerten mit Abtastwerten von ETPAST zwischen einschließlich 33-62 korreliert usw. Der Prozeß wird für alle Blöcke von 30 Abtastwerten bis zu dem Block fortgesetzt, der die Abtastwerten zwischen einschließlich 171-200 enthält.

Für alle berechneten Korrelationswerte, die größer als ein Schwellenwert THC sind, wird eine Zeitverspätung (MAXI) bestimmt, die der maximalen Korrelation entspricht (siehe Schritt 1232).

Als nächstes erfolgen Prüfungen, um zu bestimmen, ob der gelöschte Rahmen wahrscheinlich eine sehr geringe Periodizität aufwies. Unter Bedingungen solch einer geringen Periodizität ist es vorteilhaft, die Einführung künstlicher Periodizität in den ET- Vektorsyntheseprozeß zu vermeiden. Dazu wird der Wert der Zeitverspätung MAXI variiert. Wenn entweder (i) PTAP kleiner als eine Schwelle VTH1 ist (siehe Schritt 1234) oder (ii) die maximale Korrelation, die MAXI entspricht, kleiner als eine Konstante MAXC ist (siehe Schritt 1236), dann wird eine sehr geringe Periodizität vorgefunden. Folglich wird MAXI um 1 erhöht (siehe Schritt 1238). Wenn weder die Bedingungen (i) noch die Bedingung (ii) erfüllt ist, wird MAXI nicht erhöht. Beispielhafte Werte für VTH1 und MAXC sind 0,3 bzw. 3 · 10&sup7;.

MAXI wird dann als ein Index zur Entnahme eines Vektors von Abtastwerten aus ETPAST verwendet. Der früheste der entnommenen Abtastwerte liegt MAXI Abtastwerte in der Vergangenheit. Diese entnommenen Abtastwerte dienen als der nächste ET-Vektor (siehe Schritt 1240). Wie zuvor wird der Puffer ETPAST mit den neuesten ET- Vektorabtastwerten aktualisiert (siehe Schritt 1242).

Wenn zusätzliche Abtastwerte benötigt werden, um den gelöschten Rahmen zu füllen (siehe Schritt 1244), dann werden die Schitte 1234-1242 wiederholt. Nachdem alle Abtastwerte in dem gelöschten Rahmen gefüllt wurden, werden durch Wiederholen der Schritte 1230-1244 Abtastwerte in jedem nachfolgenden gelöschten Rahmen gefüllt (siehe Schritt 1246). Wenn alle aufeinanderfolgenden gelöschten Rahmen mit synthetisierten ET-Vektoren gefüllt sind, endet der Prozeß.

B. LPC-Filterkoeffizienten für gelöschte Rahmen

Zusätzlich zu der Synthese verstärkungsskalierter Anregungsvektoren ET müssen während gelöschter Rahmen LPC-Filterkoeffizienten erzeugt werden. Gemäß der vorliegenden Erfindung werden LPC-Filterkoeffizienten für gelöschte Rahmen durch eine Bandbreitenexpandierungsprozedur erzeugt. Diese Bandbreitenexpandierungsprozedur hilft dabei, die Unbestimmtheit in dem LPC-Filterfrequenzgang in gelöschten Rahmen zu berücksichtigen. Die Bandbreitenexpandierung mäßigt die Schärfe von Spitzen im LPC-Filterfrequenzgang.

Fig. 10 zeigt einen beispielhaften LPC- Filterfrequenzgang, der auf LPC-Koeffizienten basiert, die für einen nicht gelöschten Rahmen bestimmt wurden. Es ist ersichtlich, daß der Frequenzgang "Spitzen" enthält. Die richtige Lage dieser Spitzen bei Rahmenlöschung ist zu einem gewissen Grade unbestimmt. Zum Beispiel könnte der korrekte Frequenzgang für einen folgenden Rahmen wie der Frequenzgang von Fig. 10 aussehen, wobei die Spitzen nach rechts oder nach links verschoben sind. Während der Rahmenlöschung müssen, da keine decodierte Sprache zur Bestimmung von LPC- Koeffizienten verfügbar ist, diese Koeffizienten (und daher der Filterfrequenzgang) abgeschätzt werden. Eine solche Abschätzung kann durch Bandbreitenexpandierung erzielt werden. Das Ergebnis einer beispielhaften Bandbreitenexpandierung ist in Fig. 11 gezeigt. Wie aus Fig. 11 ersichtlich ist, werden die Spitzen des Frequenzgangs gedämpft, so daß sich eine expandierte 3- dB-Bandbreite der Spitzen ergibt. Diese Dämpfung hilft dabei, Verschiebungen in einem "korrekten" Frequenzgang zu berücksichtigen, die wegen der Rahmenlöschung nicht bestimmt werden kann.

Gemäß dem Standard G.728 werden LPC-Koeffizienten bei dem dritten Vektor jedes Vier-Vektor-Adaptionszyklus aktualisiert. Das Vorliegen gelöschter Rahmen muß diese Zeitsteuerung nicht stören. Wie bei dem herkömmlichen G.728 werden bei dem dritten Vektor ET während eines Rahmens neue LPC-Koeffizienten berechnet. In diesem Fall werden die ET-Vektoren jedoch während eines gelöschten Rahmens synthetisiert.

Wie in Fig. 1 gezeigt, enthält die Ausführungsform einen Schalter 120, einen Puffer 110 und einen Bandbreitenexpandierer 115. Während des normalen Betriebs befindet sich der Schalter 120 in der durch die gestrichelte Linie angegebenen Stellung. Das heißt, daß die LPC-Koeffizienten ai durch den Synthesefilteradapter 33 dem LPC-Synthesefilter zugeführt werden. Jede Menge frisch aktualisierter Koeffizienten ai wird in dem Puffer 110 gespeichert (wobei jede neue Menge die zuvor gesicherte Menge von Koeffizienten überschreibt). Vorteilhafterweise muß der Bandbreitenexpandierer 115 nicht im Normalmodus arbeiten (im Normalmodus bleibt sein Ausgangssignal unbenutzt, da sich der Schalter 120 in der gestrichelten Stellung befindet).

Wenn eine Rahmenlöschung auftritt, wechselt der Schalter 120 seinen Zustand (wie durch die durchgezogene Stellung gezeigt wird). Der Puffer 110 enthält die letzte Menge von LPC-Koeffizienten aus der Berechnung mit Sprachsignalabtastwerten des letzten guten Rahmens. Beim dritten Vektor des gelöschten Rahmens berechnet der Bandbreitenexpandierer 115 neue Koeffizienten a'i.

Fig. 5 ist ein Flußdiagramm der durch den Bandbreitenexpandierer 115 durchgeführten Verarbeitung zur Erzeugung neuer LPC-Koeffizienten. Wie in der Figur gezeigt, entnimmt der Expandierer 115 dem Puffer 110 die zuvor gesicherten LPC-Koeffizienten (siehe Schritt 1151). Die neuen Koeffizienten a;i werden gemäß Gleichung (1) erzeugt:

a' = (BEF)ia'i, i ≤ i ≤ 50, (1)

wobei BEF ein Bandbreitenexpandierungsfaktor ist beispielsweise einen Wert in dem Bereich von 0,95-0.99 annimmt und vorteilhafterweise auf 0,97 oder 0,98 eingestellt wird (siehe Schritt 1153). Diese neu berechneten werden dann ausgegeben (siehe Schritt 1155). Man beachte, daß die Koeffizienten a'i nur einmal für jeden gelöschten Rahmen berechnet werden.

Die neu berechneten Koeffizienten werden von dem LPC- Synthesefilter 32 für den gesamten gelöschten Rahmen verwendet. Das LPC-Synthesefilter verwendet die neuen Koeffizienten so, als ob sie unter normalen Umständen durch den Adapter 33 erzeugt worden wären. Die neu berechneten LPC-Koeffizienten werden außerdem in dem Puffer 110 gespeichert (siehe Fig. 1). Bei aufeinanderfolgenden Rahmenlöschungen würden die in dem Puffer 110 gespeicherten neu berechneten LPC- Koeffizienten als Grundlage für eine weitere Iteration der Bandbreitenexpandierung gemäß dem in Fig. 5 dargestellten Prozeß verwendet. Je größer die Anzahl von aufeinanderfolgenden gelöschten Rahmen, desto größer ist also die angewandte effektive Bandbreitenexpandierung (d.h. für den k-ten gelöschten Rahmen einer Folge gelöschter Rahmen beträgt der effektive Bandbreitenexpandierungsfaktor BEFk).

Anstelle des oben beschriebenen Bandbreitenexpandierungsverfahrens könnten andere Verfahren zur Erzeugung von LPC-Koeffizienten während gelöschter Rahmen verwendet werden. Zu diesen gehören (i) die wiederholte Verwendung der letzten Menge von LPC- Koeffizienten aus dem letzten guten Rahmen und (ii) die Verwendung des synthetisierten Anregungssignals in dem herkömmlichen G. 728-LPC-Adapter 33.

C. Betrieb von Rückwärtsadaptern während rahmengelöschter Rahmen

Der Decodierer des Standards G.728 enthält einen Synthesefilteradapter und einen Vektorverstärkungsadapter (Blöcke 33 bzw. 30 von Fig. 3, sowie Fig. 5 bzw. Fig. 6 des Entwurfs G.728). Beim normalen Betrieb (d.h. Betrieb bei Abwesenheit von Rahmenlöschung) verändern diese Adapter dynamisch bestimmte Parameterwerte auf der Grundlage von Signalen, die in dem Decodierer vorliegen. Der Decodierer des Ausführungsbeispiels enthält außerdem einen Synthesefilteradapter 330 und einen Vektorverstärkungsadapter 300. Wenn keine Rahmenlöschung auftritt, wirken der Synthesefilteradapter 330 und der Vektorverstärkungsadapter 300 gemäß dem Standard G.728. Die Funktionsweise der Adapter 330, 300 unterscheidet sich von den entsprechenden Adaptern 33, 30 von G.728 nur während gelöschter Rahmen.

Wie bereits besprochen wurde, wird während des Auftretens gelöschter Rahmen weder die Aktualisierung von LPC-Koeffizienten durch den Adapter 330 noch die Aktualisierung von Verstärkungsprädiktorparametern durch den Adapter 300 benötigt. Im Fall der LPC- Koeffizienten besteht der Grund dafür darin, daß solche Koeffizienten durch eine Bandbreitenexpandierungsprozedur erzeugt werden. Im Fall der Verstärkungsprädiktorparameter besteht der Grund dafür darin, daß die Anregungssynthese im verstärkungsskalierten Bereich durchgeführt wird. Da die Ausgaben der Blöcke 330 und 300 während gelöschter Rahmen nicht benötigt werden, können die durch diese Blöcke 330, 300 durchgeführten Signalverarbeitungsoperationen modifiziert werden, um die rechnerische Komplexität zu verringern.

Wie in Fig. 6 bzw. 7 zu sehen ist, enthalten die Adapter 330 und 300 jeweils mehrere Signalverarbeitungsschritte, die durch Blöcke angegeben sind (Blöcke 49-51 in Fig. 6; Blöcke 39-48 und 67 in Fig. 7). Diese Blöcke sind im allgemeinen dieselben wie die im Entwurf G.728 definierten. In dem ersten guten Rahmen nach einem oder mehreren gelöschten Rahmen bilden beide Blöcke 330 und 300 Ausgangssignale auf der Grundlage von Signalen, die sie während eines gelöschten Rahmens im Speicher gespeichert haben. Vor der Speicherung wurden diese Signale von den Adaptern auf der Grundlage eines während eines gelöschten Rahmens erzeugten Anregungssignals erzeugt. Im Fall des Synthesefilteradapters 330 wird das Anregungssignal zunächst vor der Verwendung durch den Adapter zu quantisierter Sprache synthetisiert. Im Fall des Vektorverstärkungsadapters 300 wird das Anregungssignal direkt verwendet. In beiden Fällen müssen beide Adapter während eines gelöschten Rahmens Signale erzeugen, so daß beim Auftreten des nächsten guten Rahmens das Adapterausgangssignal bestimmt werden kann.

Vorteilhafterweise kann während gelöschter Rahmen eine verminderte Anzahl von normalerweise durch die Adapter von Fig. 6 und 7 durchgeführten Signalverarbeitungsoperationen durchgeführt werden. Die durchgeführten Operationen sind diejenigen, die entweder (i) für die Bildung und Speicherung von Signalen, die bei der Bildung der Adapterausgabe in einem nachfolgenden guten (d.h. nicht gelöschten) Rahmen benötigt werden, oder (ii) für die Bildung von Signalen benötigt werden, die von anderen Verarbeitungsblöcken des Decoders während gelöschter Rahmen verwendet werden. Es sind keine zusätzlichen Signalverarbeitungsoperationen notwendig. Die Blöcke 330 und 300 führen als Reaktion auf den Empfang des Rahmenlöschungssignals weniger Signalverarbeitungsoperationen durch (siehe Fig. 1, 6 und 7). Das Rahmenlöschungssignal fordert entweder eine modifizierte Verarbeitung auf oder bewirkt, daß das Modul nicht arbeitet.

Man beachte, daß eine Verringerung der Anzahl von Signalverarbeitungsoperationen als Reaktion auf eine Rahmenlöschung nicht für den ordnungsgemäßen Betrieb erforderlich ist; die Blöcke 330 und 300 könnten normal arbeiten, als ob keine Rahmenlöschung aufgetreten wäre, wobei ihre Ausgangssignale wie oben besprochen ignoriert werden. Unter normalen Bedingungen werden Die Operationen (i) und (ii) werden unter normalen Bedingungen durchgeführt. Durch verringerte Signalverarbeitungsoperationen kann die Gesamtkomplexität des Codierers jedoch innerhalb des Komplexitätsgrads bleiben, der für einen G.728-Decodierer unter normalen Bedingungen festgelegt wird. Ohne die Operationen zu verringern, würden die zusätzlichen Operationen, die erforderlich sind, um ein Anregungssignal zu synthetisieren und einen Bandbreitenexpandierung von LPC-Koeffizienten durchzuführen, die Gesamtkomplexität des Decodierers erhöhen.

Im Fall des in Fig. 6 dargestellten Synthesefilteradapters 330 und unter Bezugnahme auf den Pseudocode, der bei der Besprechung des "HYBRID WINDOWING MODULE" auf den Seiten 28-29 des Entwurfs G.728 angegeben wird, umfaßt eine beispielhafte verringerte Menge von Operationen (i) das Aktualisieren des Pufferspeichers SB unter Verwendung der synthetisierten Sprache (die durch Leiten extrapolierter ET-Vektoren durch eine bandbreitenexpandierte Version des letzten guten LPC- Filters erhalten wird) und (ii) das Berechnen von REXP auf die angegebene Weise unter Verwendung des aktualisierten SB-Puffers.

Da die G.728-Ausführungsform ein Nachfilter verwendet, das LPC-Koeffizienten 10. Ordnung und den ersten Reflexionskoeffizienten während gelöschter Rahmen verwendet, umfaßt die beispielhafte Menge verringerter Operationen (iii) die Erzeugung von Signalwerten RTMP(1) bis RTMP(11) (RTMP(12) bis RTMP(51) werden nicht benötigt) und (iv) mit Bezug auf den Pseudocode, der bei der Besprechung des "LEVINSON-DURBIN RECURSION MODULE" auf den Seiten 29-30 des Entwurfs G.728 angegeben ist, wird die Levinson-Durbin-Rekursion von der Ordnung 1 bis zu der Ordnung 10 durchgeführt (wobei die Rekursion von Ordnung 11 bis Ordnung 50 nicht benötigt wird). Man beachte, daß keine Bandbreitenexpandierung durchgeführt wird.

Im Fall des in Fig. 7 dargestellten Vektorverstärkungsadapters 300 umfaßt eine beispielhafte verringerte Menge von Operationen (1) die Operationen der Blöcke 67, 39, 40, 41 und 42, die zusammen die logarithmische Verstärkung mit entferntem Offset (auf der Grundlage synthetisierter ET-Vektoren) und GTMP, die Eingabe für den Block 43 berechnen; (ii) mit Bezug auf den Pseudocode, der bei der Besprechung des "HYBRID WINDOWING MODULE" auf den Seiten 32-33 angegeben wird, die Operationen des Aktualisierens des Pufferspeichers SBLG mit GTMP und des Aktualisierens von REXPLG, der rekursiven Komponente der Autokorrelationsfunktion; und (iii) mit Bezug auf den Pseudocode, der bei der Besprechung des "LOG-GAIN LINEAR PREDICTOR" auf Seite 34 angegeben wird, die Operation des Aktualisierens des Filterspeichers GSTATE mit GTMP. Man beachte, daß die Funktionen der Module 44, 45, 47 und 48 nicht durchgeführt werden.

Als Ergebnis der Durchführung der verringerten Menge von Operationen während gelöschter Rahmen (statt alle Operationen), kann sich der Decodierer ordnungsgemäß auf den nächsten guten Rahmen vorbereiten und während gelöschter Rahmen etwaige benötigte Signale bereitstellen und gleichzeitig die rechnerische Komplexität des Decodierers verringern.

D. Modifikation des Codierers

Wie bereits erwähnt, erfordert die vorliegenden Erfindung keine Modifikation des Codierers des Standards G.728. Solche Modifikationen können jedoch unter bestimmten Umständen vorteihaft sein. Wenn zum Beispiel am Anfang einer Sprachaktivität (z.B. am Beginn stimmhafter Sprache nach Stille), dann ist ein synthetisiertes Sprachsignal, das aus einem extrapolierten Anregungssignal gewonnen wird, im allgemeinen keine gute Approximation der ursprünglichen Sprache. Außerdem besteht beim Auftreten des nächsten guten Rahmens wahrscheinlich eine wesentliche Fehlanpassung zwischen den internen Zuständen des Decodierers und des Codierers. Diese Fehlanpassung von Codierer- und Decodiererzuständen konvergiert möglicherweise erst nach einiger Zeit.

Dieser Umstand kann zum Beispiel durch Modifizieren der Adapter des Codierers behandelt werden (neben den obenbeschriebenen Modifikationen der Adapter des G.728- Decodierers), um die Konvergenzgeschwindigkeit zu verbessern. Sowohl der LPC-Filterkoeffizientenadapter als auch der Verstärkungsadapter (Prädiktor) des Codierers können durch Einführung eines spektralen Glättungsverfahrens (SST) und Vergrößern der Bandbreitenexpandierung modifiziert werden.

Fig. 8 zeigt eine modifizierte Version des LPC- Synthesefilteradapters von Fig. 5 des Entwurfs G.728 zur Verwendung im Codierer. Der modifizierte Synthesefilteradapter 230 enthält das Hybrid- Fensterbildungsmodul (hybrid windowing module) 49, das Autokorrelationskoeffizienten erzeugt; das SST-Modul 495, das eine spektrale Glättung von Autokorrelationskoeffizienten aus dem Fensterbildungsmodul 49 durchführt; das Levinson-Durbin-Rekursionsmodul 50 zur Erzeugung von Synthesefilterkoeffizienten; und das Bandbreitenexpandierungsmodul 510 zur Expandierung der Bandbreite der spektralen Spitzen des LPC-Spektrums. Das SST-Modul 495 führt eine spektrale Glättung von Autokorrelationskoeffizienten durch, indem es den Puffer von Autokorrelationskoeffizienten RTMP(1)- RTMP(51) mit der rechten Hälfte eines Gaußschen Fensters mit einer Standardabweichung von 60 Hz multipliziert. Diese "gefensterte" Menge von Autokorrelationskoeffizienten wird dann auf die normale Weise auf das Levinson-Durbin-Rekursionsmodul 50 angewandt. Das Bandbreitenexpandierungsmodul 510 verarbeitet die Synthesefilterkoeffizienten wie das Modul 51 des Entwurfs G.728, verwendet aber anstelle von einen Bandbreitenexpandierungsfaktor von 0,96 anstelle von 0,988.

Fig. 9 zeigt eine modifizierte Version des LPC- Vektorverstärkungsadapters von Fig. 6 des Entwurfs G. 728 zur Verwendung im Codierer. Der Adapter 200 enthält ein Hybrid-Fensterbildungsmodul 43, ein SST-Modul 435, ein Levinson-Durbin-Rekursionsmodul 44 und ein Bandbreitenexpandierungsmodul 450. Alle Blöcke in Fig. 9 sind mit den Blöcken von Fig. 6 des Standards G.728 identisch, mit Ausnahme neuer Blöcke 435 und 450. Insgesamt sind die Module 43, 435, 44 und 450 wie die Module von Fig. 8 angeordnet, auf die oben Bezug genommen wurde. Wie das SST-Modul 495 von Fig. 8 führt das SST-Modul 435 von Fig. 9 eine spektrale Glättung von Autokorrelationskoeffizienten durch, indem es den Puffer von Autokorrelationskoeffizienten R(1)-R(11) mit der rechten Hälfte eines Gaußschen Fensters multipliziert. Diesmal hat das Gaußsche Fenster jedoch eine Standardabweichung von 45 Hz. Das Bandbreitenexpandierungsmodul 450 von Fig. 9 verarbeitet die Synthesefilterkoeffizienten wie das Bandbreitenexpandierungsmodul 51 von Fig. 6 des Entwurfs G.728, verwendet aber einen Bandbreitenexpandierungsfaktor von 0,87 anstelle von 0,906.

E. Ein beispielhaftes drahtloses System

Wie bereits erwähnt ist die Erfindung auf drahtlose Sprachkommunikationssysteme anwendbar. Fig. 12 zeigt ein beispielhaftes drahtloses Kommunikationssystem, das eine Ausführungsform der vorliegenden Erfindung verwendet. Fig. 12 enthält einen Sender 600 und einen Empfänger 700. Ein Ausführungsbeispiel für den Sender 600 ist eine drahtlose Basisstation. Ein Ausführungsbeispiel für den Empfänger 700 ist ein mobiles Benutzerendgerät, wie zum Beispiel ein Zellular- oder Funktelefon oder ein anderes persönliches Kommunikationsystemgerät. (Natürlich enthalten eine drahtlose Basisstation und ein Benutzerendgerät möglicherweise auch Empfänger- bzw. Senderschaltkreise). Der Sender 600 enthält einen Sprachcodierer 610, bei dem es sich zum Beispiel um einen Codierer gemäß dem CCITT-Standard G.728 handeln kann. Der Sender enthält weiterhin einen herkömmlichen Kanalcodierer 620, um eine Fehlererkennungs- (oder Erkennungs- und Korrektur-) Fähigkeit bereitzustellen; einen herkömmlichen Modulator 630; und herkömmliche Funkübertragungsschaltkreise; wobei alles in der Technik wohlbekannt ist. Von dem Sender 600 ausgestrahlte Funksignale werden durch einen Übertragungskanal von dem Empfänger 700 empfangen. Zum Beispiel wegen destruktiver Interferenz verschiedener Mehrwegekomponenten des übertragenen Signals kann sich der Empfänger 700 in einem deep fade befinden, wodurch ein klarer Empfang übertragener Bit verhindert wird. Unter solchen Umständen kann eine Rahmenlöschung auftreten.

Der Empfänger 700 enthält herkömmliche Funkempfängerschaltkreise 710, einen herkömmlichen Demodulator 720, einen Kanaldecodierer 730 und einen Sprachdecodierer 740 gemäß der vorliegenden Erfindung. Man beachte, daß der Kanaldecodierer immer dann ein Rahmenlöschungssignal erzeugt, wenn der Kanaldecodierer das Vorliegen einer wesentlichen Anzahl von Bitfehlern (oder nicht empfangener Bit) bestimmt. Als Alternative (oder zusätzlich zu einem Rahmenlöschungssignal aus dem Kanaldecodierer) kann der Demodulator 720 dem Decodierer 740 ein Rahmenlöschungssignal zuführen.

F. Besprechung

Obwohl hier spezifische Ausführungsformen der vorliegenden Erfindung gezeigt und beschrieben wurden, versteht sich, daß diese Ausführungsformen lediglich die vielen möglichen spezifischen Anordnungen veranschaulichen, die durch Anwendung der Prinzipien der Erfindung konzipiert werden können. Durchschnittsfachleute können zahlreiche und vielfältige andere Anordnungen konzipieren, ohne vom Gedanken und Schutzbereich der Erfindung abzuweichen.

Zum Beispiel sind, obwohl die vorliegende Erfindung im Kontext eines G.728-LD-CELP-Sprachcodierungssystems beschrieben wurde, Merkmale der Erfindung auch auf andere Sprachcodierungssysteme anwendbar. Zum Beispiel können solche Codierungssysteme einen Langzeitprädiktor (oder ein Langzeitsynthesefilter) zur Umsetzung eines verstärkungsskalierten Anregungssignals in ein Signal mit Tonhöhenperiodizität enthalten. Oder ein solches Codierungssystem kann möglicherweise kein Nachfilter enthalten.

Zusätzlich wird das Ausführungsbeispiel der Erfindung als Anregungssignalabtastwerte auf der Grundlage eines zuvor gespeicherten verstärkungsskalierter Anregungssignalabtastwerte synthetisierend dargestellt. Die vorliegende Erfindung kann jedoch so implementiert werden, daß Anregungssignalabtastwerte vor der Verstärkungsskalierung (d.h. vor dem Betrieb des Verstärkungsglieds 31) synthetisiert werden. Unter solchen Umständen müssen außerdem Verstärkungswerte synthetisiert (z.B. extrapoliert) werden.

In der obigen Besprechung bezüglich der Synthese eines Anregungssignals während gelöschter Rahmen wurde die Synthese als Beispiel durch eine Extrapolationsprozedur erzielt. Für Durchschnittsfachleute ist erkennbar, daß andere Syntheseverfahren, wie zum Beispiel Interpolation, verwendet werden könnten.

Der Begriff "Filter" bedeutet hier herkömmliche Strukturen zur digitalen Synthese, sowie andere Prozesse, die eine filterartige Synthesefunktion erzielen. Zu solchen anderen Prozessen gehört die Manipulation von Fouriertransformationskoeffizienten ein filterartiges Ergebnis (mit oder ohne Entfernung wahrnehmungsbezogen irrelevanter Informationen)

ANHANG Entwurf der Empfehlung G.728 Codierung von Sprache mit 16 kbit/s unter Verwendung einer verzögerungsarmen codeerregten linearen Prädiktion (LD- CELP = Low-Delay Code Excited Linear Prediction) 1. Einführung

Die vorliegende Empfehlung enthält die Beschreibung eines Algorithmus für die Codierung von Sprachsignalen mit 16 kBit/s unter Verwendung von einer verzögerungsarmen codeerregten linearen Prädiktion (LD- CELP). Die Empfehlung ist folgendermaßen organisiert.

Im Abschnitt 2 wird eine kurze Zusammenfassung des LD- CELP-Algorithmus gegeben. In den Abschnitten 3 und 4 werden der LD-CELP-Codierer bzw. der LD-CELP-Decodierer besprochen. In Abschnitt 5 werden die rechnerischen Einzelheiten für jeden Funktions-Algorithmus-Block definiert. Die Anhänge A, B, C und D enthalten Tabellen von Konstanten, die von dem LD-CELP-Algorithmus verwendet werden. Im Anhang E wird die Abfolge variabler Adaption und Verwendung angegeben. Im Anhang I werden schließlich Informationen über Prozeduren angegeben, die auf die Implementierungsverifizierung des Algorithmus anwendbar sind.

Die zukünftige Aufnahme dreier (separat zu veröffentlichender) zusätzlicher Anhänge, bestehend aus LD-CELP-Netzwerkaspekten, Beschreibung der LD-CELP- Festkommaimplementierung und LD-CELP- Festkommaverfizierungsprozeduren, wird noch untersucht.

2. Zusammenfassung von LD-CELP

Der LD-CELP-Algorithmus besteht aus einem Codierer und einem Decodierer (siehe Abschnitt 2.1 bzw. 2.2 und Fig. 1/G.728.

Das Prinzip von CELP-Verfahren, die einen alternativen Analyse-durch-Synthese-Ansatz zur Codebuchsuche darstellen, wird bei LD-CELP beibehalten. LD-CELP verwendet jedoch eine Rückwärtsadaption von Prädiktoren und der Verstärkung, um eine Algorithmusverzögerung von 0,625 ms zu erzielen. Es wird nur der Index in das Anregungscodebuch übertragen. Die Prädiktorkoeffizienten werden durch LPC-Analyse zuvor quantisierter Sprache aktualisiert. Die Anregungsverstärkung wird durch Verwendung der in die zuvor quantisierte Anregung eingebetteten Verstärkungsinformationen aktualisiert. Die Blockgröße für den Anregungsvektor und die Verstärkungsadaption beträgt nur 5 Abtastwerte. Ein wahrnehmungsbezogenes Gewichtungsfilter wird mit einer LPC-Analyse der unquantisierten Sprache aktualisiert.

2.1 Der LD-CELP-Codierer

Nach der Umwandlung von A-Regel- oder u-Regel-PCM in gleichförmige PCM wird das Eingangssignal in Blöcke von 5 aufeinanderfolgenden Eingangssignalabtastwerten aufgeteilt. Für jeden Eingangsblock leitet der Codierer jeden von 1024 (in einem Anregungscodebuch gespeicherten) Kandidaten-Codevektoren durch eine Verstärkungsskalierungseinheit und ein Synthesefilter. Aus den resultierenden 1024 quantisierten Kandidaten- Signalvektoren identifiziert der Codierer denjenigen, der ein frequenzgewichtetes Maß kleinster Fehlerquadrate in Bezug auf den Eingangssignalvektor minimiert. Der 10-Bit-Codebuchindex des entsprechenden besten Codebuchvektors (oder "Codevektors"), das zu diesem besten quantisierten Kandidaten-Signalvektor führt wird zum Decodierer gesendet. Der beste Codevektor wird dann durch die Verstärkungsskalierungseinheit und das Synthesefilter geleitet, um als Vorbereitung auf die Codierung des nächsten Signalvektors den korrekten Filterspeicher herzustellen. Die Synthesefilterkoeffizienten und die Verstärkung werden rückwärts-adaptiv auf der Grundlage des vorherigen quantisierten Signals und der verstärkungsskalierten Anregung periodisch aktualisiert.

2.2 Der LD-CELP-Decodierer

Die Decodierungsoperation wird ebenfalls blockweise durchgeführt. Beim Empfang jedes 10-Bit-Index schlägt der Decodierer in einer Tabelle nach, um den entsprechenden Codevektor aus dem Anregungscodebuch zu entnehmen. Der entnommene Codevektor wird dann durch eine Verstärkungsskalierungseinheit und ein Synthesefilter geleitet, um den aktuellen decodierten Signalvektor zu erzeugen. Die Synthesefilterkoeffizienten und die Verstärkung werden dann genauso aktualisiert wie im Codierer. Der decodierte Signalvektor wird dann durch ein adaptives Nachfilter geleitet, um die wahrnehmungsbezogene Qualität zu verbessern. Die Nachfilterkoeffizienten werden unter Verwendung der im Decodierer verfügbaren Informationen periodisch aktulaisiert. Die 5 Abtastwerte des Nachfiltersignalvektors werden als nächstes in 5 A- Regel- oder u-Regel-PCM-Ausgangsabtastwerte umgewandelt.

3. Prinzipien des LD-CELP-Codierers

Fig. 2/G.728 ist ein ausführliches Blockschaltbild des LD-CELP-Codierers. Der Codierer in Fig. 2/G.728 ist mathematisch äquivalent zu dem zuvor in Fig. 1/G.728 gezeigten Codierer, kann aber rechnerisch effizienter implementiert werden.

Für die folgende Beschreibung gilt folgendes.

a. Für jede zu beschreibende Variable ist k der Abtastindex, und Abtastwerte werden in Intevallen von 125 us genommen.

b. Eine Gruppe von 5 aufeinanderfolgenden Abtastwerten in einem gegebenen Signal wird als ein Vektor dieses Signals bezeichnet. Zum Beispiel bilden 5 aufeinanderfolgende Sprachabtastwerte einen Sprachvektor, 5 Anregungsabtastwerte bilden eine Anregungsvektor und so weiter.

c. n soll den Vektorindex bedeuten, der von dem Abtastindex k verschieden ist.

d. Vier aufeinanderfolgende Vektoren bauen einen Adaptionszyklus auf. In einem späteren Abschnitt werden Adaptionszyklen auch als Rahmen bezeichnet. Die beiden Begriffe werden gleichbedeutend verwendet.

Der Anregungs-Vektorquantisierungscodebuchindex (Anregungs-VQ-Codebuchindex) stellt die einzigen Informationen dar, die explizit vom Codierer zum Decodierer übertragen werden. Drei weitere Arten von Parametern werden periodisch aktualisiert: die Anregungsverstärkung, die Synthesefilterkoeffizienten und die Koeffizienten des wahrnehmungsbezogenen Gewichtungsfilters. Diese Parameter werden rückwärtsadaptiv aus Signalen abgeleitet, die vor dem aktuellen Signalvektor auftreten. Die Anregungsverstärkung wird einmal pro Vektor aktualisiert, während die Synthesefilterkoeffizienten und die Koeffizienten des wahrnehmungsbezogenen Gewichtungsfilters einmal alle 4 Vektoren aktualisiert werden (d.h. eine Aktualisierungsperiode von 20 Abtastwerten oder 2,5 ms). Man beachte daß, obwohl die Verarbeitungsfolge in dem Algorithmus einen Adaptionszyklus von 4 Vektoren (20 Abtastwerte) aufweist, die zugrundeliegende Puffergröße immer noch nur 1 Vektor (5 Abtastwerte) beträgt. Durch diese kleine Puffergröße wird es möglich, eine Einfachverzögerung von weniger als 2 ms zu erzielen.

Es folgt eine Beschreibung jedes Blocks des Codierers. Da der LD-CELP-Codierer hauptsächlich zur Codierung von Sprache verwendet wird, wird der Einfachheit im folgenden angenommen, daß das Eingangssignal Sprache ist, obwohl es sich in der Praxis auch um andere Signale als Sprache handeln kann.

3.1 Umwandlung des Eingangs-PCM-Formats

Dieser Block wandelt das Eingangs-A-Regel- oder u- Regel-PCM-Signal so(k) in ein gleichförmiges PCM-Signal suk) um.

3.1.1 Interne lineare PCM-Pegel

Bei der Umwandlung von A-Regel- oder u-Regel- in lineare PCM sind abhängig von der Einrichtung verschiedene interne Darstellungen möglich. Zum Beispiel definieren Standardtabellen für u-Regel-PCM einen linearen Umfang von -4015,5 bis +4015,5. Der entsprechende Umfang für A-Regel-PCM beträgt -2016 bis +2016. Beide Tabellen zeigen bestimmte Ausgangswerte mit einem Nachkommateil von 0,5. Diese Nachkommateile können in einer Integer-Einrichtung nur dann dargestellt werden, wenn man die gesamte Tabelle mit 2 multipliziert, um alle Werte ganzzahlig zu machen. Tatsächlich wird dies am häufigsten in Festkomma-DSP- Chips (Digital-Signalverarbeitungschips) durchgeführt. Andererseits können Gleitkomma-DSP-Chips dieselben Werte darstellen, die in den Tabellen aufgeführt sind. In der gesamten vorliegenden Schrift wird angenommen, daß das Eingangssignal einen maximalen Umfang von -4095 bis +4095 aufweist. Dies umfaßt sowohl den u-Regel- als den A-Regel-Fall. Im Fall der A-Regel führt dies dazu, daß, wenn die lineare Umwandlung einen Umfang von -2016 bis +2016 ergibt, diese Werte mit einem Faktor 2 heraufskaliert werden sollten, bevor das Signal weiter codiert wird. Im Fall eines u-Regel-Eingangssignals für einen Festkommaprozessor, wobei der Eingangsumfang in - 8031 bis +8031 umgewandet wird, führt dies dazu, daß Werte um einen Faktor von 2 herunterskaliert werden sollten, bevor der Codierungsprozeß begonnen wird. Als Alternative können diese Werte als im Q1-Format vorliegend behandelt werden, d.h. es gibt 1 Bit rechts des Dezimalkommas. Alle Berechnungen, an denen die Daten beteiligt sind, müßten dann dieses Bit berücksichtigen.

Im Fall von 16-Bit-Linear-PCM-Eingangssignalen mit dem vollen Dynamikumfang von -32768 bis +32768 sollten die Eingangswerte als im Q3-Format vorliegend betrachtet werden. Das heißt, daß die Eingangswerte mit einem Faktor von 8 herunterskaliert (dividiert) werden sollten. Bei der Ausgabe am Decodierer würde der Faktor 8 für diese Signale wiederhergestellt werden.

3.2 Vektorpuffer

Dieser Block puffert 5 aufeinanderfolgende Sprachabtastwerte su(5n), su(5n + 1), ..., su(5n + 4), um einen 5-dimensionalen Sprachvektor s(n) = [su(5n), su(5n + 1), ..., su(5n + 4)] zu bilden.

3.3 Adapter für das wahrnehmungsbezogene Gewichtungsfilter

Fig. 4/G.728 zeigt die ausführliche Funktionsweise des Adapters des wahrnehmungsbezogenen Gewichtungsfilters in (Block 3 Fig. 2/G.728). Dieses Adapter berechnet die Koeffizienten des wahrnehmungsbezogenen Gewichtungsfilters einmal alle 4 Sprachvektoren auf der Grundlage eine linearen Prädiktionsanalyse (die häufig als LPC-Analyse bezeichnet wird) unquantisierter Sprache. Die Koeffizientenaktualisierungen erfolgen beim dritten Sprachvektor jedes 4-Vektor- Adaptionszyklus. Die Koeffizienten werden zwischen Aktualisierungen konstant gehalten.

Man betrachte nun Fig. 4(a)/G.728. Die Berechung wird folgendermaßen ausgeführt. Zuerst wird der (unquantisierte) Eingangssprachvektor durch ein Hybrid- Fenstermodul (Block 36) geleitet, das ein Fenster auf vorherige Sprachvektoren legt und als Ausgabe die ersten 11 Autokorrelationskoeffizienten des Fenster- Sprachsignals erzeugt. Das Levinson-Durbin- Rekursionsmodul (Block 37) wandelt diese Autokorrelationskoeffizienten dann in Prädiktorkoeffizienten um. Auf der Grundlage dieser Prädiktorkoeffizienten leitet der Gewichtungs- Filterkoeffizientenkalkulator (Block 38) die gewünschten Koeffizienten des Gewichtungsfilters ab. Diese drei Blöcke werden später ausführlicher besprochen.

Es sollen zunächst die Prinzipien der Hybrid- Fenstertechnik beschrieben werden. Da diese Hybrid- Fenstertechnik in drei verschiedenen Arten von LPC- Analysen verwendet zum Einsatz kommt, wird die Technik zunächst allgemeiner beschrieben und dann auf verschiedene Fälle spezialisiert. Man nehme an, daß die LPC-Analyse einmal alle L Signalabtastwerte durchgeführt werden soll. Als allgemeines Beispiel nehme man an, daß die Signalabtastwerte, die dem aktuellen LD-CELP-Adaptionszyklus entsprechen, su(m), su(m + 1), su(m + 2), ..., su(m + L - 1) sind. Dann wird für die rückwärts-adaptive LPC-Analyse das Hybridfenster auf alle vorherigen Signalabtastwerte mit einem Abtastindex kleiner als m angewandt (siehe Fig. 4(b)/G.728). Man nehme an, daß es N nichtrekursive Abtastwerte in der Hybrid-Fensterfunktion gibt. Dann werden die Signalabtastwerte su(m - 1), su(m - 2), ..., su(m - N) alle mit dem nichtrekursiven Teil des Fensters gewichtet. Beginnend mit su(m - N - 1) werden alle Signalabtastwerte links (einschließlich) dieses Abtastwerts mit dem rekursiven Teil des Fensters gewichtet, der die Werte b, bα, bα², ... aufweist, wobei 0 < b < 1 und 0 < α < 1 ist.

Zum Zeitpunkt m ist die Hybrid-Fensterfunktion wm(k) definiert als

und das fenster-gewichtete Signal ist

Die Abtastwerte des nichtrekursiven Teils gm(k) und der Anfangsteil des rekursiven Teils fm(k) für verschiedene Hybridfenster sind im Anhang A angegeben. Für eine LPC- Analyse M-ter Ordnung muß man M + 1 Autokorrelationskoeffizienten Rm(i) für i = 0, 1, 2, ..., M berechnen. Der i-te Autokorrelationskoeffizient für den aktuellen Adaptionszyklus kann folgendermaßen ausgedrückt werden:

Rm(i) = sm(k)sm(k - i) = rm(i) + sm(k)sm(k - i) (1c)

mit

rm(i) sm(k)sm(k - i) = su(k)su(k - i)fm(k)fm(k - i) (1d)

Auf der rechten Seite von Gleichung (1c) ist der erste Term rm(i) die "rekursive Komponente" von Rm(i), während der zweite Term die "nichtrekursive Komponente" ist. Die endliche Summierung der nichtrekursiven Komponente wird für jeden Adaptionszyklus berechnet. Die rekursive Komponente wird dagegen rekursiv berechnet. Die folgenden Absätze erläutern, wie dies erfolgt.

Man nehme an, daß alle rm(i)'s für den aktuellen Adaptionszyklus berechnet wurden und zu dem nächsten Adaptionszyklus übergegangen werden soll, der mit dem Abtastwert su(m + L) beginnt. Nachdem das Hybridfenster L Abtastwerte nach rechts verschoben wurde, lautet das neue fenster-gewichtete Signal für den nächsten Adaptionszyklus wie folgt:

Die rekursive Komponente von Rm+L(i) kann folgendermaßen geschrieben werden:

oder

rm+L(i) = α2Lrm(i) + sm+L(k)sm+L(k - i). (1g)

Deshalb kann man mit Gleichung (1g) rm+L(i) rekursiv aus rm(i) berechnen. Dieses neu berechnete rm+L(i) wird zur Verwendung im folgenden Adaptionszyklus wieder zurück in den Speicher gespeichert. Der Autokorrelationskoeffizient Rm + L(i) wird dann folgendermaßen berechnet:

Rm+L(i) = rm+L(i) + sm+L(k)sm+L(k)sm+L(k - i). (1h)

Bisher wurden allgemein die Prinzipien einer Hybrid- Fensterberechnungsprozedur beschrieben. Die Parameterwerte für das Hybrid-Fenstermodul 36 in Fig. 4(a)/G.728 betragen M = 10, L = 20, N = 30 und

α = (1/2)1/40 = 0,982820598 (so daß α2L = 1/2 ist).

Wenn die 11 Autokorrelationskoeffizienten R(i), i = 0, 1, ..., 10 von der oben beschriebenen Hybrid- Fensterprozedur berechnet worden sind, wird eine Prozedur der "Korrektur mit weißem Rauschen" angewandt. Dies geschieht durch Vergrößern der Energie R(0) um einen gleinen Betrag:

R(0)←(257/256)R(0) (1i)

Dadurch werden spektrale Täler mit weißem Rauschen gefüllt, um so den spektralen Dynamikumfang zu reduzieren und eine schlechte Konditionierung der nachfolgenden Levinson-Durbin-Rekursion zu mildern. Der Korrekturfaktor des weißen Rauschens (WNCF) von 257/256 entspricht einem Pegel des weißen Rauschens von etwa 24 dB unter der mittleren Sprachleistung.

Als nächstes berechnet das Levinson-Durbin- Rekursionsmodul 37 unter Verwendung der mit weißem Rauschen korrigierten Autokorrelationskoeffizienten die Prädiktorkoeffizienten von Ordnung 1 bis 10. Es seien a die j-ten Koeffizienten des i-ten Prädiktors. Dann kann die rekursive Prozedur folgendermaßen angegeben werden:

E(0) = R(0) (2a)

a = ki (2c)

E(i) = (1 - k )E(i - 1) (2e)

Die Gleichungen (2b) bis (2e) werden rekursiv für 1 = 1, 2, ..., 10 ausgewertet, und die Endlösung wird gegeben durch

qi = a , 1 ≤ i ≤ 10. (2f)

Wenn man g&sub0; = 1 definiert, dann hat das "Prädiktionsfehlerfilter" 10-ter Ordnung (das manchmal auch als "Analysefilter" bezeichnet wird) die Übertragungsfunktion

(z) = qiz-i, (3a)

und der entsprechende lineare Prädiktor 10-ter Ordnung wird definiert durch die folgende Übertragungsfunktion:

Q(z) = - qiz-i (3b)

Der Gewichtungsfilterkoeffizientenkalkulator (Block 38) berechnet die Koeffizienten des wahrnehmungsbezogenen Gewichtungsfilters gemäß den folgenden Gleichungen:

Q(z/γ&sub1;) = - (q&sub1;γ )z-i, (4b)

und

Q(z/γ&sub2;) = - (qiγ )z-i. (4c)

Das wahrnehmungsbezogene Gewichtungsfilter ist ein Pol-/Nullstellenfilter 10-ter Ordnung, das durch die Übertragungsfunktion W(z) in Gleichung (4a) definiert wird. Die Werte von γ&sub1; und γ&sub2; betragen 0,9 bzw. 0,6.

Man betrachte nun Fig. 2/G.728. Der Adapter für das wahrnehmungsbezogene Gewichtungsfilter (Block 3) aktualisiert periodisch die Koeffizienten W(z) gemäß den Gleichungen (2) bis (4) und führt die Koeffizienten dem Impulsantwortvektorkalkulator (Block 12) und den wahrnehmungsbezogenen Gewichtungsfiltern (Block 4 und 10) zu.

3.4 Wahrnehmungsbezogenes Gewichtungsfilter

In Fig. 2/G.728 wird der aktuelle Eingangssprachvektor s(n) durch das wahrnehmungsbezogene Gewichtungsfilter (Block 4) geleitet, woraus sich der gewichtete Sprachvektor v(n) ergibt. Man beachte, daß außer bei der Initalisierung der Filterspeicher (d.h. interne Zustandsvariablen oder die in den Verzögerungseinheiten des Filters gehaltenen Werte) zu keinem Zeitpunkt auf Null zurückgesetzt werden sollten. Andererseits benötigt der Speicher des wahrnehmungsbezogenen Gewichtungsfilters (Block 10) eine später beschriebene besondere Behandlung.

3.4.1 Nicht-Sprache-Betrieb

Für Modemsignale oder andere Nicht-Sprache-Signalen zeigen CCITT-Testergebnisse an, daß es wünschenswert ist, das wahrnehmungsbezogene Gewichtungsfilter zu deaktivieren. Dies läuft darauf hinaus, W(z) = 1 zu setzen und läßt sich einfach einrichten, indem γ&sub1; und γ&sub2; in Gleichung (4a) gleich Null gesetzt werden. Im Sprachmodus betragen die Nennwerte für diese Variablen 0,9 bzw. 0,6.

3.5 Synthesefilter

In Fig. 2/G.728 sieht man zwei Synthesefilter (Block 9 und 22) mit identischen Koeffizienten. Beide Filter werden durch den Rückwärts-Synthesefilteradapter (Block 23) aktualisiert. Jedes Synthesefilter ist ein Nur- Pole-Filter 50ter Ordnung, das aus einer Rückkopplungsschleife mit einem LPC-Prädiktor 50ter Ordnung im Rückkopplungszweig besteht. Die Übertragungsfunktion des Synthesefilters ist F(z) = 1/[1 - P(z)], wobei P(z) die Übertragungsfunktion des LPC-Prädiktors 50ter Ordnung ist.

Nachdem der gewichtete Sprachvektor v(n) bestimmt wurde, wird mit dem Synthesefilter (Block 9) und dem wahrnehmungsbezogenen Gewichtungsfilter (Block 10) ein Null-Eingangsignal-Antwortvektor r(n) erzeugt. Dazu öffnet man zunächst den Schalter 5, d.h. läßt ihn auf den Knoten 6 zeigen. Daraus folgt, daß das Signal von dem Knoten 7 zu dem Synthesefilter 9 Null wird. Danach läßt man das Synthesefilter 9 und das wahrnehmungsbezogene Gewichtungsfilter 10 5 Abtastwerte (1 Vektor) lang "klingeln". Dies bedeutet, daß man die Filteroperation 5 Abtastwerte lang mit einem Nullsignal am Knoten 7 fortführt. Das resultierende Ausgangssignal des wahrnehmungsbezogenen Gewichtungsfilters 10 ist der gewünschte Null-Eingangsignal-Antwortvektor r(n).

Man beachte, daß mit Ausnahme des Vektors unmittelbar nach der Initialisierung der Speicher der Filter 9 und 10 im allgemeinen von Null verschieden ist; deshalb ist der Ausgangsvektor r(n) im allgemeinen ebenfalls von Null verschieden, auch wenn das Filtereingangssignal aus dem Knoten 7 Null ist. Effektiv ist dieser Vektor r(n) die Antwort der beiden Filter auf die vorherigen verstärkungsskalierten Anregungsvektoren e(n - 1), e(n - 2), ... Dieser Vektor stellt tatsächlich den Effekt des Filterspeichers bis zum Zeitpunkt (n - 1) dar.

3.6 VQ-Zielvektorberechnung

Dieser Block subtrahiert den Null-Eingangsignal- Antwortvektor r(n) von dem gewichteten Sprachvektor v(n), um den VQ-Codebuch-Suchzielvektor x(n) zu bestimmen.

3.7 Rückwärts-Synthesefilteradapter

Dieser Adapter 23 aktualisiert die Koeffizienten der Synthesefilter 9 und 22. Er nimmt die quantisierte (synthetisierte) Sprache als Eingangssignal an und erzeugt eine Menge von Synthesefilterkoeffizienten als Ausgabe. Seine Funktionsweise ähnelt dem Adapter 3 des wahrnehmungsbezogenen Gewichtungsfilters.

Eine vergrößerte Version dieses Adapters ist in Fig. 5/G.728 gezeigt. Die Funktionsweise des Hybrid- Fenstermoduls 49 und des Levinson-Durbin- Rekursionsmoduls 50 ist genau dieselbe wie bei ihren Gegenstücken (36 und 37) in Fig. 4(a)/G.728, mit Ausnahme der folgenden drei Unterschiede:

a. Das Eingangssignal ist nun die quantisierte Sprache, anstelle der unquantisierten Eingangssprache.

b. Die Prädiktorordnung ist 50 statt 10.

c. Die Hybrid-Fensterparameter sind verschieden:

N = 35, α = (3/4)1/40 = 0,992833749.

Man beachte, daß die Aktualisierungsperiode immer noch L = 20 ist und der Korrekturfaktor des weißen Rauschens immer noch 257/256 = 1,00390625 beträgt.

Es sei (z) die Übertragungsfunktion des LPC-Prädiktors 50ter Ordnung, die dann die folgende Form aufweist:

wobei die i's die Prädiktorkoeffizienten sind. Zur Verbesserung der Robustheit gegenüber Kanalfehlern werden diese Koeffizienten modifiziert, so daß die Spitzen in dem resultierenden LPC-Spektrum eine etwas größere Bandbreite aufweisen. Das Bandbreitenexpandierungsmodul 51 führt diese Bandbreitenexpandierungsprozedur folgendemaßen durch. Bei gegebenen LPC-Prädiktorkoeffizienten i's wird eine neue Menge von Koeffizienten i's folgendermaßen berechnet:

ai = λ-i i, 1 = 1, 2, ..., 50 (6)

wobei λ gegeben ist durch

λ = 253/256 = 0,98828125 (7)

Dadurch werden alle Pole des Synthesefilters radial um einen Faktor λ in Richtung des Ursprungs verschoben. Da die Pole vom Einheitskreis weg bewegt werden, verbreitern sich die Spitzen im Frequenzgang.

Nach dieser Bandbreitenexpandierung hat der modifizierte LPC-Prädiktor die folgende Übertragungsfunktion:

P(z) = - aiz-i, (8)

Die modifizierten Koeffizienten werden dann den Synthesefiltern 9 und 22 zugeführt. Diese Koeffizienten werden außerdem dem Impulsantwortvektorkalkulator 12 zugeführt.

Die Synthesefilter 9 und 22 haben beide die folgende Übertragungsfunktion:

Ähnlich wie das wahrnehmungsbezogene Gewichtungsfilter werden die Synthesefilter 9 und 22 ebenfalls einmal alle 4 Vektoren aktualisiert, und die Aktualisierungen erfolgen ebenfalls beim dritten quantisierten Sprachvektor jedes 4-Vektor-Adaptionszyklus. Die Aktualisierungen basieren jedoch auf der quantisierten Sprache bis zum letzten Vektor des vorherigen Adaptionszyklus. Anders ausgedrückt wird eine Verzögerung von 2 Vektoren eingeführt, bevor die Aktualisierungen stattfinden. Der Grund dafür besteht darin, daß das Levinson-Durbin-Rekursionsmodul 50 und der (später beschriebene) Energietabellenkalkulator 15 rechnerisch intensiv sind. Obwohl die Autokorrelation zuvor quantisierter Sprache am ersten Vektor jedes 4- Vektor-Zyklus verfügbar ist, können folglich Berechnungen die entsprechende Zeit von mehr als einem Vektor erfordern. Deshalb wird zur Aufrechterhaltung einer grundlegenden Puffergröße von 1 Vektor (um so die Codierungsverzögerung gering zu halten) und zur Aufrechterhaltung des Echtzeitbetriebs bei Filteraktualisierungen eine 2-Vektor-Verzögerung eingeführt, um die Echtzeitimplementierung zu erleichtern.

3.8 Rückwärts-Vektorverstärkungsadapter

Dieser Adapter aktualisiert die Anregungsverstärkung σ(n) für jeden Vektorzeitindex n. Die Anregungsverstärkung σ(n) ist ein Skalierungsfaktor, mit dem der gewählte Anregungsvektor y(n) skaliert wird. Der Adapter 20 nimmt als sein Eingangssignal den verstärkungsskalierten Anregungsvektor e(n) an und erzeugt eine Anregungsverstärkung σ(n) als Ausgangssignal. Im Prinzip versucht er, die Verstärkung von e(n) auf der Grundlage der e(n - 1), e(n - 2), ... zu "vorherzusagen", indem er eine adaptive lineare Prädiktion im logarithmischen Verstärkungsbereich verwendet. Dieser Rückwärts-Vektorverstärkungsadapter 20 ist in Fig. 6/G.728 ausführlicher gezeigt.

Man betrachte nun Fig. 6/G.728. Dieser Vektorverstärkungsadapter arbeitet wie folgt. Die 1- Vektor-Verzögerungseinheit 67 stellt den vorherigen verstärkungsskalierten Anregungsvektor e(n - 1) zur Verfügung. Der Effektivwert-(RMS-)kalkulator 39 berechnet dann den RMS-Wert des Vektors e(n - 1). Als nächstes berechnet der Logarithmuskalkulator 40 den dB- Wert des RMS von e(n - 1), indem er zunächst den Zehnerlogarithmus berechnet und das Ergebnis dann mit 20 multipliziert.

In Fig. 6/G.728 wird in dem Offsetwerthalter 41 für die logarithmische Verstärkung ein logarithmischer Verstärkungs-Offsetwert von 32 dB gespeichert. Diese Werte sollen ungefähr gleich dem mittleren Anregungsverstärkungspegel (in dE) während stimmhafter Sprache sein. Der Addierer 42 subtrahiert diesen logarithmischen Verstärkungs-Offsetwert von der durch den Logarithmuskalkulator 40 erzeugten logarithmischen Verstärkung - Die resultierende logarithmische Verstärkung δ(n - 1) mit entferntem Offset wird dann von dem Hybrid-Fenstermodul 43 und dem Levinson-Durbin- Rekursionsmodul 44 verwendet. Wiederum arbeitet die Blöcke 43 und 44 genauso wie die Blöcke 36 und 37 in dem Adaptermodul des wahrnehmungsbezogenen Gewichtungsfilters (Fig. 4(a)/G.728), mit der Ausnahme, daß die Hybrid-Fensterparameter verschieden sind und daß das analysierte Signal nun anstelle der Eingangssprache die logarithmische Verstärkung mit entferntem Offset ist. (Man beachte, daß pro 5 Sprachabtastwerten nur ein Verstärkungswert erzeugt wird.) Die Hybrid-Fensterparameter von Block 43 betragen M = 10, N = 20, L = 4,

α = (3/4)1/8 = 0,96467863

Die Ausgabe des Levinson-Durbin-Rekursionsmoduls 44 sind die Koeffizienten eines linearen Prädiktors 10ter Ordnung mit der Übertragungsfunktion

Das Bandbreitenexpandierungsmodul 45 verschiebt die Wurzeln dieses Polynoms dann ähnlich wie bei dem Modul 51 in Fig. 5/G.728 radial in Richtung des Originals der z-Ebene. Der resultierende bandbreitenexpandierte Verstärkungsprädiktor hat dann die Übertragungsfunktion

R(Z) = - αiz-i, (11)

wobei die Koeffizienten i's folgendermaßen berechnet werden:

αi =(29/32)i i = (0,90625)i i (12)

Durch diese Bandbreitenexpandierung wird der Verstärkungsadapter (Block 20 in Fig. 2/G.728) robuster gegenüber Kanalfehlern. Diese i's werden dann als die Koeffizienten des linearen Prädiktors für die logarithmische Verstärkung (Block 46 von Fig. 6/G.728) verwendet.

Dieser Prädiktor 46 wird einmal alle 4 Sprachvektoren aktualisiert, und die Aktualisierungen finden beim zweiten Sprachvektor jedes 4-Vektor-Adaptionszyklus statt. Der Prädiktor versucht, δ(n) auf der Grundlage einer Linearkombination von δ(n - 1), δ(n - 2), ..., δ(n - 10) vorherzusagen. Die vorhergesagte Version von δ(n) wird als δ(n) geschrieben und lautet

δ(n) = - αiδ(n - i). (13)

Nachdem δ(n) in dem Prädiktor 46 für die logarithmische Verstärkung erzeugt wurde, addiert man den in 41 gespeicherten logarithmischen Verstärkungs-Offsetwert von 32 dE wieder zurück. Der Begrenzer 47 der logarithmischen Verstärkung prüft dann den resultierenden logarithmischen Verstärkungswert und schneidet ihn ab, wenn der Wert unverhältnismäßig groß oder unverhältnismäßig klein ist. Die unter und obere Grenze werden auf 0 dE bzw. 60 dB eingestellt. Das Ausgangssignal des Verstärkungsbegrenzers wird dann dem Umkehr-Logarithmuskalkulator 48 zugeführt, der die Operation des Logarithmuskalkulators 40 umkehrt und die Verstärkung aus dem dB-Wert in den linearen Bereich umwandelt. Der Verstärkungsbegrenzer stellt sicher, daß die Verstärkung im linearen Bereich zwischen 1 und 1000 liegt.

3.9 Codebuchsuchmodul

In Fig. 2/G.728 bilden Block 12 bis 18 ein Codebuchsuchmodul 24. Dieses Modul durchsucht die 1024 Kandidaten-Codevektoren in dem Anregungs-VQ-Codebuch und identifiziert den Index des besten Codevektors, der einen entsprechenden quantisierten Sprachvektor liefert, der am besten mit dem Eingangssprachvektor übereinstimmt.

Um die Codebuch-Suchkomplexität zu vermindern, wird das Codebuch mit 10 Bit und 1024 Einträgen in zwei kleinere Codebücher zerlegt: ein 7-Bit-"Formcodebuch" mit 128 unabhängigen Codevektoren und ein 3-Bit- "Verstärkungscodebuch" mit 8 Skalarwerten, die in bezug auf Null symmetrisch sind (d.h. ein Bit für das Vorzeichen, zwei Bit für den Betrag). Der letzte Ausgangscodevektor ist das Produkt des besten Form- Codevektors (aus dem 7-Bit-Formcodebuch) und des besten Verstärkungspegels (aus dem 3-Bit- Verstärkungscodebuch). Die Tabelle des 7-Bit- Formcodebuchs und die Tabelle des 3-Bit- Verstärkungscodebuchs werden im Anhang B angegeben.

3.9.1 Prinzip der Codebuchsuche

Im Prinzip skaliert das Codebuchsuchmodul 24 jeden der 1024 Kandidaten-Codevektoren mit der aktuellen Anregungsverstärkung a(n) und leitet die resultierenden 1024 Vektoren einzeln durch ein kaskadiertes Filter, das aus dem Synthesefilter F(z) und dem wahrnehmungsbezogenen Gewichtungsfilter W(z) besteht. Der Filterspeicher wird jedesmal, wenn das Modul dem kaskadierten Filter mit der Übertragungsfunktion H(z) = F(z)W(z) einen neuen Codevektor zuführt, auf Null initialisiert.

Das Filtern von VQ-Codevektoren kann durch Matrixmultiplikation ausgedrückt werden. Es sei yj der j-te Codevektor in dem 7-Bit-Formcodebuch und gi das i- te Niveau in dem 3-Bit-Verstärkungscodebuch. Es sei {h(n)} die Impulsantwortfolge des kaskadierten Filters. Wenn der durch die Codebuchindizes i und j angegebene Codevektor dem kaskadierten Filter H(z) zugeführt wird, kann die Filterausgabe dann folgendermaßen ausgedrückt werden:

ij = Hσ(n)giyj, (14)

mit

Das Codebuchsuchmodul 24 sucht nach der besten Kombination von Indizes i und j, die die folgende Mean- Squared-Error-Verzerrung (MSE-Verzerrung) minimiert.

D = x(n) - ij ² = σ²(n) (n) - giHyj ², (16)

wobei (n) = x(n)/σ(n) der verstärkungsnormierte VQ- Zielvektor ist. Entwicklung der Terme ergibt

Da der Term (n) ² und der Wert von σ²(n) während der Codebuchsuche fest sind, entspricht die Minimierung von D der Minimierung von

= -2gipT(n)Hyj + g Ej, (18)

mit

P(n) = HT (n) (19)

und

Ej = Hyj ². (20)

Man beachte, daß Ej tatsächlich die Energie der j-ten gefilterten Formcodevektoren ist und nicht von dem VQ- Zielvektor (n) abhängt. Außerdem ist zu beachten, daß der Formcodevektor yj fest ist und die Matrix H nur von dem Synthesefilter und dem Gewichtungsfilter abhängt, die über eine Zeitspanne von 4 Sprachvektoren hinweg fest sind. Folglich ist Ej ebenfalls über eine Zeitspanne von 4 Sprachvektoren hinweg fest. Auf der Grundlage dieser Beobachtung kann man, wenn die beiden Filter aktualsiert werden, die 128 möglichen Energieterme Ej, j = 0, 1, 2, ..., 127 (entsprechend den 128 Formcodevektor) berechnen und speichern und diese Energieterme dann wiederholt während der nächsten 4 Sprachvektoren für die Codebuchsuche verwenden. Diese Anordnung vermindert die Komplexität der Codebuchsuche.

Für eine weitere Reduktion der Berechnung kann man die beiden Arrays

bi = 2gi (21)

und

ci = g (22)

für i = 0, 1, ..., 7 im voraus berechnen und speichern. Diese beiden Arrays sind fest, da die gi's fest sind. Nun kann man folgendermaßen ausdrücken:

= -biPj + ciEj, (23)

wobei Pj = pT(n)yj ist.

Man beachte, daß, nachdem die Tabellen für Ej, bi und ci im voraus berechnet und gespeichert wurden, der Skalarproduktterm Pj = pT(n)yj, der ausschließlich von j anhängt, den größten Teil der Berechnung bei der Bestimmung von in Anspruch nimmt. Somit durchschreitet die Codebuchsuchprozedur das Formcodebuch und identifiziert den besten Verstärkungsindex i für jeden Formcodevektor yj.

Es gibt mehrere Methoden, den besten Verstärkungsindex i für einen gegebenen Formcodevektor yj zu finden.

a. Die erste und naheliegendenste Methode besteht darin, die 8 moglichen -Werte zu bestimmen, die den 8 moglichen Werten von i entsprechen, und dann den Index i auszusuchen, der dem kleinsten entspricht. Dazu sind jedoch 2 Multiplikationen für jedes i erforderlich.

b. Eine zweite Methode besteht darin, zuerst die optimale Verstärkung = Pj/Ej zu berechnen und dann diese Verstärkung auf einen der 8 Verstärkungspegel {g&sub0;, ..., g&sub7;} in dem 3-Bit- Verstärkungscodebuch zu quantisieren. Der beste Index i ist der Index des Verstärkungspegels gi, der am nächsten bei liegt. Diese Methode erfordert jedoch eine Divisionsoperation für jeden der 128 Formcodevektoren, und Divisionen können mit DSP-Prozessoren in der Regel nur sehr ineffizient implementiert werden.

c. Ein dritter Ansatz, der eine leicht modifizierte Version des zweiten Ansatzes ist, eignet sich besonders gut für DSP-Implementierungen. Die Quantisierung von kann als eine Reihe von Vergleichen zwischen und den "Quantisiererzellengrenzen", den Mittelpunkten zwischen benachbarten Verstärkungspegeln, angesehen werden. Es sei di der Mittelpunkt zwischen dem Vers tärkungspegel gi und gi+1, mit demselben Vorzeichen. Eine Prüfung " < di?" entspricht dann der Prüfung "Pj < diEj?". Deshalb kann man durch Verwendung der letzteren Prüfung die Divisionsoperation vermeiden, und es ist weiterhin nur eine Multiplikation für jeden Index erforderlich. Diese Methode wird bei der Codebuchsuche verwendet. Die Verstärkungsquantisierer-Zellengrenzen di's sind fest und können im voraus berechnet und in einer Tabelle gespeichert werden. Für die 8 Verstärkungspegel werden tatsächlich nur 6 Grenzwerte d&sub0;, d&sub1;, d&sub2;, d&sub4;, d&sub5; und d&sub6; verwendet.

Wenn die besten Indizes i und j identifiziert wurden, werden sie verkettet, um die Ausgabe des Codebuchsuchmoduls, einen einzigen besten 10-Bit- Codebuchindex, zu bilden.

3.9.2 Funktionsweise des Codebuchsuchmoduls

Nachdem somit das Codebuchsuchprinzip eingeführt wurde, wird nun die Funktionsweise des Codebuchsuchmoduls 24 beschrieben. Man betrachte Fig. 2/G.728. Immer wenn das Synthesefilter 9 und das wahrnehmungsbezogene Gewichtungsfilter 10 aktualisiert werden, berechnet der Impulsantwortvektorkalkulator 12 die ersten 5 Abtastwerte der Impulsantwort des kaskadierten Filters F(z)W(z). Zur Berechnung des Impulsantwortvektors setzt man zunächst den Speicher des kaskadierten Filters auf Null und regt dann das Filter mit einer Eingangsfolge {1, 0, 0, 0, 0} an. Die entsprechenden 5 Ausgangsabtastwerte des Filters sind h(0), h(1), ..., h(4), die den gewünschten Impulsantwortvektor darstellen. Nach der Berechnung dieses Impulsantwortvektors wird er konstant gehalten und für die folgenden 4 Sprachvektoren bei der Codebuchsuche verwendet, bis die Filter 9 und 10 erneut aktualisiert werden.

Als nächstes berechnet das Codevektor-Faltungsmodul 14 die 128 Vektoren Hyj, j = 0, 1, 2, ..., 127. Anders ausgedrückt, faltet es jeden Formocodevektor yj, j = 0, 1, 2, ..., 127, mit der Impulsantwortfolge h(0), h(1), 12(4), wobei die Faltung nur für die ersten 5 Abtastwerte durchgeführt wird. Die Energien der resultierenden 128 Vektoren werden dann von dem Energietabellenkalkulator 15 gemäß Gleichung (20) berechnet und gespeichert. Die Energie eines Vektors ist definiert als die Summe des quadrierten Werts jeder Vektorkomponente.

Man beachte, daß die Berechnungen in den Blocken 12, 14 und 15 nur einmal alle 4 Sprachvektoren durchgeführt wird, während die anderen Blöcke in dem Codebuchsuchmodul Berechnungen für jeden Sprachvektor durchführen. Man beachte außerdem, daß die Aktualisierungen der Ej-Tabelle mit den Aktualisierungen der Synthesefilterkoeffizienten synchronisiert ist. Das heißt, die neue Ej-Tabelle wird beginnend mit dem dritten Sprachvektor jedes Adaptionszyklus verwendet. (Siehe die Besprechung im Abschnitt 3.7)

Das VQ-Zielvektornormierungsmodul 16 berechnet den verstärkungsnormierten VQ-Zielvektor (n) = x(n)/σ(n). Bei DSP-Implementierungen ist es effizienter, zuerst 1/σ(n) zu berechnen, und dann jede Komponente von x(n) mit 1/σ(n) zu multiplizieren.

Als nächstes berechnet das zeitumgekehrte Faltungsmodul 13 den Vektor p(n) = HT (n). Diese Operation ist gleichbedeutend damit, zuerst die Reihenfolge der Komponenten von (n) umzukehren, und dann die Komponentenreihenfolge der Ausgabe nochmals umzukehren (daher auch der Name "zeitumgekehrte Faltung").

Nachdem Ej, bi und ci im voraus berechnet und gespeichert wurden und auch der Vektor p(n) berechnet wurde, arbeiten dann der Fehlerkalkulator 17 und der Selektor 18 des besten Codebuchindex zusammen, um den folgenden effizienten Codebuch-Suchalgorithmus durchzuführen.

a. Initialisiere min auf eine Zahl, die größer als der größtmögliche Wert von ist (oder verwende die größtmögliche Zahl des Zahlendarstellungssystems des DSP).

b. Setze den Codebuchindex j = 0

c. Berechne das Skalarprodukt Pj = pt(n)yj.

d. Wenn pj < 0, gehe zu Schritt h, um negative Verstärkungen zu durchsuchen; andernfalls gehe zu Schritt e, um positive Verstärkungen zu durchsichen

e. Wenn Pj < d&sub0;Ej, setze i = 0 und gehe zu Schritt k; andernfalls gehe zu Schritt f.

f. Wenn Pj < d&sub1;Ej, setze i = 1 und gehe zu Schritt k; anderfalls gehe zu Schritt g.

g. Wenn Pj < d&sub2;Ej, setze i = 2 und gehe zu Schritt k; andernfalls setze i = 3 und gehe zu Schritt k.

h. Wenn Pj > d&sub4;Ej, setze i = 4 und gehe zu Schritt k; andernfalls gehe zu Schritt i.

i. Wenn Pj > d&sub5;Ej, setze 1 = 5 und gehe zu Schritt k; andernfalls gehe zu Schritt j.

j. Wenn Pj > d&sub6;Ej, setze 1 = 6; andernfalls setze i = 7.

k. Berechne = - biPj + ciEj.

l. Wenn < min, Setze min = , imin = i und jmin = j.

m. Wenn j < 127, setze j = j + 1 und gehe zu Schritt c; andernfalls gehe zu Schritt n.

n. Wenn der Algorithmus diese Stelle erreicht, sind alle 1024 möglichen Kombinationen von Verstärkungen und Formen durchsucht worden. Das resultierende imin und jmin sind die gewünschten Kanalindizes für die Verstärkung bzw. Form. Der ausgegebene beste Codebuchindex (10 Bit) ist die Verkettung dieser beiden Indizes, und der entsprechende beste Anregungscodevektor ist y(n) = gimin yjmin Der gewählte 10-Bit-Codebuchindex wird durch den Kommunikationskanal zu dem Decodierer übertragen.

3.10 Simulierter Decodierer

Obwohl der Codierer den bisher besten Codebuchindex identifiziert und übertragen hat, müssen zur Vorbereitung der Codierung der folgenden Sprachvektoren einige zusätzliche Aufgaben durchgeführt werden. Als erstes wird der beste Codebuchindex dem Anregungs-VQ- Codebuch zugeführt, um den entsprechenden besten Codevektor y(n) = gi min yj min zu entnehmen. Der beste Codevektor wird dann in der Verstärkungsstufe 21 mit der aktuellen Anregungsverstärkung σ(n) skaliert. Der resultierende verstärkungsskalierte Anregungsvektor ist e(n) = σ(n)y(n).

Dieser Vektor e(n) wird dann durch das Synthesefilter 22 geleitet, um den aktuellen quantisierten Sprachvektor sq(n) zu erhalten. Man beachte, daß Block 19 bis 23 einen simulierten Decodierer 8 bilden. Daher ist der quantisierte Sprachvektor sq(n) tatsächlich der simulierte decodierte Sprachvektor, wenn keine Kanalfehler vorliegen. In Fig. 2/G.728 benötigt der Rückwärts-Synthesefilteradapter 23 diesen quantisierten Sprachvektor sq(n), um die Synthesefilterkoeffizienten zu aktualisieren. Ähnlich benötigt der Rückwärts- Vektorverstärkungsadapter 20 den verstärkungsskalierten Anregungsvektor e(n), um die Koeffizienten des linearen Prädiktors der logarithmischen Verstärkung zu aktualisieren.

Eine letzte Aufgabe vor der Codierung des nächsten Sprachvektors ist die Aktualisierung des Speichers des Synthesefilters 9 und des wahrnehmungsbezogenen Gewichtungsfilters 10. Zu diesem Zweck sichert man zunächst den Speicher der Filter 9 und 10, der nach der im Abschnitt 3.5 beschriebenen Null-Eingangs- Antwortberechnung übrig blieb. Danach setzt man den Speicher der Filter 9 und 10 auf Null und schließt den Schalter 5, d.h., verbindet ihn mit dem Knoten 7. Danach wird der verstärkungsskalierte Anregungsvektor e(n) durch die beiden Filter 9 und 10 mit Null-Speicher geleitet. Es ist zu beachten, daß die Anzahl von Multiplikationen/Additionen in der 5-Abtastwerte- Periode nur von 0 auf 4 ansteigt, da e(n) nur 5 Abtastwerte lang ist und die Filter einen Speicher von Null aufweisen. Dies stellt eine wesentliche rechnerische Ersparnis dar, da 70 Multiplikationen/Additionen pro Abtastwert erfolgen würden, wenn der Filterspeicher nicht Null wäre. Als nächstes wird der gesicherte ursprüngliche Speicher nach dem Filtern von e(n) wieder zurück in den neu hergestellten Filterspeicher addiert. Dadurch werden effektiv die Null-Eingangs-Antworten auf die Null- Zustands-Antworten der Filter 9 und 10 addiert. Dies führt zu der gewünschten Menge von Filterspeicher, die zur Berechnung der Null-Eingangs-Antwort während der Codierung des nächsten Sprachvektors verwendet wird.

Man beachte, daß nach der Filterspeicheraktualisierung die 5 obersten Elemente des Speichers des Synthesefilters 9 genau mit den Komponenten des gewünschten quantisierten Sprachvektors sq(n) übereinstimmen. Deshalb kann man tatsächlich das Synthesefilter 22 weglassen und sq(n) aus dem aktualisierten Speicher des Synthesefilters 9 bestimmen. Das heißt, daß zusätzlich 50 Multiplikationen/Additionen pro Abtastwert eingespart werden.

Die bisher beschriebene Funktionsweise des Codierers gibt an, wie ein einziger Eingangssprachvektor codiert wird. Die Codierung der gesamten Sprachsignalform wird durch Wiederholen der obigen Funktionsweise für jeden Sprachvektor erreicht.

3.11 Synchronisation und Imband-Signalisierung

Bei der obigen Beschreibung des Codierers wurde angenommen, daß der Decodierer die Grenzen der empfangenen 10-Bit-Codebuchindizes kennt, und auch weiß, wann das Synthesefilter und der Prädiktor der logarithmischen Verstärkung aktualisiert werden müssen (man erinnere sich, daß sie einmal alle 4 Vektoren aktualisiert werden). In der Praxis können dem Decodierer solche Synchronisationsinformationen zur Verfügung gestellt werden, indem an der obersten Position des übertragenen 16-kBit/s-Stroms zusätzliche Synchronisationsbit hinzugefügt werden. Bei vielen Anwendungen ist es jedoch erforderlich, die Synchronisations- oder Imband-Signalisierungs-Bit als Teil des 16-kBit/s-Stroms einzufügen. Dies kann folgendermaßen durchgeführt werden. Man nehme an, daß einmal alle N Sprachvektoren ein Synchronisationsbit eingefügt werden soll. Für jeden N-ten Eingangssprachvektor kann man dann nur die Hälfte des Formcodebuchs durchsuchen und einen 6-Bit- Formcodebuchindex erzeugen. Auf diese Weise stiehlt man ein Bit aus jedem N-ten übertragenen Codebuchindex und fügt stattdessen ein Synchronisations- oder Signalisierungsbit ein.

Es ist wichtig, zu beachten, daß man nicht willkürlich ein Bit aus einem bereits gewählten 7-Bit- Formcodebuchindex stehlen kann. Vielmehr muß der Decodierer wissen, welchen Sprachvektoren ein Bit gestohlen wird, und dann nur eine Hälfte des Codebuchs nach diesen Sprachvektoren durchsuchen. Andernfalls verfügt der Decodierer für diese Sprachvektoren nicht über dieselben decodierten Anregungscodevektoren.

Da dem Codierungsalgorithmus ein Adaptionszyklus von 4 Vektoren zugrundeliegt, ist es vernünftig, wenn N ein Vielfaches von 4 ist, so daß der Decodierer leicht die Grenzen der Codierer-Adaptionszyklen bestimmen kann. Für einen vernünftigen Wert von N (wie z.B. 16, entsprechend einer Stehlperiode von 10 Millisekunden), ist die resultierende Verschlechterung der Sprachqualität im wesentlichen vernachlässigbar. Insbesondere wurde festgestellt, daß ein Wert von N = 16 zu sehr wenigen zusätzlichen Verzerrungen führt. Die Rate dieses Bit-Stehlens beträgt nur 100 Bits.

Wenn die obige Prozedur befolgt wird, ist zu empfehlen, daß, wenn das gewünschte Bit eine 0 sein soll, nur die erste Hälfte des Formcodebuchs durchsucht wird, d.h., die Vektoren mit den Indizes 0 bis 63. Wenn das gewünschte Bit eine 1 ist, wird die zweite Hälfte des Formcodebuchs durchsucht, und der resultierende Index liegt dann zwischen 64 und 127. Die bedeutung dieser Wahl liegt darin, daß das gewünschte Bit das äußerste linke Bit in dem Codewort ist, da die 7 Bit für den Formcodevektor den 3 Bit für das Vorzeichen und das Verstärkungscodebuch vorausgehen. Weiterhin wird empfohlen, daß das Synchronisationsbit von dem letzten Vektor in einem Zyklus von 4 Vektoren gestohlen wird. Nach seiner Erkennung kann das nächste empfangene Codewort den neuen Zyklus von Codevektoren beginnen.

Obwohl behauptet wurde, daß die Synchronisation sehr wenig Verzerrungen verursacht, sei bemerkt, daß keine formelle Prüfung an Hardware mit dieser Synchronisationsstrategie durchgeführt wurde. Folglich wurde das Ausmaß der Verschlechterung nicht gemessen.

Es wird jedoch spezifisch davon abgeraten, das Synchronisationsbit zur Synchronisation in Systemen zi verwenden, in denen der Codierer wiederholt ein- und ausgeschaltet wird. Zum Beispiel könnte ein System einen Sprachaltivitätsdetektor verwenden, um den Codierer auszuschalten, wenn keine Sprache vorliegt. Jedesmal, wenn der Codierer eingeschaltet würde, müßte der Codierer die Synchronisationssequenz finden. Bei 100 Bits würde dies wahrscheinlich mehrer Hundert Millisekunden dauern. Außerdem muß Zeit zugeteilt werden, damit der Decodiererzustand den Codiererzustand verfolgen kann. Das kombinierte Ergebnis wäre ein als Front-end-Clipping bekanntes Phänomen, bei dem der Anfang einer Sprachäußerung verloren geht. Wenn der Codierer und der Decodierer beide imselben Moment des Einsetzens von Sprache gestartet werden, dann geht keine Sprache verloren. Dies ist nur in System möglich, die externe Signalisierung für die Start-up-Zeiten und externe Synchronisation verwenden.

4. LD-CELP-Decodiererprinzipien

Fig. 3/G.728 ist ein Blockschaltbild des LD-CELP- Decodierers. In den folgenden Abschnitten wird eine Funktionsbeschreibung jedes Blocks gegeben.

4.1 Anregungs-VQ-Codebuch

Dieser Block enthält ein Anregungs-VQ-Codebuch (einschließlich Form- und Verstärkungscodebuch), das mit dem Codebuch 19 in dem LD-CELP-Codierer identisch ist. Es verwendet den empfangenen besten Codebuchindex, um den in dem LD-CELP-Codierer gewählten besten Codevektor y(n) zu entnehmen.

4.2 Verstärkungsskalierungseinheit

Dieser Block berechnet den verstärkungsskalierten Anregungsvektor e(n) durch Multiplizieren jeder Komponente von y(n) mit der Verstärkung δ(n).

4.3 Synthesefilter

Dieses Filter hat dieselbe Übertragungsfunktion wie das Synthesefilter in dem LD-CELP-Codierer (unter Annahme einer fehlerfreien Übertragung). Es filtert den skalierten Anregungsvektor e(n), um den decodierten Sprachvektor sd(n) zu erzeugen. Man beachte, daß es zur Vermeidung etwaiger möglicher Anhäufungen von Rundungsfehlern während der Decodierung manchmal wünschenswert ist, die im Codierer verwendeten Prozeduren, mit denen sq(n) zu erhalten wird, zu kopieren. Wenn dies der Fall ist und wenn der Decodierer sq(n) aus dem aktualisierten Speicher des Synthesefilters 9 erhält, dann sollte der Decodierer sd(n) ebenfalls wie im Codierer als die Summe der Null- Eingangs-Antwort und der Null-Zustands-Antwort des Synthesefilters 32 berechnen.

4.4 Rückwärts-Vektorverstärkungsadapter

Die Funktion dieses Blocks wird im Abschnitt 3.8 beschrieben.

4.5 Rückwärts-Synthesefilteradapter

Die Funktion dieses Blocks wird im Abschnitt 3.7 beschrieben.

4.6 Nachfilter

Dieser Block filtert die decodierte Sprache, um die wahrnehmungsbezogene Qualität zu verbessern. Dieser Block ist in Fig. 7/G.728 größer darsgestellt, um weitere Einzelheiten zu zeigen. Man betrachte Fig. 7/G.728. Das Nachfilter besteht im wesentlichen aus drei Hauptteilen: (1) Langzeit-Nachfilter 71, (2) Kurzzeit-Nachfilter 72 und (3) Ausgangsverstärkungsskalierungseinheit 77. Die anderen vier Blöcke in Fig. 7/G.728 dienen lediglich zur Berechnung des entsprechenden Skalierungsfaktors zur Verwendung in der Ausgangsverstärkungsskalierungseinheit 77.

Das Langzeit-Nachfilter 71, das manchmal als das Tonhöhennachfilter bezeichnet wird, ist ein Kammfilter, dessen Spektralspitzen bei Vielfachen der Grundfrequenz (oder Tonhöhenfrequenz) der nachzufilternden Sprache liegen. Der Kehrwert der Grundfrequenz wird als die Tonhöhenperiode bezeichnet. Die Tonhöhenperiode kann mit einem Tonhöhendetektor (oder einem Tonhöhenextraktor) der decodierten Sprache entnommen werden. Es sei p die von einem Tonhöhendetektor bestimmte Grund-Tonhöhenperiode (in Abtastwerten). Die Übertragungsfunktion des Langzeit-Nachfilters kann dann folgendermaßen ausgedrückt werden:

H&sub1;(z) = g&sub1;(1 + bz-p), (24)

wobei die Koeffizienten g&sub1;, b und die Tonhöhenperiode p einmal alle 4 Sprachvektoren (einem Adaptionszyklus) aktualisiert werden und die tatsächlichen Aktualisierungen beim dritten Sprachvektor jedes Adaptionszyklus stattfinden. Der Einfachheit halber wird ein Adaptionszyklus von nun an als ein Rahmen bezeichnet. Die Ableitung von g&sub1;, b und p wird später im Abschnitt 4.7 beschrieben.

Das Kurzzeit-Nachfilter 72 besteht aus einem Pol-/Nullstellenfilter zehnter Ordnung in Kaskadenschaltung mit einem Nur-Nullstellen-Filter erster Ordnung. das Pol-/Nullstellenfilter zehnter Ordnung dämpft die Frequenzkomponenten zwischen Formantspitzen, während das Nur-Nullstellen-Filter erster Ordnung versucht, die spektrale Neigung im Frequenzgang des Pol-/Nullstellenfilter zehnter Ordnung auszugleichen.

Es seien i, i = 1, 2, ..., 10 die Koeffizienten des LPC-Prädiktors zehnter Ordnung, die durch Rückwärts- LPC-Analyse der decodierten Sprache gewonnen werden, und k&sub1; der erste Reflexionskoeffizient, der durch dieselbe LPC-Analyse gewonnen wird. Sowohl die i's als auch k&sub1; können dann als Nebenprodukte der Rückwärts- LPC-Analyse 50. Ordnung (Block 50 in Fig. 5/G.728) gewonnen werden. Es müssen lediglich die Levinson- Durbin-Rekursion 50. Ordnung bei der Ordnung 10 angehalten, k&sub1; und &sub1;, &sub2;, ..., &sub1;&sub0; kopiert und dann die Levinson-Durbin-Rekursion von der Ordnung 11 bis zur Ordnung 50 wiederaufgenommen werden, Die Übertragungsfunktion des Kurzzeitfilters lautet:

mit

i = i(0,65)i, i = 1, 2, ..., 10 (26)

i = i(0,75)i, i = 1, 2, ..., 10 (27)

und

u = (0,15)k&sub1; (28)

Die Koeffizienten i's, i's und u werden ebenfalls einmal pro Rahmen aktualisiert, die Aktualisierungen finden jedoch beim ersten Vektor jedes Rahmens statt (d.h., sobald die i's verfügbar werden).

Nachdem die decodierte Sprache durch das Langzeit- Nachfilter und das Kurzzeit-Nachfilter geleitet wurden, weist die gefilterte Sprache im allgemeinen nicht denselben Leistungspegel wie die decodierte (ungefilterte) Sprache auf. Um unnötig hohe Verstärkungsauslenkungen zu vermeiden, ist es notwendig, eine automatische Verstärkungsregelung zu verwenden, um zu erzwingen, daß die nachgefilterte Sprache ungefähr dieselbe Leistung wie die ungefilterte Sprache aufweist. Dies geschieht in den Blöcken 73 bis 77.

Der Absolutwertsummenkalkulator 73 wirkt vektorweise. Er nimmt den aktuellen decodierten Sprachvektor sd(n) und berechnet die Summe von Absolutwerten seiner 5 Vektorkomponenten. Ähnlich führt der Absolutwertsummenkalkulator 74 dieselbe Art von Kalkulation durch, aber an dem aktuellen Ausgangsvektor sf(n) des Kurzzeit-Nachfilters. Der Skalierungsfaktorkalkulator 75 dividiert dann den Ausgangswert von Block 73 durch den Ausgangswert von Block 74, um einen Skalierungsfaktor für den aktuellen sf(n)-Vektor zu erhalten. Dieser Skalierungsfaktor wird dann durch ein Tiefpaßfilter erster Ordnung 76 gefiltert, um für jede der 5 Komponenten von sf(n) einen separaten Skalierungsfaktor zu erhalten. Das Tiefpaßfilter erster Ordnung 76 hat eine Übertragungsfunktion von 0,01/(1-0,99z&supmin;¹). Der tiefpaßgefilterte Skalierungsfaktor wird von der Ausgangsverstärkungsskalierungseinheit 77 verwendet, um eine abtastwertweise Skalierung des Ausgangssignals des Kurzzeit-Nachfilters durchzuführen. Da der Skalierungsfaktorkalkulator 75 nur einen Skalierungsfaktor pro Vektor erzeugt, ist zu beachten, daß sich dies als ein Treppeneffekt auf die abtastwertweise Skalierungsoperation des Blocks 77 auswirken würde, wenn das Tiefpaßfilter 76 nicht vorläge. Durch das Tiefpaßfilter 76 wird dieser Treppeneffekt effektive geglättet.

4.6.1 Nicht-Sprachbetrieb

CCITT-Zielprüfergebnisse zeigen an, daß sich bei bestimmten Nicht-Sprachsignalen die Leistung des Codierers verbessert, wenn das adaptive Nachfilter ausgeschaltet wird. Da das Eingangssignal für das adaptive Nachfilter das Ausgangssignal des Synthesefilters ist, ist das Signal immer verfügbar.

4.7 Nachfilteradapter

Dieser Block berechnet und aktualisiert die Koeffizienten des Nachfilters einmal pro Rahmen. Dieser Nachfilteradapter ist in Fig. 8/G.728 weiter vergrößert.

Man betrachet Fig. 8/G.728 das LPC-Umkehrfilter zehnter Ordnung 81 und das Tonhöhenentnahmemodul wirken zusammen, um der decodierten Sprache die Tonhöhenperiode zu entnehmen. Tatsächlich kann hier jeder beliebige Tonhöhenextraktor mit vernünftiger Leistung (und ohne zusätzliche Verzögerung einzuführen) verwendet werden. Es soll hier lediglich eine mögliche Art der Implementierung eines Tonhöhenextraktors beschrieben werden.

Die Übertragungsfunktion des LPC-Umkehrfilter zehnter Ordnung 81 lautet

wobei die Koeffizienten 's von dem Levinson-Durbin- Rekursionsmodul (Block 50 in Fig. 5/G.728) zugeführt und beim ersten Vektor jedes Rahmens aktualisiert werden. Dieses LPC-Umkehrfilter nimmt die decodierte Sprache als sein Eingangssignal an und erzeugt die LPC- Prädiktionsrestfolge {d(k)} als sein Ausgangssignal. Es wird hier eine Tonhöhenanalysefenstergröße von 100 Abtastwerten und ein Tonhöhenumfang von 20 bis 140 Abtastwerten verwendet. Das Tonhöhenentnahmemodul 82 hält einen Langzeitpuffer, um die letzten 240 Abtastwerte des LPC-Prädiktionsrests zu halten. Zur einfacheren Indizierung werden die in dem Puffer gespeicherten 240 LPC-Restabtastwerte als d(-139), d(-138), ..., d(100) indiziert.

Das Tonhöhenperiodenentnahmemodul 82 entnimmt die Tonhöhenperiode einmal pro Rahmen, und die Tonhöhenperiode wird beim dritten Vektor jedes Rahmens entnommen. Deshalb sollten die LPC- Umkehrfilterausgangsvektoren in einer besonderen Reihenfolge in dem LPC-Restpuffer gespeichert werden: der LPC-Restvektor, der dem vierten Vektor des letzten Rahmens entspricht, wird als d(81), d(82), ..., d(85) gespeichert, der LPC-Rest des ersten Vektors des aktuellen Rahmens wird als d(86), d(87), ..., d(90) gespeichert, der LPC-Rest des zweiten Vektors des aktuellen Rahmens wird als d(91), d(92), ..., d(95) gespeichert und der LPC-Rest des dritten Vektors wird als d(96), d(97), ..., d(100) gespeichert. Die Abtastwerte d(-139), d(-138), ..., d(80) sind einfach die vorherigen LPC-Restabtastwerte, die in der korrekten Zeitreihenfolge angeordnet sind.

Sobald der LPC-Restpuffer fertig ist, arbeitet das Tonhöhenperiodenentnahmemodul 82 folgendermaßen. Zuerst werden die letzten 20 Abtastwerte des LPC-Restpuffers (d(81) bis d(100)) durch ein elliptisches Filter dritter Ordnung mit 1 kHz tiefpaßgefiltert (Koeffizienten im Anhang D) und dann 4 : 1 dezimiert (d.h. um einen Faktor 4 unterabgetastet). Das Ergebnis sind 5 tiefpaßgefilterte und dezimierte LPC- Restabtastwerte die als (21), (22), ..., (25) bezeichnet und als die letzten 5 Abtastwerte in einem Puffer des dezimierten LCP-Rests gespeichert werden. Neben diesen 5 Abtastwerten werden die anderen 55 Abtastwerte (-34), (-33), ..., (-20) in dem Puffer des dezimierten. LPC-Rests durch Verschieben vorheriger Rahmen von dezimierten LPC-Restabtastwerten gewonnen. Die i-te Korrelation der dezimierten LPC- Restabtastwerte werden dann folgendermaßen berechnet:

ρ(i) = 1 - (n) (n - i), (30)

für Zeitverspätungen i = 5, 6, 7, ..., 35 (entsprechend Tonhöhenperioden von 20 bis 140 Abtastwerten). Die Zeitverspätung τ, die den größten der 31 berechneten Korrelationswerte ergibt, wird dann identifiziert. Da die Zeitverspätung τ die Zeitverspätung in dem 4 : 1 dezimierten Bereich ist, sollte die entsprechende Zeitverspätung, die die maximale Korrelation in dem ursprünglichen undezimierten Bereich ergibt, zwischen 4τ - 3 und 4τ + 3 liegen. Um die ursprüngliche Zeitauflösung zu erhalten, verwendet man als nächstes den Puffer des undezimierten LP-Rests, um die Korrelation des undezimierten LPC-Rests zu berechnen:

C(i) = 1 - d(k)d(k - i), (31)

für 7 Verspätungen i = 4τ - 3, 4τ - 2, ..., 4τ + 3. Von diesen 7 Zeitverspätungen wird die Verspätungen p&sub0; identifiziert, die die größte Korrelation ergibt.

Die so gefundene Zeitverspätung p&sub0; kann sich als ein Vielfaches der wahren Grund-Tonhöhenperiode erweisen. Im Langzeit-Nachfilter wird die wahre Grund- Tonhöhenperiode benötigt, nicht ein Vielfaches dieser. Deshalb muß eine weitere Verarbeitung erfolgen, um die Grund-Tonhöhenperiode zu finden. Man nutzt den Umstand aus, daß die Tonhöhenperiode relativ häufig abgeschätzt wird - einmal alle 20 Sprachabtastwerte. Da die Tonhöhenperiode in der Regel zwischen 20 und 140 Abtastwerten schwankt, bedeutet die vorliegende Tonhöhenabschätzung, daß man am Anfang jedes Sprecheinsatzes zuerst die Grund-Tonhöhenperiode erhält, bevor die vielfachen Tonhöhenperioden eine Chance haben, in dem oben beschriebenen Korrelationsspitzenaussuchprozeß zu erscheinen. Von dort an hat man eine Chance, eine Verriegelung auf die Grund-Tonhöhenperiode zu erreichen, indem geprüft wird, ob es eine Korrelationsspitze in der Umgebung der Tonhöhenperiode des vorherigen Rahmens gibt.

Es sei die Tonhöhenperiode des vorherigen Rahmens. Wenn die oben erhaltene Zeitverspätung p&sub0; nicht in der Umgebung von liegt, dann wird außerdem Gleichung (31) für 1 = - 6, - 5, ..., + 5, + 6 bestimmt. Von diesen 13 möglichen Zeitverspätungen wird die Zeitverspätung p&sub1; identifiziert, die die größte Korrelation ergibt. Dann prüft man, ob diese neue Zeitverspätung p&sub1; als die Ausgangs-Tonhöhenperiode des aktuellen Rahmens verwendet werden sollte. Man berechnet zunächst

Dies ist das optimale Abgriffsgewicht eines Tonhöhenprädiktors mit einem Abgriff mit einer Verspätung von p&sub0; Abtastwerten. Der Wert von β&sub1; wird dann zwischen 0 und 1 geklemmt. Als nächstes berechnet man außerdem

Dies ist das optimale Abgriffsgewicht eines Tonhöhenprädiktors mit einem Abgriff mit einer Verspätung von p&sub1; Abtastwerten. Der Wert von β&sub1; wird dann ebenfalls zwischen 0 und 1 geklemmt. Danach wird die Ausgangs-Tonhöhenperiode p des Blocks 82 gegeben durch

Nachdem das Tonhöhenperiodenentnahmemodul 82 die Tonhöhenperiode p entnimmt, berechnet der Tonhöhenprädiktorabgriffskalkulator 83 dann das optimale Abgriffsgewicht eines Tonhöhenprädiktors mit einem Abgriff für die decodierte Sprache. Der Tonhöhenprädiktorabgriffskalkulator 83 und das Langzeit-Nachfilter 71 benutzen gemeinsam einen langen Puffer decodierter Sprachabtastwerte. Dieser Puffer enthält die decodierten Sprachabtastwerte sd(-239), sd(-238), sd(-237), ..., sd(4), Sd(5), wobei Sd(1) bis sd(5) dem aktuellen Vektor decodierter Sprache entsprechen. Das Langzeit-Nachfilter 71 verwendet diesen Puffer als die Verzögerungseinheit des Filters. Andererseits verwendet der Tonhöhenprädiktorabgriffskalkulator 83 diesen Puffer, um folgendes zu berechnen:

Der Langzeit-Nachfilterkoeffizientenkalkulator 84 nimmt dann die Tonhöhenperiode p und den Tonhöhenprädiktorabgriff β und berechnet die Langzeit- Nachfilterkoeffizienten b und g&sub1; folgendermaßen:

Im allgemeinen ist die Sprachsignalform umso periodischer, desto näher β bei Eins liegt. Wie aus Gleichung (36) und (37) ersichtlich ist, gilt b = 0 und g&sub1; = 1, wenn β < 0,6 ist, was ungefähr nicht stimmhaften oder Übergangsbereichen von Sprache entspricht, und die Übertragungsfunktion des Langzeit- Nachfilters wird H&sub1;(s) = 1, d.h., die Filteroperation des Langzeit-Nachfilters ist völlig gesperrt. Im Fall 0,6 ≤ β ≤ 1 ist das Langzeit-Nachfilter dagegen eingeschaltet und der Grad der Kammfilterung wird durch β bestimmt. Je periodischer die Sprachsignalform, desto mehr Kammfilterung wird durchgeführt. Für β > 1 wird schließlich b auf 0,15 begrenzt, um zu viel Kammfilterung zu vermeiden. Der Koeffizient g&sub1; ist ein Skalierungsfaktor des Langzeit-Nachfilters, um sicherzustellen, daß die stimmhaften Bereiche von Sprachsignalformen relativ zu den nicht stimmhaften oder Übergangsbereichen nicht verstärkt werden. (Wenn g&sub1; konstant auf Eins gehalten werden würde, dann würden die stimmhaften Bereiche nach der Langzeit- Nachfilterung ungefähr um einen Faktor 1 + b verstärkt. Dadurch würden bestimmte Konsonanten, die nicht stimmhaften und Übergangsbereichen entsprechen, unklar oder zu weich klingen).

Der Kurzzeit-Nachfilterkoeffizientenkalkulator 85 berechnet die Koeffizienten i's, i's und u des Kurzzeit-Nachfilters beim ersten Vektor jedes Rahmens gemäß den Gleichungen (26), (27) und (28).

4.8 Umsetzung des Ausgangs-PCM-Formats

Dieser Block wandelt die 5 Komponenten des decodierten Sprachvektors in 5 entsprechende A-Regel oder u-Regel- PCM-Abtastwerte um und gibt diese 5 PCM-Abtastwerte sequentiell in Intervallen von 125 us aus. Man beachte, daß, wenn das interne lineare PCM-Format wie im Abschnitt 3.1.1 beschrieben skaliert wurde, vor der Umsetzung in A-Regel oder u-Regel-PCM die umgekehrte Skalierung durchgeführt werden muß.

5. Rechnerische Einzelheiten

Dieser Abschnitt gibt die rechnerischen Einzelheiten für jedes der LD-CELP-Codierer- und Decodiererelemente. Die Abschnitte 5.1 und 5.2 geben eine Liste der Namen von Codiererparametern und interner Verarbeitungsvariablen, auf die in späteren Abschnitten Bezug genommen wird. Die ausführliche Spezifikation jedes Blocks in Fig. 2/G.728 bis Fig. 6/G.728 wird in den Abschnitten 5.3 bis zum Ende von Abschnitt 5 gegeben. Um einen Eingangssprachvektor zu codieren und zu decodieren, werden die verschiedenen Blöcke des Codierers und des Decodierers in einer Reihenfolge ausgeführt, die ungefähr der Folge von Abschnitt 5.3 bis zum Ende entspricht.

5.1 Beschreibung grundlegender Codiererparameter

Die Namen grundlegender Codiererparameter werden in Tabelle 1/G.728 definiert. In Tabelle 1/G.728 gibt die erste Spalte die Namen von Codiererparametern an, die in der späteren ausführlichen Beschreibung des LD-CELP- Algorithmus verwendet werden. Wenn in Abschnitt 3 oder 4 auf einen Parameter Bezug genommen wurde, aber durch ein anderes Symbol dargestellt wurde, wird dieses äquivalente Symbol zur leichteren Bezugnahme in der zweiten Spalte angegeben. Jeder Codiererparameter hat einen festen Wert, der in der Entwurfsphase des Codierers bestimmt wird. Die dritte Spalte zeigt diese festen Parameterwerte, und die vierte Spalte ist eine kurze Beschreibung der Codiererparameter.

Tabelle 1/G.728 Grundlegende Codiererparameter von LD-CELP

5.2 Beschreibung von internen Variablen

Die internen Verarbeitungsvariablen von LD-CELP sind in der Tabelle 2/G.728 aufgelistet, die ein ähnliches Layout wie Tabelle 1/G.728 aufweist. Die zweite Spalte zeigt den Indexbereich in jedem Variablenarray. Die vierte Spalte gibt die empfohlenen Anfangswerte für die Variablen an. Die Anfangswerte bestimmter Arrays werden in den Anhängen A, B oder C gegeben. Es wird empfohlen (ist aber nicht erforderlich), daß die internen Variablen auf ihre Anfangswerte gesetzt werden, wenn der Codierer oder Decodierer gerade beginnt, abzulaufen, oder immer dann, wenn eine Rücksetzung der Codiererzustände benötigt wird (wie zum Beispiel bei DCME-Anwendungen). Diese Anfangswerte stellen sicher, daß es unmittelbar nach dem Herauffahren oder nach Rücksetzungen keine plötzlichen Störungen gibt.

Man beachte, daß bestimmte Variablenarrays dieselben physikalischen Speicherstellen teilen können, um Speicherplatz zu sparen, obwohl ihnen in den Tabellen der Klarheit halber verschiedene Namen gegeben werden.

Wie bereits in früheren Abschnitten erwähnt wurde, weist die Verarbeitungssequenz einen grundlegenden Adaptionszyklus von 4 Sprachvektoren auf. Die Variable ICOUNT wird als der Vektorindex verwendet. Anders ausgedrückt, ist ICOUNT = n, wenn der Codierer oder Decodierer den n-ten Sprachvektor in einem Adaptionszyklus verarbeitet.

Tabelle 2/G.728 Interne Verarbeitungsveriablen von LD-CELP

* NR = Max(LPC, LPCLG) > IDIM

** IPINIT = NPWSZ - NFRSZ + IDIM

Tabelle 2/G.728 Interne Verarbeitungsvariablen von LD-CELP (Fortsetzung)

Man beachte, daß zur einfacheren Levision-Durbin-Rekursion das erste Element von Array A, ATMP, AWP, AWZ und GP immer 1 sind und niemals verändert werden, und daß für i ≥ 2 die i-ten Elemente die (i - 1)-ten Elemente der entsprechenden Symbole in Abschnitt 3 sind.

Im folgenden Abschnitt bedeutet der Stern (*) arithmetische Multiplikation.

5.3. Eingangs-PCM-Formatumsetzung (Block 1)

Eingabe: SO

Ausgabe: SU

Funktion: A-Regel- oder u-Regel-I oder 16- Bit-Lineareingangsabtastwert in gleichförmigen PCM- Abtastwert umwandeln.

Da die Funktionsweise dieses Blocks vollständig in den CCITT-Empfehlungen G.721 oder G.711 definiert wird, soll sie hier nicht wiederholt werden. Man erinnere sich jedoch aus Abschnitt 3.1.1, daß eine gewisse Skalierung notwendig sein kann, um der Spezifikation eines Eingangsumfangs von -4095 bis +4095 der vorliegenden Beschreibung zu entsprechen.

5.4 Vektorpuffer (Block 2)

Eingabe: SU

Ausgabe: S

Funktion: 5 aufeinanderfolgende gleichförmige PCM- Sprachabtastwerte puffern, um einen 5-dimensionalen Sprachvektor zu bilden.

5.5 Adapter für wahrnehmungsbezogenes Gewichtungsfilter (Block 3, Fig. 4 (a)/G.728)

Die drei Blöcke (36, 37, 38) in Fig. 4(a)/G.728 werden nachfolgend im einzelnen spezifiziert.

41

Eingabe: STMP

Ausgabe: R

Funktion: Das Hybridfenster auf Eingangssprache anwenden und Autokorrelationskoeffizienten berechnen.

Die Funktionsweise dieses Moduls wird nun nachfolgend im "Fortran"-Stil beschrieben, wobei Schleifengrenzen durch Einrückungen und Kommentare auf der rechten Seite von " " angegeben werden. Der folgende Algorithmus soll einmal für jeden Adaptionszyklus (20 Abtastwerte) verwendet werden. Das STMP-Array hält 4 aufeinanderfolgende Eingangssprachvektoren bis zum zweiten Sprachvektor des aktuellen Adaptionszyklus. Das heißt, STMP(1) bis STMP(5) ist der dritte Eingangssprachvektor des vorherigen Adaptionszyklus (anfangs Null), STMP(6) bis STMP(10) ist der vierte Eingangssprachvektor des vorherigen Adaptionszyklus (anfangs Null), STMP(11) bis STMP(15) ist der erste Eingangssprachvektor des aktuellen Adaptionszyklus und STMP(16) bis STMP(20) ist der zweite Eingangssprachvektor des aktuellen Adaptionszyklus.

LEVINSON-DURBIN-REKURSIONSMODUL (BLOCK 37)

Eingabe: R (Ausgabe von Block 36)

Ausgabe: AWZTMP

Funktion: Autokorrelationskoeffizienten in Koeffizienten des linearen Prädiktors umwandeln.

Dieser Block wird einmal für jeden 4-Vektor- Adaptionszyklus ausgeführt. Er erfolgt bei ICOUNT = 3 nachdem die Verarbeitung von Block 36 zuende ist. Da die Levinson-Durbin-Rekursion wohlbekannter Stand der Technik ist, wird der Alogorithmus nachfolgend ohne Erläuterung angegeben.

LABEL; Wenn das Programm diesen Punkt erreicht, war eine schlechte Konditionierung aufgetreten; Block 38 dann überspringen, die Gewichtungsfilterkoeffizienten nicht aktualisieren. (Das heißt, Gewichtungsfilterkoeffizienten des vorherigen Adaptionszyklus verwenden.)

GEWICHTUNGSFILTERKOEFFIZIENTENKALKULATOR (BLOCK 38)

Eingabe: AWZTMP

Ausgabe: AWZ, AWP

Funktion: Koeffizienten des wahrnehmungsbezogenen Gewichtungsfilters aus den Koeffizienten des linearen Prädiktors für Eingangssprache berechnen.

Dieser Block wird einmal in jedem Adaptionszyklus ausgeführt. Er erfolgt bei ICOUNT = 3, nachdem die Verarbeitung von Block 37 zuende ist.

5.6 Rückwärts-Synthesefilteradapter (Block 23, Fig. 5/G. 728)

Die drei Blöcke (49, 50 und 51) in Fig. 5/G.728 werden nachfolgend spezifiziert.

HYBRIDFENSTERMODUL (Block 49)

Eingabe: STTMP

Ausgabe: RTMP

Funktion: Hybridfenster auf quantisierte Eingangssprache anwenden und AutokorrelationSkoeffizienten berechnen.

Die Funktionsweise dieses Blocks ist im wesentlichen dieselbe wie in Block 36, mit Ausnahme einiger Substitutionen von Parametern und Variablen, und des Abtastmoments, wenn die Autocorrelationskoeffizienten bestimmt werden. Wie im Abschnitt 3 beschrieben, werden die Autokorrelationskoeffizienten auf der Grundlage der quantisierten Sprachvektoren bis zum letzten Vektor in dem vorherigen 4-Vektor Adaptionszyklus. Anders ausgedrückt, basieren die im aktuellen Adaptionszyklus verwendeten Autokorrelationskoeffizienten auf den Informationen in der quantisierten Sprache bis zum letzten (20-ten) Abtastwert des vorherigen Adaptionszyklus. (Tatsächlich wird so der Adaptionszyklus definiert.) Das STTMP-Array enthält die vier quantisierten Sprachvektorendes des vorherigen Adaptionszyklus.

LEVINSON-DURBIN-REKURSIONSMODUL (Block 50)

Eingabe: RTMP

Ausgabe: ATMP

Funktion: Autokorrelationskoeffizienten in Synthesefilterkoeffizienten umwandeln.

Die Funktionsweise dieses Blocks ist genau dieselbe wie im Block 31, mit Ausnahme einiger Substitutionen von Parametern und Variablen. Es muß jedoch besondere Sorgfalt walten, wenn dieser Block implementiert wird. Wie im Abschnitt 3 beschrieben, finden die tatsächlichen Aktualisierungen des Synthesefilters erst beim dritten Vektor statt, obwohl das Autokorrelations- RTMP-Array beim ersten Vektor jedes Adaptationszyklus verfügbar ist. Diese beabsichtigte Verzögerung von Aktualisierungen ermöglicht der Echtzeit-Hardware, die Berechnung dieses Moduls über die ersten drei Vektoren jedes Adaptionszyklus zu verteilen. Obwohl dieses Modul während der ersten beiden Vektoren jedes Zyklus ausgeführt wird, verwendet man weiterhin die alte Menge von Synthesefilterkoeffizienten (das Array "A"), die im vorherigen Zyklus erhalten wurde. Aus diesem Grund muß man ein separates Array verwenden, um ein Überschreiben des alten "A"-Array zu vermeiden. Ähnlich werden RTMP, RCTMP, ALPHATMP, usw. verwendet, um Störungen anderer Levinson-Durbin-Rekursionsmodule (Block 37 und 44) zu vermeiden.

LABEL: Wenn das Programm diesen Punkt erreicht, ist eine schlechte Konditionierung aufgetreten. Block 51 dann überspringen, Synthesefilterkoeffizienten nicht aktualisieren. (Das heißt, Synthesefilterkoeffizienten des vorherigen Adaptionszyklus verwenden.)

BANDBREITENEXPANDIERUNGSMODUL (Block 51)

Eingabe: ATMP

Ausgabe: A

Funktion: Synthesefilterkoeffizienten skalieren, um die Bandbreiten spektraler Spitzen zu vergrößern.

Dieser Block wird nur einmal in jedem Adaptationszyklus ausgeführt. Er erfolgt, nachdem die Verarbeitung von Block 50 zuende ist und bevor die Ausführung der Blöcke 9 und 10 bei ICOUNT = 3 stattfindet. Wenn die Ausführung dieses Moduls beendet ist und ICOUNT = 3 ist, dann kopiert man das ATMP-Array in das "A"-Array, um die Filterkoeffizienten zu aktualisieren.

5.7 Rückwärts-Vektorverstärkungsadapter (Block 20, Fig. 6/G.728)

Die Blöcke in Fig. 6/G.728 werden nachfolgend spezifiziert. Zur wirksameren Implementierung werden bestimmte Blöcke zusammen als ein einziger Block beschrieben (sie sind außerdem in Fig. 6/G.728 separat gezeigt, nur um das Konzept zu erläutern). Alle Blöcke in Fig. 6/G.728 werden einmal für jeden Sprachvektor ausgeführt, mit Ausnahme der Blöcke 43, 44 und 45, die nur ausgeführt werden, wenn ICOUNT = 2 ist.

1-VEKTOR-VERZÖGERUNG, RMS-KALKULATOR UND LOGARITHMUSKALKULATOR (Block 67, 39 und 40)

Eingabe: ET

Ausgabe: ETRMS

Funktion: dB-Pegel des Effektivwerts (RMS) des vorherigen verstärkungsskalierten Anregungsvektors berechnen.

Wenn diese drei Blöcke ausgeführt werden (d.h., vor der VQ-Codebuchsuche), enthält das ET-Array den verstärkungsskalierten Anregungsvektor, der für den vorherigen Sprachvektor bestimmt wurde. Deshalb wird die 1-Vektor-Verzögerungseinheit (Block 67) automatisch ausgeführt. (Sie erscheint in Fig. 6/G.728 nur der Klarheit halber.) Da der Logaritmuskalkulator unmittelbar dem RMS-Kalkulator folgt, kann die Quadratwurzeloperation in dem RMS-Kalkulator als eine "Division-durch-Zwei"-Operation für die Ausgabe des Logaritmuskalkulators implementiert werden. Daher ist die Ausgabe des Logaritmuskalkulators (der dB-Wert) 10*log&sub1;&sub0; (Energie von ET/IDIM). Um einen Überlauf des Logarithmuswerts zu vermeiden, wenn ET = 0 ist (nach dem Initiakisieren oder Rücksetzen des Systems), wird das Argument für die Logarithmusoperation auf 1 abgeschnitten, wenn es zu klein ist. Außerdem sei bemerkt, daß ETRMS gewöhnlich in einem Akkumulator gehalten wird, da es ein temporärer Wert ist, der im Block 42 unmittelbar verarbeitet wird.

LOG.-VESTÄRKUNGSOFFSET-SUBTRAHIERER (BLOCK 42)

Eingaben: ETRMS, GOFF

Ausgabe: GSTATE(1)

Funktion: im Block 41 gehaltenen Log.- Verstärkungsoffsetwert von der Ausgabe von Block 40 (dB-Verstärkungspegel) subtrahieren.

HYBRIDFENSTERMODUL (BLOCK 43)

Eingabe: GTMP

Ausgabe: R

Funktion: Das Hybridfenster auf offset-subtrahierte Log.-Verstärkungsfolge anwenden und Autokorrelationskoeffizienten berechnen.

Die Funktionsweise dieses Blocks ist Block 36 sehr ähnlich, mit Ausnahme einiger Substitutionen von Parametern und Variablen und des Abtastmoments, wenn die Autokorrelationskoeffizienten bestimmt werden.

Ein wichtiger Unterschied zwischen Block 36 und diesem Block besteht darin, daß diesem Block nur vier (statt 20) Verstärkungsabtastwerte zugeführt werden, wenn der Block ausgeführt wird.

Die Koeffizienten des Log.-Verstärkungsprädiktors werden beim zweiten Vektor jedes Adaptationszyklus aktualisiert. Das nachfolgende GTMP-Array enthält 4 Log.-Verstärkungswerte mit entferntem Offset, beginnend mit der Log.-Verstärkung des zweiten Vektors des vorherigen Adaptationszyklus bis zu der to the Log.- Verstärkung des ersten Vektors des aktuellen Adaptationszyklus, d.h., GTMP( 1). GTMP(4) ist der Log.- Verstärkungswert mit entferntem Offset aus dem ersten Vektor des aktuellen Adaptationszyklus, also der neueste Wert.

LEVINSON-DURBIN-REKURSIONSMODUL (Block 44)

Eingabe: R (Ausgabe von Block 43)

Ausgabe: GPTMP

Funktion: Autokorrelationskoeffizienten in Log.- Verstärkungs-Prädiktoroeffizienten umwandeln.

Die Funktionsweise dieses Blocks ist genau dieselbe wie im Block 37, mit Ausnahme einiger Substitutionen von Parametern und Variablen wie folgt: ersetze LPCW durch LPCLG und AWZ durch GP. Dieser Block wird nur dann ausgeführt, wenn ICOUNT = 2 ist, nachdem Block 43 ausgeführt wird. Man beachte, daß als erster Schritt der Wert von R(LPCLG+1) geprüft wird. Wenn der Null ist, werden die Blöcke 44 und 45 übersprungen, ohne die Log.-Verstärkungs-Prädiktorkoeffizienten zu aktualisieren. (Das heißt, man verwendet weiter die alten Log.-Verstärkungs-Prädiktorkoeffizienten, die im vorherigen Adaptationszyklus bestimmt wurden.) Diese spezielle Prozedur ist so ausgelegt, daß eine sehr kleine Störspitze vermieden wird, die andernfalls unmittelbar nach einem Initialisieren oder Rücksetzen des Systems aufgetreten wäre. Falls die Matrix schlecht konditioniert ist, überspringt man außerdem Block 45 und verwendet die alten Werte.

BANDBREITENEXPANDIERUNGSMODUL (BLOCK 45)

Eingabe: GPTMP

Ausgabe: GP

Funktion: Log.-Verstärkungs-Prädiktorkoeffizienten skalieren, um die Bandbreiten spektraler Spitzen zu vergrößern.

Dieser Block wird nur ausgeführt, wenn ICOUNT = 2 ist, nachdem Block 44 ausgeführt wird.

LINEARER PRÄDIKTOR DER LOG.-VERSTÄRKUNG (BLOCK 46)

Eingaben: GP, GSTATE

Ausgabe: GAIN

Funktion: Den aktuellen Wert der Log.-Verstärkung mit subtrahiertem Offset vorhersagen.

LOG.-VERSTÄRKUNGS-OFFSET-ADDIERER (zwischen Block 46 und 47)

Eingaben: GAIN, GOFF

Ausgabe: GAIN

Funktion: Log.-Verstärkungs-Offsetwert wieder zu der Ausgabe des Prädiktors der Log.-Verstärkung addieren.

LOG.-VERSTÄRKUNGS-BEGRENZER (Block 47)

Eingabe: GAIN

Ausgabe: GAIN

Funktion: Den Umfang der vorhergesagten logarithmischen verstärkung begrenzen.

INVERS-LOGARITHMUSKALKULATOR (BLOCK 48)

Eingabe: GAIN

Ausgabe: GAIN

Funktion: die vorhergesagte logarithmische Verstärkung (in dB) wieder in linearen Bereich umsetzen.

5.8 Wahrnehmungsbezogenes Gewichtungsfilter WAHRNEHMUNGSBEZOGENES GEWICHTUNGSFILTER (BLOCK 4)

Eingaben: S. AWZ, AWP

Ausgabe: SW

Funktion: Eingangssprachvektor filtern, um wahrnehmungsbezogene Gewichtung zu erreichen.

Obiges für nächstes K wiederholen.

5.9 Berechnung des Null-Eingangsantrwortvektors

Abschnitt 3.5 erläutert, wie ein "Null- Eingangsantwortvektor" r(n) von Block 9 und 10 berechnet wird. Nun wird die Funktionsweise dieser beiden Blöcke während dieser Phase spezifiziert. Ihre Funktionsweise währende der "Speicheraktualisierungsphase" wird später beschrieben.

SYNTHESEFILTER (BLOCK 9) WÄHREND NULL- EINGANGSANTWORTBERECHNUNG

Eingaben: A, STATELPC

Ausgabe: TEMP

Funktion: Null-Eingangsantwortvektor des Synthesefilters berechnen.

Obiges für nächstes K wiederholen.

WAHRNEHMUNGSEEZOGENES GEWICHTUNGSFILTER WÄHREND NULL- EINGANGSANTWORTBERECHNUNG (BLOCK 10)

Eingaben: AWZ, AWP, ZIRWFIR, ZIRWIIR, TEMP, oben berechnet

Ausgabe: ZIR

Funktion: Null-Eingangsantwortvektor des wahrnehmungsbezogenen Gewichtungsfilters berechnen.

Obiges für nächstes K wiederholen.

5.10 VQ-Zielvektorberechnung VQ-ZIELVEKTORBERECHNUNG (BLOCK 11)

Eingaben SW, ZIR

Ausgabe: TARGET

Funktion: Null-Eingangsantwortvektor von dem gewichteten Sprachvektor subtrahieren.

Anmerkung: ZIR(K) = ZIRWIIR(IDIM + 1 - K) aus obigem Block 10. Es erfordert keine separate Speicherstellen.

5.11 Codebuchsuchmodul (Block 24)

Die sieben Blöcke in dem Codebuchsuchmodul (Block 24) werden nachfolgend spezifiziert. Wieder werden bestimmte Blöcke der Klarheit und Einfachheit der Implementierung halber als ein einziger Block beschrieben. Die Blöcke 12, 14 und 15 werden einmal in jedem Adaptationszyklus ausgeführt, wenn ICOUNT = 3 ist, während die anderen Blöcke einmal für jeden Sprachvektor ausgeführt werden.

IMPULSANTWORTVEKTORKALKULATOR (BLOCK 12)

Eingaben: A, AWZ, AWP

Ausgabe: H

Funktion: Impulseantwortvektor des kaskadierten Synthesefilters und des wahrnehmungsbezogenen Gewichtungsfilter berechnen.

Dieser Block wird ausgeführt, wenn ICOUNT = 3 ist, und nach der Ausführung von Block 23 und 3 (d.h., wenn die neuen Mengen von Koeffizienten A, AWZ, AWP fertig sind).

FORMCODEVEKTORFALTUNGSMODUL UND ENERGIETABELLENKALKULATOR (BLOCK 14 UND 15)

Eingaben: H, Y

Ausgabe: Y2

Funktion: Jeden Formcodevektor mit der im Block 12 bestimmten Impulsantowort falten, dann die Energie des resultierenden Vektors berechnen und speichern.

Dieser Block wird auch ausgeführt, wenn ICOUNT = 3 ist, nachdem die Ausführung von Block 12 abgeschlossen ist.

Die obigen 4 Zeilen für das nächste K wiederholen

Obiges für nächstes J wiederholen

VQ-ZIELVEKTORNORMIERUNG (BLOCK 16)

Eingaben: TARGET, GAIN

Ausgabe: TARGET

Funktion: VQ-Zielvektor mit der vorhergesagten Anregungsverstärkung normieren.

ZEITUMKEHR-FALTUNGSMODUL (block 13)

Eingaben: H, TARGET (Ausgabe von Block 16)

Ausgabe: PN

Funktion: zeitlich umgekehrte Faltung des Impulsantwirtvektors und des normierten VQ-Zielvektors durchführen (um den Vektor p(n) zu erhalten).

Anmerkung: Der Vektor PN kann in temporärer Speicherung gehalten werden.

Obiges für nächstes K wiederholen.

FEHLERKALKULATOR UND SELEKTOR FÜR BESTEN CODEBUCHINDEX (Block 17 und 18)

Eingaben: PN, Y, Y2, GB, G2, GSQ

Ausgaben: IG, IS, ICHAN

Funktion: Verstärkungscodebuch und Formcodebuch durchsuchen, um beste Kombination von Verstärkungscodebuchindex und Formcodebuchindex zu identifizieren, und die beiden kombinieren, um den besten 10-Bit-Codebuchindex zu erhalten.

Anmerkung: Die unten verwendete Variable COR wird gewöhnlich in einem Akumulator gehalten, anstatt sie im Speicher zu speichern. Die Variablen IDXG und J können in temporären Registern gehalten werden, während IG und IS im Speicher gehalten werden können.

DISTM auf die größte in der Hardware darstellbare Zahl initialisieren:

Obigen eingerückten Teil für nächstes K wiederholen

Bei serieller Bitstromübertragung sollte das höchstwertige Bit von ICHAN zuerst übertragen werden.

Wenn ICHAN durch das 10-Bit-Wort b&sub9;b&sub8;b&sub7;b&sub6;b&sub5;b&sub4;b&sub3;b&sub2;b&sub1;b&sub0; dargestellt wird, dann sollte die Reihenfolge der übertragenen Bit b&sub9;, und dann b&sub8;, und dann b&sub7;, ..., und als letztes b&sub0; sein. (b&sub9; ist das höchstwertige Bit.)

5.12 Simulierter Decodierer (Block 8)

Die Blöcke 20 und 23 wurden bereits spezifiziert. Die Blöcke 19, 21 und 22 werden nachfolgend spezifiziert.

ANREGUNGS-VQ-CODEBUCH (Block 19)

Eingaben: IG, IS

Ausgabe: YN

Funktion: Tabellennachschlag durchführen, um den besten Formcodevektor und die beste Verstärkung zu entnehmen und sie dann multiplizieren, um den quantisierten Anregungsvektor zu erhalten.

VERSTÄRKUNGSSKALIERUNGSEINHEIT (Block 21)

Eingaben: GAIN, YN

Ausgabe: ET

Funktion: quantisierten Anregungsvektor mit der Anregungsverstärkung multiplizieren.

SYNTHESEFILTER (Block 22)

Eingaben: ET, A

Ausgabe: ST

Funktion: Verstärkungsskalierten Anregungsvektor filtern, um den quantisierten Sprachvektor zu erhalten.

Wie im Abschnitt 3 erläutert wurde, kann dieser Block weggelassen werden, und der quantisierte Sprachvektor kann als Nebenprodukt der nachfolgend beschriebenen Speicheraktualisierungsprozedur bestimmt werden. Wenn man jedoch diesen Block trotzdem implementieren möchte, sollte für dieses Nur-Pole-Synthesefilter eine separate Menge von Filterspeicher verwendet werden.

5.13 Filterspeicheraktualisierung für Block 9 und 10

Die folgende Beschreibung der Filterspeicheraktualisierungsprozeduren für Block 9 und 10 nimmt an, daß der quantisierte Sprachvektor ST als Nebenprodukt der Speicheraktualisierungen erhalten wird. Um vor einer möglichen Überlastung der Signalpegel zu schützen, ist ein die Prozedur ein Betragsbegrenzer eingebaut, damnit der Filterspeicher bei MAX und MIN abschneidet, wobei MAX und MIN der positive bzw. negative Sättingungspegel von A-Regel- or u-Regel-PCM ist, je nachdem, welche Regel verwendet wird.

FILTERSPEICHERAKTUALISIERUNG (Block 9 und 10)

Eingaben: ET, A, AWZ, AWP, STATELPC, ZIRWFIR, ZIRWIIR

Ausgaben: ST, STATELPC, ZIRWFIR, ZIRWIIR

Funktion: Filterspeicher von Block 9 und 10 aktualisieren und außerdem den quantisierten Sprachvektor erhalten.

Obigen eingerückten Teil für nächstes K wiederholen

5.24 Decodierer (Fig. 3/G.728)

Die Blöcke im Decodierer (Fig. 3/G.728) werden nachfolgend beschrieben. Mit Außnahme des Ausgangs-PCM- Format-Umsetzungsblocks, sind alle anderen Blöcke genau dieselben wie die Blöcke in dem simulierten Decodierer (Block 8) in Fig. 2/G.728.

Der Decodierer verwendet nur eine Teilmenge der variablen in Tabelle 2/G.728. Wenn ein Decodierer und ein Codierer in einem einzigen DSP-Chip implementiert werden sollen, dann sollten den Decodierervariablen andere Namen gegeben werden, um die in dem Block des simulierten Decodierers verwendeten variblem vermeiden. Zum Beispiel kann man, um die Decodierervariablen zu benennen, ein Präfix "d" zu den entsprechenden Variablennamen in Tabelle 2/G.728 hinzufügen. Wenn ein Decodierer als eine selbständige Einheit implementiert werden soll, die von einem Codierer unabhängig ist, dann müssen die Variablennnamen nicht geändert werden.

Die folgende Beschreibung nimmt einen selbständigen Decodierer an. Wieder werden die Blöcke in derselben Reihenfolge ausgeführt, in der sie nachfolgend beschrieben werden.

DECODIERER-RÜCKWÄRTS-SYNTHESEFILTERADAPTER (Block 33)

Eingabe: ST

Ausgabe: A

Funktion: Synthesefilterkoeffizienten periodisch aus zuvor codierter Sprache erzeugen.

Die Funktionsweise dieses Blocks ist genau dieselbe wie in Block 23 des Codierers.

DECODIERER-RÜCKWÄRTS-VEKTORVERSTÄRKUNGSADAPTER (Block 30)

Eingabe: ET

Ausgabe: GAIN

Funktion: Anregungsverstärkung aus vorherigen verstärkungsskalierten Anregungsvektoren erzeugen.

Die Funktionsweise dieses Blocks ist genau dieselbe wie in Block 20 des Codierers.

DECODIERER-EANREGUNGS-VQ-CODEBUCH (Block 29)

Eingabe: ICHAN

Ausgabe: YN

Funktion: Den empfangenen besten Codebuchindex (channel index) decodieren, um den Anregungsvektor zu erhalten. Dieser Block entnimmt zunächst den 3-Bit- Verstärkungscodebuchindex IG und den 7-Bit- Formcodebuchindex IS aus dem empfangenen 10-Bit- Kanalindex. Danach ist der Rest der Operation genau wie im Block 19 des Codierers.

DECODIERER-VERSTÄRKUNGSSKALIERUNGSEINHEIT (Block 31)

Eingaben: GAIN, YN

Ausgabe: ET

Funktion: Anregungsvektor mit der Anregungsverstärkung multiplizieren.

Die Funktionsweise dieses Blocks ist genau dieselbe wie in Block 21 des Codierers.

DECODIERER-SYNTHESEFILTER (Block 32)

Eingaben: ET, A, STATELPC

Ausgabe: ST

Funktion: Verstärkungskalierten Anregungsvektor filtern, um den decodierten Sprachvektor zu erhalten. Dieser Block kann als ein einfaches Nur-Pole-Filter implementiert werden. Wie bereits im Abschnitt 4.3 erwähnt sollte, wenn der Codierer die quantisierte Sprache als Nebenprodukt der Filterspeicheraktualisierung erhält (um Rechnungen zu sparen), und wenn eine potentielle Anhäufung des Rundungsfehlers ein Problem ist, dieser Block die decodierte Sprache genauso berechnen wie in dem Block des simulierten Decodierers des Codierers. Das heißt, der decodierte Sprachvektor sollte als die Summe des Null-Eingangs-Antwortvektors und des Null-Zustand- Antwortsvektors des Synthesefilters berechnet werden. Dies kann durch die folgende Prozedur geschehen.

Obiges für nächstes K wiederholen.

Obiges für nächstes K wiederholen.

LPC-OMKEHRUNGSFILTER 10. ORDNUNG (Block 81)

Dieser Block wird einmal pro Vektor ausgeführt und der Ausgangsvektor wird sequentiell in die letzten 20 Abtastwerte des LPC-Prädiktionsrestpuffer [d.h. D(81) bis D(100)J geschrieben. Man verwendet einen Zeiger IP, um auf die Adresse von D(K)-Array-Abtastwerten zu zeigen, die beschrieben werden sollen. Dieser Zeiger IP wird auf NPWSZ - NFRSZ + IDIM initialisiert, bevor dieser Block mit der Verarbeitung des ersten decodierten Sprachvektors des ersten Adaptationszyklus (Rahmens) beginnt, und von dort an wird IP 15 auf die nachfolgend beschriebene Weise aktualisiert. Die Koeffizienten APF( I) des LPC-Prädiktors 10. Ordnung werden in der Mittel der Levinson-Durbin-Rekursion durch Block 50 bestimmt, wie in Abschnit 4.6 beschrieben. Es wird angenommen, daß vor dem Start der Ausführung dieses Blocks das Decodierersynthesefilter (Block 32 von Fig. 3/G.728) bereits den aktuellen decodierten Sprachvektor in ST(1) bis ST(IDIM) geschrieben hat.

Eingaben: ST, APF

Ausgabe: D

Funktion: Berechnung des LPC-Prädiktionsrests für den gerade decodierten Sprachvektor.

TONHÖHENPERIODEN-ENTNAHMEMODUL (Block 82)

Dieser Block wird einmal pro Rahmen beim dritten Vektor jedes Rahmen ausgeführt, nachdem der dritte decodierte Sprachvektor erzeugt wurde.

Eingabe: D

Ausgabe: KP

Funktion: Tonhöhenperiode aus dem LPC-Prädiktionsrest entnehmen.

If ICOUNT ≠ 3, Ausführung dieses Blocks überspringen, andernfalls folgendes:

TONHÖHENPRÄDIKTORABGRIFFSKALKULATOR (Block 83)

Dieser Block wird ebenfalls einmal pro Rahmen beim dritten Vektor jedes Rahmens unmittelbar nach der Ausführung von Block 82 ausgeführt. Dieser Block teilt den Puffer für decodierte Sprache (ST(K)-Array) mit dem Langzeit-Nachfilter 71, das das Schieben des Array dergestalt besorgt, daß ST(1) bis ST(IDIM) den aktuellen Vektor decodierter Sprache bilden, und ST(-KPMAX-NPWSZ+1) bis ST(0) sind vorherige Vektoren decodierter Sprache.

Eingaben: ST, KP

Ausgabe: PTAP

Funktion: Optimales Abgriffgewicht des Tonhöhenprädiktor mit einem Abgriff für decodierte Sprache berechnen.

If ICOUNT ≠ 3, Ausführung dieses Blocks überspringen, andernfalls folgendes:

LANGZEIT-NACHFILTERKOEFFIZIENTENKALKULATOR (Block 84)

Dieser Block wird ebenfalls einmal pro Rahmen beim dritten Vektor jedes Rahmens unmittelbar nach der Ausführung von Block 83 ausgeführt.

Eingabe: PTAP

Ausgaben: B, GL

Funktion: Koeffizienten b und Skalierungsfaktor gl of des Langzeit-Nachfilters berechnen.

KURZZEIT-NACHFILTERKOEFFIZIENTENKALKULATOR (Block 85)

Dieser Block wird ebenfalls einmal pro Rahmen ausgeführt, aber beim ersten Vektor jedes Rahmens.

Eingaben: APF, RCTMP( 1)

Ausgaben: AP, AZ, TILTZ

Funktion: Koeffizients des Kurzzeit-Nachfilters berechnen.

If ICOUNT ≠ 1, Ausführung dieses Blocks überspringen, andernfalls folgendes:

LANGZEIT-NACHFILTER (Block 71)

Dieser Block wird einmal pro Vektor ausgeführt.

Eingaben: ST, B, GL, KP

Ausgabe: TEMP

Funktion: Filteroperation des Langzeit-Nachfilters ausführen.

KURZZEIT-NACHFILTER (Block 72)

Dieser Block wird einmal pro Rahmen unmittelbar nach der Ausführung von Block 71 ausgeführt.

Eingaben: AP, A2, TILTZ, STPFFIR, STPFIIR, TEMP (Ausgabe von Block 71)

Ausgabe: TEMP

Funktion: Filteroperation für das Kurzzeit-Nachfilter ausführen.

ABSOLUTWERTSUIGMENKALKULATOR (Block 73)

Dieser Block wird einmal pro Vektor nach der Ausführung von Block 32 ausgeführt.

Eingabe: ST

Ausgabe: SUMUNFIL

Funktion: Berechung der Summe von Absolutwerten der Komponenten des decodierten Sprachvektors.

ABSOLUTWERTSUMMENKALKULATOR (Block 74)

Dieser Block wird einmal pro Vektor nach der Ausführung von Block 72 ausgeführt.

Eingabe: TEMP (output of Block 72)

Ausgabe: SUMFIL

Funktion: Berechung der Summe von Absolutwerten der Komponenten des Kurzzeit-Nachfilterausgangsvektors.

SKALIERUNGSFAKTORKALKULATOR (Block 75)

Dieser Block wird einmal pro Vektor nach der Ausführung der Blöcke 73 und 74 ausgeführt.

Eingaben: SUMUNFIL, SUMFIL

Ausgabe: SCALE

Funktion: Berechnung des Gesamt-Skalierungsfaktors des Nachfilters.

TIEFPASSFILTER ERSTER ORDNUNG (Block 76) und AUSGANGSVERSTÄRKUNGSSKALIERUNGSEINHEIT (Block 77)

Diese beiden Blöcke werden einmal pro Vektor nach der Ausführung der Blöcke 72 und 75 ausgeführt. Es ist einfacher, die beiden Blöcke zusammen zu beschreiben.

Eingaben: SCALE, TEMP (Ausgabe von Block 72)

Ausgabe: SPF

Funktion: Tiefpaßfilterung des Einmal-pro-Vektor- Skalierungsfaktors und Verwendung des gefilterten Skalierungsfaktors, um den Kurzzeit- NachfilterAusgangsvektor zu skalieren.

AUSGANGS-PCM-FORMATUMSETZUNG (Block 28)

Eingabe: SPF

Ausgabe: SD

Funktion: Die fünf Komponenten des decodierten Sprachvektors in 5 entsprechende A-Regel- oder u-Regel- PCM-Abtastwerte umwandeln und diese sequentiell in Intervallen von 125 ms ausgeben.

Die Umsetzungsregeln von gleichförmiger PCM in A-Regel- oder u-Regel-PCM werden in der Empfehlung G.711 spezifiziert.

ANHANG A (zur Empfehlung G.728) HYBRIDFENSTERFUNKTIONEN FÜR VESCHIEDENE LPC-ANALYSEN BEI LD-CELP

Im LD-CELP-Codierer verwendet man drei getrennte LPC- Analysen, um die Koeffizienten dreier Filter zu aktualisieren: ( 1) das Synthesefilter, (2) der Log.- Verstärkungsprädiktor und (3) das wahrnehmungsbezogene Gewichtungsfilter. Jede dieser drei LPC-Analysen besitzt ihr eigenes Hybridfenster. Für jedes Hybridfenster werden die Werte von Fensterfunktionsabtastwerten aufgelistet, die bei der Hybridfensterberechnungsprozedur verwendet werden. Diese Fensterfunktionen wurden zunächst mit Gleitkommaarithmetik entworfen und dann auf die Zahlen quantisiert, die genau durch 16-Bit-Darstellungen mit 15 Dezimalstellen darsgestelIfwerden können. Für jedes Fenster wird zunächst eine Tabelle mit der Gleitkommaentsprechung der 16-Bit-Zahlen und dann eine Tabelle mit entsprechenden 16-Bit-Integer-Darstellungen angegeben.

A.1 Hybridfenster für Synthesefilter

Die folgende Tabelle enthält die ersten 105 Abtastwerte der Fensterfunktion für das Synthesefilter. Die ersten 35 Abtastwerte sind der nichtrekursive Teil, und der Rest ist der rekursive Teil. Die Tabelle sollte von links nach rechts von der ersten Zeile an und dann von links nach rechts für die zweite Zeile gelesen werden, usw. (genau wie eine Rasterabtastzeile).

Die nächste Tabelle enthält die entsprechende 16-Bit- Integer-Darstellung. Durch Dividieren der Tabelleneinträge durch 2¹&sup5; = 32768 erhält man die obige Tabelle.

A.2 Hybridfenster für den Log.-Verstärkungsprädiktor

Die folgende Tabelle enthält die ersten 34 Abtastwerte der Fensterfunktion für den Lo.-Verstärkungsprädiktor. Die ersten 20 Abtastwerte sind der nichtrekursive Teil, und der Rest ist der rekursive Teil. Die Tabelle sollte genauso wie die beiden obigen Tabellen gelesen werden.

Die nächste Tabelle enthält die entsprechende 16-Bit- Integer-Darstellung. Durch Dividieren der Tabelleneinträge durch 2¹&sup5; = 32768 erhält man die obige Tabelle.

A.3 Hybridfenster für das wahrnehmungsbezogene Gewichtungsfilter

Die folgende Tabelle enthält die ersten 60 Abtastwerte der Fensterfunktion für das wahrnehmungsbezogene Gewichtungsfilter. Die ersten 30 Abtastwerte sind der nichtrekursive Teil, und der Rest ist der rekursive Teil. Die Tabelle sollte genauso wie die vier obigen Tabellen gelesen werden.

Die nächste Tabelle enthält die entsprechende 16-Bit- Integer-Darstellung. Durch Dividieren der Tabelleneinträge durch 2¹&sup5; = 32768 erhält man die obige Tabelle.

ANHANG B (zur Empfehlung G.728) ANREGUNGS-FORM- UND VERSTÄRKUNGSCODEBUCHTABELLEN

Dieser Anhang gibt die zunächst die 7-Bit-Anregungs-VQ- Formcodebuchtabelle an. Jede Zeile in der Tabelle spezifiziert einen der 128 Formcodevektoren. Die erste Spalte ist der Kanalindex, der jedem Formcodevektor zugeordnet ist (erhalten durch einen Gray-Code- Indexzuweisungsalgorithmus). Die zweite bis sechste Spalte sind die erste bis fünfte Komponente der 128 Formcodevektoren in 16-Bit-Festkommadarstellung. Um aus dem Integer-Wert den Gleitkommawert zu erhalten, dividiert man den Integer-Wert durch 2048. Dies entspricht einer Multiplikation mit 2&supmin;¹¹ oder dem Verschieben des binären Kommas um 11 Bit nach links.

Als nächstes werden die Werte für das Verstärkungscodebuch angegeben. Diese Tabelle enthält nicht nur die Werte für GQ, sondern auch die Werte für GB, G2 und GSQ. GQ und GB können beide unter Verwendung des Q13- Formats exakt in der 16-Bit-Arithmetik dargestellt werden. Die Festkommadarstellung von G2 ist dieselbe wie für GQ, mit der Ausnahme, daß das Format nun Q12 ist. Ein ungefähre Darstellung von GSQ auf die nächste ganze Zahl in dem Festkomma-Q12-Format reicht aus.

Tabelle Werte von mit dem Verstarkungscodebuch zusammenhängenden Arryas

* kann ein beliebiger Wert sein (unbenutzt)

** man beachte, daß GQ(1) = 33/64 und GQ(i) = (7/4) GQ(i - 1) für i = 2, 3, 4 gilt.

ANHANG C (zur Empfehlung G.728) BEI DER BANDBREITENEXPANDIERUNG VERWENDETE WERTE

Die folgende Tabelle gibt die Integer-Werte für die in Tabelle 2 aufgelisteten Polsteuer-, Nullstellensteuer- und Bandbreitenexpandierungsvektoren. Um den Gleitkommawert zu erhalten, dividiert man den Integer- Wert durch 16384. Die in dieser Tabelle aufgelisteten Werte stellen diese Gleitkommawerte im Q14-Format, dem am weitesten verbreiteten Format zur Darstellung von Zahlen kleiner als 2 in der 16-Bit-Festkommaarithmetik, dar.

ANHANG D (zur Empfehlung G.728) KOEFFIZIENTEN FÜR DAS IM TONHÖHENPERIODENENTNAHMEMODUL (BLOCK 82) VERWENDETE ELLIPTISCHE 1-kHz-TIEFPASSFILTER

Das in dem Tonhöhenverspätungsentnahme- und Codierungsmodul (Block 82) verwendete 1-kHz- Tiefpaßfilter ist ein Pol-Nullstellen-Filter dritter Ordnung mit der Übertragungsfunktion

wobei die Koeffizienten ai's und bi's in den folgenden Tabellen aufgeführt sind.

ANHANG E (zur Empfehlung G.728) ZEITABLAUFSTEUERUNG DER FOLGE VON BERECHNUNGEN

Alle Berechnungen im Codierer und Decodierer können in zwei Klassen aufgeteilt werden. Zu der ersten Klasse gehören diejenigen Berechnungen, die einmal pro Vektor erfolgen. In den Abschnitten 3 bis 5.14 wird angegeben, welche Berechnungen dies sind. Im allgemeinen sind es die Berechnungen, bei denen eine tatsächliche Quantisierung des Anregungssignals und die Synthese des Ausgangssignals erfolgen oder die dazu führen. Unter besonderer Bezugnahme auf die Blcoknummern in Fig. 2 enthält diese Klasse die Blöcke 1, 2, 4, 9, 10, 11, 13, 16, 17, 18, 21 und 22. In Fig. 3 enthält diese Klasse Blöcke 28, 29, 31, 32 und 34. In Fig. 6 enthält diese Klasse die Blöcke 39, 40, 41, 42, 46, 47, 48 und 67. (Man beachte, daß Fig. 6 sowohl auf Block 20 in Fig. 2 als auch Block 30 in Fig. 3 anwendbar ist. Die Blöcke 43, 44 und 45 von Fig. 6/G.728 sind nicht Teil dieser Klasse. Somit die die Blöcke 20 und 30 Teil beider Klassen).

In der anderen Klasse befinden sich diejenigen Berechnungen, die nur einmal alle vier Vektoren durchgeführt werden. Nochmals unter Bezugnahme auf Fig. 2 bis 8 enthält diese die Blöcke 3, 12, 14, 15, 23, 33, 35, 36, 37, 38, 43, 44, 45, 49, 50, 51, 81, 82, 83, 84 und 85. Alle Berechnungen in dieser zweiten Klasse sind der Aktualisierung eines oder mehrerer adaptiver Filter oder Prädiktoren im Codierer zugeordnet. Im Codierer befinden sich drei solche adaptiven Strukturen, das LPC-Synthesefilter 50. Ordnung, der Vektorverstärkungsprädiktor und das wahrnehmungsbezogene Gewichtungsfilter. Im Decodierer befinden sich vier solche Strukturen, das Synthesefilter, der Verstärkungsprädiktor und das Langzeit- und das Kurzzeit-Nachfilter. Die Beschreibungen der Abschnitte 3 bis 5.14 enthalten die Zeiten und Eingangssignale für jede dieser fünf adaptiven Strukturen. Obwohl es redundant ist, führt der vorliegende Anhang für den Leser alle diese Zeitsteuerungsinformationen an einer Stelle auf. Die folgende Tabelle faßt die fünf adaptiven Strukturen, ihre Eingangssignale, ihre Berechnungszeiten und den Zeitpunkt der ersten Verwendung der aktualisierten Werte zusammen. Dabei bezieht sich die vierte Spalte in der Tabelle auf den in den Figuren und in den Abschnitten 3, 4 und 5 verwendeten Blocknummern als Querverweis auf diese Berechnungen.

Es wird erwartet, daß der allergrößte Teil der Berechnungen bei der Aktualisierung des Synthesefilters 50. Ordnung aufbracht wird. Das erforderliche Eingangssignal ist die Ausgangssprache des Synthesefilters (ST). Sobald der vierte Vektor in dem vorherigen Zyklus decodiert wurde, kann das Hybridfensterverfahren zur Berechnung der Autokorrelationskoeffizienten beginnen (Block 49). Nach seinem Abschluß kann die Durbinsche Rekursion zur Bestimmung der Prädiktionskoeffizienten beginnen (Block 50). In der Praxis wurde festgestellt, daß es notwendig ist, diese Berechnung über mehr als einen Vektorzyklus zu verteilen. Man beginnt die Hybridfensterberechnung, bevor Vektor 1 vollständig empfangen wurde. Bevor die Durbinsche Rekursion vollständig abgeschlossen werden kann, muß man sie unterbrechen, um Vektor 1 zu codieren. Die Durbinsche Rekursion ist erst bei Vektor 2 abgeschlossen. Als letztes wird die Bandbreitenexpandierung (Block 51) auf die Prädiktorkoeffizienten angewandt. Die Ergebnisse dieser Berechnung werden erst dann verwendet, wenn Vektor 3 codiert oder decodiert wird, weil man im Codierer diese aktualisierten Werte mit der Aktualisierung des wahrnehmungsbezogenen Gewichtungsfilters und Codevektorenergien kombinieren muß. Diese Aktualisierungen sind erst mit Vektor 3 verfügbar.

Die Verstärkungsadaption geht auf zweierlei Weise voraus. Der adaptive Prädiktor wird alle vier Vektoren einmal aktualisiert. Der adaptive Prädiktor erzeugt jedoch einmal pro Vektor einen neuen Verstärkungswert. In diesem Abschnitt wird die Zeitsteuerung der Aktualisierung des Prädiktors beschrieben. Für diese Berechnung muß zunächst das Hybridfensterverfahren an den vorherigen log. Verstärkungen ausgeführt werden (Block 43), und dann die Durbinsche Rekursion (Block 44) und die Bandbreitenexpandierung (Block 45). Dies alles kann abgeschlossen werden, während Vektor 2 die bis zum Vektor 1 verfügbaren log. Verstärkungen verwendet. Wenn das Ergebnis der Durbinschen Rekursion anzeigt, daß keine Singularität vorliegt, wird der Neu- Verstärkungsprädiktor unmittelbar bei der Codierung von Vektor 2 verwendet.

Zeitsteuerung von Adapteraktualisierungen

Die Aktualisierung des wahrnehmungsbezogenen Gewichtungsfilters wird während Vektor 3 berechnet. Der erste Teil dieser Aktualisierung führt die LPC-Analyse der Eingangssprache bis zum Vektor 2 durch. Man kann diese Berechnung unmittelbar nach der Codierung von Vektor 2 beginnen, und braucht nicht darauf zu warten, daß Vektor 3 vollständig empfangen wird. Dies umfaßt die Durchführung des Hybridfensterverfahrens (Block 36), der Durbinschen Rekursion (Block 37) und der Berechnungen für die Koeffizienten des wahrnehmungsbezogenen Gewichtungsfilters (Blcok 38). Als nächstes muß man das wahrnehmungsbezogene Gewichtungsfilter mit dem aktualisierten Synthesefilter kombinieren, um den Impulsantwortvektorkalkulator zu berechnen (Block 12). Außerdem muß man jeden Formcodevektor mit dieser Impulsantwort falten, um die Codevektorenergien zu finden (Block 14 und 15). Sobald diese Berechnungen abgeschlossen sind, kann man bei der Codierung von Vektor 3 unmittelbar alle aktualisierten Werte verwenden. (Anmerkung: das die Berechnung von Codevektorenergien relativ aufwendig ist, konnte die Aktualisierung des wahrnehmungsbezogenen Gewichtungsfilters nicht als Teil der Berechnung während der Zeit von Vektor 2 abgeschlossen werden (auch wenn die Verstärkungsprädiktoraktualisierung an eine andere Stelle verlegt wird. Aus diesem Grund wurde sie bis zum Vektor 3 zurückgestellt).

Das adaptive Langzeit-Nachfilter wird auf der Grundlage eines schnellen Tonhöhenentnahmealgorithmus aktualisiert, der als Eingangssignal die Ausgangssprache des Synthesefilters (ST) verwendet. Da das Nachfilter nur im Decodierer verwendet wird, basierte die Ablaufsteuerungszeit zur Durchführung dieser Berechnung auf den anderen Rechenlasten im Decodierer. Der Decodierer muß das wahrnehmungsbezogene Gewichtungsfilter und die Codevektorenergien nicht aktualisieren, so daß der Zeitschlitz von Vektor 3 verfügbar ist. Das Codewort für Vektor 3 wird decodiert und seine Synthesefilterausgangssprache ist zusammen mit allen vorherigen Synthesefilterausgangsvektoren verfügbar. Diese werden in den Adapter eingegeben, der dann die neue Tonhöhenperiode (Block 81 und 82) und den Langzeit-Nachfilterkoeffizienten (Block 83 und 84) erzeugt. Diese neuen Werte werden unmittelbar bei der Berechnung des nachgefiltereten Ausgangssignals für Vektor 3 verwendet.

Das adaptive Kurzzeit-Nachfilter wird als Nebenprodukt der Synthesefilteraktualisierung aktualisiert. Die Durbinsche Rekursion wird bei der Ordnung 10 angehalten und die Prädiktionskoeffizienten werden für die Nachfilterfilteraktualisierung gesichert. Da die Durbin-Berechnung gewöhnlich während Vektor 1 begonnen wird, ist die Nachfilterfilteraktualisierung früh genug für die Nachfilterfilterung des Ausgangsvektors 1 abgeschlossen.

Fig. 1/G.728 Vereinfachtes Blockschaltbild des LD-CELP- Codierers
Fig. 2/G.728 LD-CELP-Codierer-Blockschaltbild
Fig. 3/G.728 LD-CELP-Decodierer-Blockschaltbild
Fig. 4(a)/G.728 Adapter des wahrnehmungsbezogenen Gewichtungsfilters
Fig. 4(b)/G.728 Darstellung eines Hybridfensters
Fig. 5/G.728 Rückwärts-Synthesefilteradapter
Fig. 6/G.728 Rückwärts-Vektorverstärkungsadapter
Fig. 7/G.728 Nachfilter-Blockschaltbild
Fig. 8/G.728 Nachfilteradapter-Blockschaltbild

ANHANG I (zur Empfehlung G.728) VERIFIKATION DER IMPLEMENTIERUNG

Es wurde eine Menge von Verifikationswerkzeugen entworfen, um die Verifikation der Verträglichkeit verschiedener Implementierungen des in der vorliegenden Empfehlung definierten Algorithmus zu erleichtern. Diese Verifikationswerkzeuge sind von der ITU auf einem Satz Distributionsdisketten erhältlich.

VERIFIKATION DER IMPLEMENTIERUNG

Dieser Anhang beschreibt die digitalen Prüfsequenzen und die Meßsoftware zur Verifikation der Implementierung. Diese Verifikationswerkzeuge sind von der ITU auf einem Satz Verifikationsdisketten erhältlich.

1.1 Verifikationsprinzip

Die Spezifikation des LD-CELP-Algorithmus wurde auf eine nicht bit-exakte Weise formuliert, um eine einfache Implementierung auf verschiedenen Arten von Hardware zu ermöglichen. Daraus folgt, daß die Verifikationsprozedur nicht annehmen kann, daß die geprüfte Implementierung genau mit einer Bezugsimplementierung übereinstimmt. Daher werden objektive Messungen benötigt, um den Grad der Abweichung zwischen Prüfung und Bezug festzustellen. Wenn sich diese gemessene Abweichung als klein genug erweist, wird angenommen, daß die Prüfimplementierung zusammen mit jeder anderen Implementierung betreibbar ist, die die Prüfung besteht. Da keine endliche Prüfung jeden Aspekt einer Implementierung prüfen kann, kann niemals 100%ig garantiert werden, daß eine Implementierung korrekt ist. Die beschriebene Prüfprozedur läßt jedoch alle Hauptteile des LD-CELP- Algorithmus arbeiten und sollte ein wertvolles Werkzeug für den Implementierer sein.

Die in diesem Anhang beschriebenen Verifikationsprozeduren wurden im Hinblick auf 32-Bit- Gleitkommaimplementierungen entworfen. Obwohl sie auf jede LD-CELP-Implementierung angewandt werden könnten, ist wahrscheinlich ein 32-Bit-Gleitkommaformat notwendig, um die Prüfanforderungen zu erfüllen. Verifikationsprozeduren, die die Realisierung eines Festkommaalgorithmus gestatten könnten, werden gerade untersucht.

1.2 Prüfkonfigurationen

Dieser Abschnitt beschreibt, wie die verschiedenen Prüfsequenzen und Meßprogramme zusammen verwendet werden sollten, um die Verifikationsprüfungen durchzuführen. Die Prozedur basiert auf einer Blackbox-Prüfung an den Schnittstellen SU und ICHAN des Prüfcodierers und ICHAN und SPF des Prüfdecodierers. Die Signale SU und SPF werden wie im Abschnitt 1.4.2 beschrieben mit 16-Bit-Festkommagenauigkeit dargestellt. Im geprüften Decodierer sollte die Möglichkeit bereitgestellt werden, das adaptive Nachfilter auszuschalten. Die gesamte Prüfsequenzverarbeitung sollte im anfänglichen Rücksetzzustand der Prüfimplementierung gestartet werden, so wie es in der LD-CELP-Empfehlung definiert wird. Drei Meßprogramme CWCOMP, SNR und WSNR sind notwendig, um die Prüfausgabesequenzbewertung durchzuführen. Diese Programme werden im Abschnitt 1.3 weiter beschrieben. Beschreibungen der verschiedenen zu verwendenden Prüfkonfigurationen findet man in den folgenden Unterabschnitten (1.2.1-1.2.4).

1.2.1 Codiererprüfung

Die grundlegende Funktionsweise des Codierers wird mit der in Fig. I-1/G.728 gezeigten Konfiguration geprüft. Eine Eingangssignalprüfsequenz IN wird an den geprüften Codierer angelegt. Die Ausgangscodewörter werden direkt durch Verwendung des Programms CWCOMP mit den Bezugscodewörtern INCW verglichen.

Fig. I-IIG.728 Codierer-Prüfkonfiguration ( 1)

1.2.2 Decodiererprüfung

Die grundlegende Funktionsweise des Decodierers wird mit der in Fig. I-2/G.728 gezeigten Konfiguration geprüft. Eine Codewortprüfsequenz CW wird an den geprüften Decodierer angelegt, wobei das adaptive Nachfilter ausgeschaltet ist. Das Ausgangssignal wird dann mit dem SNR-Programm mit dem Bezugsausgangssignal OUTA verglichen.

Fig. I-21 G.728 Decodierer-Prüfkonfiguration {2)

1.2.3 Prüfung des wahrnehmungsbezogenen Gewichtungsfilters

Das wahrnehmungsbezogene Gewichtungsfilter wird mit der Konfiguration in Fig. I-3/G.728 geprüft. Eine Eingangssignalprüfsequenz IN wird durch den geprüften Codierer geleitet, und die Qualität der Ausgangscodewörter werden mit dem WSNR-Programm gemessen. Das WSNR-Programm benötigt außerdem die Eingangssequenz, um das korrekte Distanzmaß zu berechnen.

Fig. I-31 G.728 Decodierer-Prüfkonfiguration (3)
1.2.4 Nachfilterprüfung

Das adaptive Nachfilter des Decodierers wird mit der Konfiguration in Fig. I-4/G.728 geprüft. Eine Codewortprüfsequenz CW wird an den geprüften Decodierer angelegt, wobei das adaptive Nachfilter eingeschaltet ist. Das Ausgangssignal wird dann mit dem SNR-Programm mit dem Bezugsausgangssignal OUTB verglichen.

Fig. I-41 G.728 Decodierer-Prüfkonfiguration (4)

1.3 Verifikationsprogramme

Dieser Abschnitt beschreibt die im Prüfkonfigurationsabschnitt erwähnten Programme CWCOMP, SNR und WSNR und das Programm LDCDEC, das als ein Debugging-Vjerkzeug für den Implementierer bereitgestellt wird.

Die Verifikationssoftware ist in Fortran geschrieben und folgt so weit wie möglich dem Standard ANSI Fortran 77. Die Double-Precision-Gleitkommaauflösung wird ausgiebig verwendet, um numerische Fehler in den Bezugs-LD-CELP-Modulen möglichst klein zu halten. Die Programme wurden mit einem handelsüblichen Fortran- Compiler gekoppelt, um ausführbare Versionen für PCs auf 386/87-Basis zu erzeugen. Die Datei READ. ME in der Distribution beschreibt, wie auf anderen Computern ausführbare Programme erzeugt werden können.

1.3.1 CWCOMP

Das CWCOMP-Programm ist ein einfaches Werkzeug zum Vergleichen der Inhalte zweier Codewortdateien. Der Benutzer wird aufgefordert, zwei Codewortdateinamen, die Bezugscodiererausgabe (Dateiname in letzter Spalte von Tabelle I-1/G.728) und die Prüfcodiererausgabe, einzugeben. Das Programm vergleicht jedes Codewort in diesen Dateien und schreibt die Verglcihsergebnisse zum Terminal. Die Anforderung für die Prüfkonfiguration 2 besteht darin, daß keine unterschiedlichen Codewörter vorliegen sollten.

1.3.2 SNR

Das Programm SNR implementiert eine Signal/Rausch- Messung zwischen zwei Signaldateien. Die erste ist eine Bezugsdatei, die vom Bezugsdecodiererprogramm bereitgestellt wird, und die zweite ist die Prüfdecodiererausgabedatei. Ein globales SNR GLOB wird als das gesamte Datei-Signal/Rausch-Verhältnis berechnet. Ein Segment-SNR SEG256 wird als das mittlere Signal/Rausch-Verhältnis aller 256-Abtastwerte-Segmente mit der Bezugssignalleistung über einer bestimmten Schwelle berechnet. Minimale SNRs von Segmenten werden für die Segmente der Länge 256, 128, 64, 32, 16, 8 und 4 mit der Leistung über derselben Schwelle bestimmt.

Um das SNR-Programm zu starten, muß der Benutzer die Namen von zwei Eingabedateien eingeben. Die erste ist die Bezugs-Decodiererausgabedatei, die in der letzten Spalte von Tabelle I-3/G.728 beschrieben wird. Die zweite ist die decodierte Ausgabedatei, die von dem geprüften Decodierer erzeugt wird. Nach der Verarbeitung der Dateien gibt das Programm die verschiedenen SNRs zum Terminal aus. Anforderungswerte für die Prüfkonfigurationen 2 und 4 werden in Bezug auf diese SNR-Zahlen angegeben.

1.3.3 WSNR

Der WSNR-Algorithmus basiert auf einer Bezugsdecodierer- und Distanzmaßimplementierung, um die mittlere wahrnehmungsbezogen gewichtete Verzerrung einer Codewortsequenz zu berechnen. Ein logarithmisches Signal/Verzerrungs-Verhältnis wird für jeden 5- Abtastwerte-Signalvektor berechnet, und die Verhältnisse werden über alle Signalvektoren mit Energie über einer bestimmten Schwelle gemittelt.

Um das WSNR-Programm zu starten, muß der Benutzer die Namen von zwei Eingabedateien eingeben. Die erste ist die Codierereingangssignaldatei (erste Spalte in Tabelle I-1/G.728) und die zweite ist die Codiererausgangscodewortdatei. Nach der Verarbeitung der Sequenz schreibt WSNR den Ausgangs-WSNR-Wert zum Terminal. Der Anforderungswert für die Prüfkonfigurationen 3 wird in Bezug auf diese WSNR- Zahlen angegeben.

1.3.4 LDCDEC

Zusätzlich zu den drei Meßprogrammen enthält die Distribution außerdem ein Bezugsdecodierer- Demonstrationsprogramm LDCDEC. Dieses Programm basiert auf derselben Decodierersubroutine wie WSNR und könnte so modifiziert werden, daß es für Debugging-Zwecke Variablen in dem Decodierer überwacht. Der Benutzer wird aufgefordert, die Eingangscodewortdatei und die Ausgangssignaldatei einzugeben, und ob das adaptive Nachfilter einbezogen werden soll oder nicht.

1.4 Prüfsequenzen

Es folgt eine Beschreibung der anzuwendenden Prüfsequenzen. Die Beschreibung enthält die spezifischen Anforderungen für jede Sequenz.

1.4.1 Namenkonventionen

Die Prüfsequenzen werden sequentiell durchnumeriert, wobei ein Präfix die Art des Signal angibt:

IN: Codierereingangssignal

INCW: Codiererausgangscodewörter

CW: Decodierereingangscodewörter

OUTA: Decodiererausgangssignal ohne Nachfilter

OUTB: Decodiererausgangssignal mit Nachfilter

Alle Prüfsequenzdateien haben die Erweiterung *. BIN.

1.4.2 Dateiformate

Die Signaldateien liegen gemäß den LD-CELP- Schnittstellen SU und SPF (Dateipräfix IN, OUTA und OUTB) alle im binären 16-Bit-Zweierkomplementformat vor und sollten mit einem festen binären Komma zwischen Bit Nr. 2 und Nr. 3 interpretiert werden (siehe Fig. I- 5/G.728). Man beachte, daß alle 16 verfügbaren Bit verwendet werden müssen, um maximale Genauigkeit in den Prüfmessungen zu erzielen.

Die Codewortdateien (LD-CELP-Signal ICHAN, Dateipräfix CW oder INCW) werden in demselben binären 16-Bit-Format wie die Signaldateien gespeichert. Die 10 niedrigstwertigen Bit jedes 16-Bit-Worts stellen das 10-Bit-Codewort dar (siehe Fig. I-5/G.728). Die anderen Bit (Nr. 12-Nr. 15) werden auf Null gesetzt.

Sowohl Signal- als auch Codewortdateien werden in dem Niedrig-Byte-Zuerst-Wortspeicherformat gespeichert, das auf IBM/DOS- und VAX/VMS-Computern üblich ist. Bei Verwendung auf anderen Plattformen, wie zum Beispiel UNIX-Maschinen, muß man diese Reihenfolge eventuell durch eine Byte-Austauschoperation ändern.

Signal:
Codewort:

Fig. I-5/G.728 binäres Dateiformat für Signal- und Codewortdatei 1.4.3 Prüfsequenzen und Anforderungen

Die Tabellen in diesem Abschnitt beschreiben die vollständige Menge von Prüfungen, die durchgeführt werden, um zu verifizieren, daß eine Implementierung von LD-CELP der Spezifikation folgt und zusammen mit anderen korrekten Implementierungen betreibbar ist. Tabelle I-1/G.728 ist eine Zusammenfassung der Codiererprüfsequenzen. Die entsprechenden Anforderungen werden in Tabelle I-2/G.728 ausgedrückt. Tabelle I- 3/G.728 und I-4/G.728 enthalten die Zusammenfassung und Anforderungen für die Decodiererprüfsequenz.

TABELLE I-1/G.728 Codiererprüfungen
TABELLE I-2/G.728 Codiererprüfanforderungen
TABELLE I-3/G.728 Deaodiererprüfungen
TABELLE I-4/G.728 Decodiererprüfanforderungen

1.5 Distribution der Verifikationswerkzeuge

Alle Dateien in der Distribution sind auf zwei 3,5"- DOS-Disketten mit 1,44MByte gespeichert.

Diskettenkopien können von der ITU unter der folgenden Adresse bestellt werden:

ITU General Secretariat

Sales Service

Place du Nations

CH-1211 Geneve 20

Switzerland

Diskette Nr 1 enthält eine Datei READ. ME, um den Inhalt jeder Datei und die notwendigen Prozeduren zum Kompilieren und Linken der Programme zu beschreiben. Erweiterungen trennen die verschiedenen Dateitypen.

*. FOR-Dateien sind Quellcode für Fortran-Programme,

*. EXE sind 386/87-ausführbare Dateien und *. BIN sind binäre Prüfsequenzdateien. Der Inhalt jeder Diskette ist in Tabelle I-5/G.728 aufgeführt.

TABELLE I-5/G.728 Distributionsverzeichnis


Anspruch[de]

1. Verfahren zum Erzeugen von Linearprädiktionsfilterkoeffizientensignalen bei Rahmenlöschung, wobei die erzeugten Linearprädiktionskoeffizientensignale zur Verwendung durch ein Linearprädiktionsfilter bei der Synthetisierung eines Sprachsignals dienen, mit den folgenden Schritten:

Speichern (120) von Linearprädiktionskoeffizientensignalen in einem Speicher, wobei die Linearprädiktionskoeffizientensignale als Reaktion auf ein Sprachsignal erzeugt werden, das einem vergangenen, nicht gelöschten Rahmen entspricht;

dadurch gekennzeichnet, daß als Reaktion auf ein Sprachsignal, das einem aktuellen gelöschten Rahmen (1201) entspricht, eines oder mehrere der gespeicherten Linearprädiktionskoeffizientensignale mit einem Skalierungsfaktor BEF hoch einem Exponenten 1, wobei 0,955 ≤ BEF ≤ 0,99 gilt, skaliert werden (1204, 1206) und i die gespeicherten Linearprädiktionskoeffizientensignale indiziert, wobei die gespeicherten Linearprädiktionsfilterkoeffizientensignale auf das Linearprädiktionsfilter zur Verwendung bei der Synthetisierung des Sprachsignals angewandt werden.

2. Verfahren nach Anspruch 1, wobei BEF im wesentlichen gleich 0,97 ist.

3. Verfahren nach Anspruch 1, wobei BEF im wesentlichen gleich 0,98 ist.

4. Verfahren nach Anspruch 1, wobei das Linearprädiktionsfilter ein Linearprädiktionsfilter 50ster Ordnung umfaßt und der Exponent 50 Linearprädiktionskoeffizientensignale indiziert.

5. Verfahren nach Anspruch 1, wobei das Linearprädiktionsfilter ein Filter einer Ordnung von mehr als 20 umfaßt und der Exponent eine Anzahl von Linearprädiktionskoeffizientensignalen indiziert, wobei die Anzahl gleich der Ordnung des Filters ist.

6. Verfahren nach Anspruch 1, wobei der Schritt des Skalierens einmal pro gelöschtem Rahmen durchgeführt wird.







IPC
A Täglicher Lebensbedarf
B Arbeitsverfahren; Transportieren
C Chemie; Hüttenwesen
D Textilien; Papier
E Bauwesen; Erdbohren; Bergbau
F Maschinenbau; Beleuchtung; Heizung; Waffen; Sprengen
G Physik
H Elektrotechnik

Anmelder
Datum

Patentrecherche

Patent Zeichnungen (PDF)

Copyright © 2008 Patent-De Alle Rechte vorbehalten. eMail: info@patent-de.com