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