-
Die
Erfindung betrifft die Kanalcodierung und die dazugehörige Decodierung
von Signalen, auf eindimensionale Signale (z.B. Zeitsignale) genauso
bezogen wie auf zweidimensionale Signale (z.B. Bilder) sowie entsprechende
Codiereinrichtungen.
-
Sehr
beliebt und verbreitet sind Reed-Solomon-(RS)-Codes. Die Decodierung
von RS-Codes ist rein algebraisch und für den Ingenieur sehr schwer verständlich und
unanschaulich; es gibt keine fertigen Rezepte für die Integration von Soft-Decision-Methoden.
Will man anwendungsspezifische Optimierungen eines Gesamtsystems
realisieren, so muss man die bekannte (algebraische) Codierung und
Decodierung als fertige Blackbox im Gesamtsystem einsetzen; eine
Systemoptimierung kann dann nur um diese Box herum realisiert werden,
echt verzahnte Modifikationen, die z.B. im Zusammenhang mit der
verwendeten Modulationsmethode stehen, und die anwendungsspezifische
Integration von Soft-Decision-Methoden
sind in der Praxis kaum möglich.
-
In
neuerer Zeit wurden die sog. Turbo Codes eingeführt und erfolgreich eingesetzt.
Bei Turbo Codes werden zwei verkettete Faltungscodes, getrennt durch
Interleaving, iterativ mittels Soft-in-Soft-out-Viterbi-Decodierung
decodiert. Turbo Codes können
in bestimmten Fällen
erstaunlich stark gestörte
Signale decodieren, haben jedoch auch Nachteile: Die iterative Arbeitsweise
führt zu
nicht vorhersagbarer Rechenzeit; Turbo Codes erfordern Faltungscodes
mit unendlicher Impulsantwort (IIR = infinite impulse response).
Solche Codes bergen die Gefahr der katastrophalen Fehlerfortpflanzung.
Gute Faltungscodes können
nur computergestützt
entworfen werden; es gibt keine systematischen Entwurfsmethoden
für "gute" Faltungscodes (ja
selbst die Definition eines Gütekriteriums
ist schwierig). Die Wirkungsweise von Turbo Codes ist sehr schwierig
zu durchschauen, daher ges talten sich der Entwurf und die Optimierung sehr
schwierig.
-
Der
Stand der Technik fehlerkorrigierender Codierung ist beschrieben
in R.H. Morelos-Zaragoza, „The
Art of Error Correcting Coding",
Wiley 2002.
-
Allgemeine
Aufgabe der Erfindung ist es, eine robuste, technisch einfach realisierbare
Codierung mit zugehörigen
Einrichtungen zur Verfügung
zu stellen, deren Wirkungsweise in ihren Einzelschritten transparent
ist, so dass für
die Optimierung eines Gesamtsystems an verschiedenen Stellen anwendungsspezifische
Modifikationen möglich
sind.
-
Vorbemerkung
zu hier verwendeten Begriffen:
Ein Bild wird als zweidimensionales
Signal bezeichnet, ein Zeitsignal als eindimensionales Signal. Bei eindimensionalen
Signalen, bei denen die Signalwerte nach mehreren Dimensionen gleichzeitig
moduliert sind (z.B. nach Amplitude und Phase gleichzeitig oder
bei Quadratur-Amplituden-Modulation), wird hier zur Unterscheidung
von mehreren Merkmalsdimensionen gesprochen (obwohl diese Signale
in der Codierungsliteratur einfach "mehrdimensionale Signale" genannt werden).
Ein Farbbildsignal wird dementsprechend als zweidimensionales Signal
angesprochen, das beispielsweise in den drei unabhängigen Merkmalsdimensionen
Farbwinkel, Sättigung und
Intensität
moduliert ist.
-
Ein
Bild kann zu einem eindimensionalen Signal vorverarbeitet sein,
z.B. durch die Abtastung eines Barcodes (1-D-Code).
-
Ein
Matrixcode ist eine zweidimensionale Anordnung von Zellen, wie z.B.
bei dem verbreiteten ECC-200-Standard.
-
Zellen
sind bei Bildsignalen kleine Bildbereiche von wenigen Punkten, beispielsweise
die (ggf. vorsegmentierten) Zellen eines zweidimensional gedruckten
Matrixcodes oder der Bildinhalt von kleinen, das Gesamtbild gleichmäßig aufrasternden
Parzellen. Die Zellen können
auch nur aus einem Pixel bestehen, dann ist der Begriff Zelle mit
dem Begriff Pixel identisch.
-
Entsprechendes
gilt für
Zeitsignale, wo die Zellen durch kurze Signalabschnitte und die
Pixel durch einzelne Signalwerte repräsentiert sind.
-
Zellwerte:
Interne Muster einer Zelle (Pixelmuster) werden durch Zellwerte
reprä sentiert.
Beispielsweise kann bei einem Matrixcode eine logisch-0-Zelle (Zellwert
0) durch einen senkrechten Balken und eine logisch-1-Zelle (Zellwert
1) durch einen waagrechten Balken realisiert sein, das Flächenmass
eines ansonsten nicht weiter spezifizierten Fleckens (Dot), oder
aber einfach durch dunkle bzw. helle Pixel, verschiedene Farben
etc. Fälle
mit mehr als 2 möglichen
Zellwerten sind z.B. 1 für
rot, 2 für
grün, 3
für blau.
-
Durch
Zwischenwerte kann zum Ausdruck gebracht werden, wie gut die Zellen
idealen Pixelmustern entsprechen.
-
Die
Zellwerte entsprechen den Symbolen eines konventionellen Codes.
Da hier im Gegensatz zu konventionellen Codes auch mit Zwischenwerten
gearbeitet wird, wird hier dieser Begriff verwendet.
-
Bei
mehreren Merkmalsdimensionen können die
Zellwerte dimensionsweise existieren, die Zellwerte können jedoch
auch mehrere Dimensionen zusammenfassend repräsentieren.
-
Die
Aufgabe der Erfindung wird gemäß den unabhängigen Ansprüchen gelöst. Vorteilhafte
Weiterbildungen sind in den abhängigen
Ansprüchen
definiert.
-
Gegeben
sei ein zweidimensionales Bildsignal mit 10 × 3 Zellen. Die 30 Zellen sollen
redundant für
eine Codierung der 10 Informationsbits verwendet werden. Die Zellen
bestehen im Beispiel aus einzelnen binären Pixeln, mögliche Zellwerte
sind zunächst 0
oder 1.
-
Die
Anordnung der Zellen muss nicht unbedingt der endgültigen Anordnung
entsprechen; die für die
Datenübertragung
oder Datenspeicherung (z.B. Beschriftung mit einem Dotcode) verwendete
Anordnung wird in der Regel von der hier besprochenen Anordnung
abweichen, weil am Ende noch eine gestreute Platzierung, ähnlich Interleaving,
durchgeführt
wird (s.u.).
-
Auch
bei Zeitsignalen ist es hilfreich, die Zellen hilfsweise gedanklich
in einem zweidimensionalen Raster anzuordnen (Hilfsanordnungen in
höheren Dimensionen
sind möglich,
haben sich bei den vom Anmelder bearbeiteten Beispielen nicht als
nützlich erwiesen).
Die im Folgenden zugrunde gelegte Anordnung ist also lediglich hilfreich
für die
folgenden Betrachtungen und wird in der Regel nachträglich verändert, insbesondere
durch eine gestreute Platzierung.
-
Codierung:
-
Als
Initialisierung wird allen Zellen des zu erstellenden Codes der
gleiche Grundwert, z.B. 0, zugewiesen.
-
Wir
definieren eine Menge M1 von Zellen, die in unserem Beispiel speziell
alle Zellen umfasst, in 1 mit "i" bezeichnet.
Die Zellen in M1 werden nun alle invertiert, wenn das erste Informationsbit
1 ist; falls es 0 ist, werden sie alle nicht invertiert. Mit anderen
Worten: die Zellen in M1 werden XOR-verknüpft mit dem ersten Informationsbit
(geht man vom Grundwert 0 aus, entspricht dies einer Kopie des ersten
Informationsbits auf die Zellen von M1). Solcherart behandelte Zellen
von Zellmengen werden im Folgenden Inversionszellen genannt und
in den 1 bis 10 mit "i" dargestellt.
Nichtinversionszellen bleiben dagegen unabhängig vom Wert des Informationsbits
unverändert,
in den 1 bis 10 mit "n" dargestellt.
-
Dieser
erste Schritt bei diesem Beispiel entspricht nicht exakt dem Anspruch
1; die folgenden Schritte entsprechen jedoch dem Anspruch 1:
Es
gibt für
jede Teilinformation – und
damit für
jeden Codierschritt eine Menge von Zelltupeln, kurz Zelltupelmengen.
Ein Zelltupel besteht aus mindestens einer Inversionszelle und mindestens
einer Nichtinversionszelle.
-
Da
es insgesamt 10 Informationsbits zu codieren gilt, definieren wir
noch insgesamt 10 – 1
= 9 Zelltupelmengen.
-
In
unserem Beispiel besteht jedes Zelltupel aus genau einer Inversionszelle
und einer Nichtinversionszelle. Zelltupel werden in den Figuren
als Doppelpfeile zwischen je einer Inversionszelle und einer Nichtinversionszelle
angedeutet.
-
In 2 umfasst
die Zelltupelmenge M2 6 Inversionszellen und 6 Nichtinversionszellen;
einige Zelltupel 1 sind durch Doppelpfeile angedeutet.
Es muss hier kein besonderes geometrisches System bei der Wahl der
Verteilung von Inversions- und Nichtinversionszellen und bei der
Wahl der Zelltupel verwendet werden, wie durch die Pfeile angedeutet. Es
sind auch durchaus grundsätzlich Überlappungen erlaubt,
d.h. eine Zelle kann mehreren Zelltupeln angehören.
-
Die
Inversionszellen von M2 werden mit dem zweiten Informationsbit XOR-verknüpft. D.h.
falls sie aufgrund des ersten Informationsbits bereits invertiert
wurden und nun aufgrund des zweiten Informationsbits invertiert
werden, nehmen sie wieder den ursprünglichen Grundwert an.
-
Wir
kommen nun zum dritten Informationsbit und zur Zelltupelmenge M3,
siehe 3. Die Menge M3 umfasst in unserem Beispiel genau
die gleichen Zellen wie M2.
-
Bei
der Wahl der Inversionszellen und Nichtinversionszellen braucht
wiederum kein besonderes System Verwendung zu finden. Jedoch muss bei
der Definition der Zellpaare ab M3 eine zusätzliche Vorschrift beachtet
werden (die für
M1 und M2 ohnehin erfüllt
ist):
Die Zellen eines Zelltupels müssen bei XOR-Operationen vorangehender
Informationsbits alle gleich behandelt worden sein, unabhängig vom
aktuellen Wert der vorangehenden Informationsbits. Dies ist erfüllt, wenn
sie für
jeden vorangehenden Codierschritt jeweils entweder alle Inversionszellen
oder alle Nichtinversionszellen sind.
-
Ein
in diesem Sinne illegales Zelltupel ist in 3 unter
der Nr. 2 angegeben. Es ist deshalb illegal, weil seine
Nichtinversionszelle abhängig
vom zweiten Informationsbit invertiert wurde, seine Inversionszelle
hingegen nicht.
-
Diese
Vorschrift brauchte für
die vorangehende Menge M2 nicht beachtet zu werden, weil in dem
Beispiel ihre Zellen ohnehin immer erfüllt war (alle Zellen von M2
sind in M1 Inversionszellen).
-
Im
nächsten
Schritt mit Informationsbit 4 und Zelltupelmenge M4, siehe 4,
haben wir bei der speziellen Wahl von M4 wieder freie Wahl der Zellpaare,
so wie vorher in M2.
-
Im
nächsten
Schritt mit Informationsbit 5 und Zelltupelmenge M5, siehe 5,
haben wir bei der speziellen Wahl von M5 wieder die gleiche Situation wie
bei Informationsbit 3 und Zelltupelmenge M3.
-
Im
nächsten
Schritt mit Informationsbit 6 und Zelltupelmenge M6, siehe 6,
haben wir bei der speziellen Wahl von M6 wieder die gleiche Situation wie
bei Informationsbit 2 und Zelltupelmenge M2.
-
Wir
kommen nun zu den Informationsbits 7 bis 10, mit den Zelltupelmengen
M7 bis M10, siehe 7 bis 10. Aufgrund
der speziellen Mengenwahl und Wahl der Inversions/Nichtinversionsbit-Konstellationen
ist die erstmalig für
M3 formulierte Forderung immer dann erfüllt, wenn die Zellen eines Zellpaares übereinander
stehen.
-
Die
teilinformationsspezifische Aufteilung in Zelltupelmengen, Aufteilung
in Zelltupel und Zuweisung der Inversions- und Nichtinversionszellen
eines Zelltupels wird im Folgenden Konfiguration genannt und geschieht
nur einmal vorab, manuell oder mit Rechenprogramm.
-
Die
Codierung besteht einfach in der Anwendung der XOR-Operationen auf
die Inversionszellen entsprechend der gegebenen Konfiguration, teilinformationsweise,
wobei die Reihenfolge, in der die Teilinformationen den Mengen zugeordnet
werden, grundsätzlich
gleichgültig
ist.
-
Die
Mindestdistanz dieses Codebeispiels ist offensichtlich 5, da
- a) sich mit jedem Informationsbit mindestens
5 Bits verändern
- b) bei Überkreuzungen
von Inversionszellmengen (Rücksetzen
des betreffenden Bits) mindestens zwei Informationsbits beteiligt
sind, die selbst mehrere weitere Zellen invertieren.
-
Durch
die Hinzunahme eines Paritybits auf die Informationsbits kann die
Mindestdistanz generell gesteigert werden.
-
Platzierung:
-
Da
geometrisch gesehen der Platz, wo die Zellen eines Zellpaars sitzen,
keine Rolle spielt, sondern nur die Zuordnung zu den Mengen, haben
wir noch die Freiheit, die Zellen beliebig zu platzieren.
-
Wir
führen
nun noch eine gestreute Platzierung durch.
-
Eine
erfindungsgemäße Erweiterung
besteht darin, vorzugsweise nach Abschluss der Codierung die Daten
mit einem Raster XOR- zu verknüpfen,
z.B. mit einem Schachbrett oder im Eindimensionalen mit einer 010101...
Folge, oder auch einer Zufallsfolge. Dies wird im folgenden Gitteroperation
genannt. Dadurch kann eine gewisse Strukturierung der Daten erreicht
werden, dergestalt, dass unabhängig
von der codierten Information, (lokal) immer eine gewisse Mindestanzahl
von Zellen mit logisch 1 und eine Mindestanzahl mit logisch 0 belegt
ist (bei dem oben aufgeführten
Beispiel wird – auch
nach gestreuter Platzierung – durch
Verwenden eines einfachen Schachbrett-Gitters erreicht, dass sich
in dem 3 × 10-Feld immer
mindestens 7 logisch 1-Zellen und mindestens 7 logisch 0-Zellen
befinden). Der Code erhält
dadurch eine gewisse Musterung. Diese Eigenschaft kann vorteilhaft
für die
Demodulation verwendet werden, insbesondere auch für die Synchronisation,
mit einer Rückwirkung
von der Decodierung auf die Demodulation. Primitivstes Beispiel
wäre das
Durchfahren einer Binarisierungsschwelle, bis die Mindestanzahlen
erfüllt
sind. Auch für
ein Rückweisungskriterium
ist diese Eigenschaft nützlich;
primitives Beispiel: ein ganz schwarzes Bild wird so ohne zusätzliche Sonderabfragen
automatisch zurückgewiesen.
Vor der eigentlichen Decodierung wird eine Gitter-Operation durchgeführt, um
sie wieder rückgängig zu
machen.
-
Alternativ
oder auch ergänzend
kann man natürlich
auch ein festes Synchronisations- oder Referenzierungsmuster einführen, beispielsweise
eine Folge von alternierenden Symbolen wie 0101010... oder 012012012012...
etc.
-
Ein
wichtiges Thema ist die optimale Gestaltung der Konfiguration.
-
Zwei
systematische Ansätze
zur Konfiguration, die beide aus dem Beispiel 1...10 ansatzweise
erkennbar sind, sind miteinander kombinierbar:
- 1)
Man zerlege sukzessive in kleine Bereiche unterschiedlicher (X-)Koordinaten,
denen Inversions- und Nichtinversionszellen zugeordnet sind, wie
dies aus 2...6 erkennbar
ist.
- 2) Aus unserem Beispiel 1 bis 10 ist
ersichtlich, dass eine dimensionsweise Organisation der Zellen hilfreich
sein kann: die Mengen M1 bis M6 sind vertikal orientiert, d.h. vertikal
untereinander stehende Zellen sind alle gleichartig, während die
Mengen M7 bis M10 horizontal orientiert sind. Auch Hilfsanordnungen mit
mehr als 2 Dimensionen sind grundsätzlich möglich.
-
11 zeigt
eine Hardwarerealisierung zu einem einfachen Beispiel. 11 ist
ein Schema, Details wie z.B. Steuersignale sind weggelassen. Die Codierung
ist oben dargestellt, die Decodierung unten.
-
Codierung:
-
Wir
gehen wiederum zunächst
von binären Zellen
aus. Es ist ein Signal mit 3 Teilinformationen zu je ein Bit zu
codieren, I0, I1, I2. Insgesamt stehen 4 Bit für die Codierung zur Verfügung. Die
Codierstrecke ist eine Pipeline, bestehend aus drei Registern 11 mit
je 4 binären
Zellen 10.
-
Die
Zellen werden für
die folgende Beschreibung für
jedes Register von links nach rechts von 1 bis 4 durchnummeriert,
ebenso von links nach rechts; diese Nummern sind in 11 der Übersichtlichkeit halber
nicht eingezeichnet. Von Codierschritt zu Codierschritt werden die
Zellen, von links nach rechts, von Register zu Register übertragen
(Zell-parallel mit 4 Schieberegistern der Länge 3 oder Zell-seriell mit einem
Schieberegister der Länge
12). Im ersten Schritt wird das Informationsbit I0 in das erste
Register übertragen
(formell kann man das der Systematik halber als XOR-Verknüpfung mit
einem Grundwert logisch "0" betrachten. Realisiert
man diese XOR-Verknüpfungen
tatsächlich,
so kann genauso gut der logische Grundwert "1" verwendet
werden).
-
Im
zweiten Codierschritt wird das Informationsbit I1 XOR-verknüpft mit
dem Inhalt der ersten beiden Zellen des zweiten Registers, das Ergebnis wird
in die betreffenden Zellen zurückgeschrieben. Im
dritten Codierschritt wird das Informationsbit I2 XOR-verknüpft mit
dem Inhalt der ersten und dritten Zelle des dritten Registers, das
Ergebnis wird in die betreffenden Zellen zurückgeschrieben.
-
Parallel
mit der Bearbeitung von I1 im zweiten Register kann die Bearbeitung
des nächsten I0-Wertes
im ersten Register erfolgen, etc. (Pipeline).
-
Der
erzeugte Code ist wie folgt (c1...c4 entspricht den Zellnummern
1...4 der Register):
-
Ersichtlich
kommt "1" nur in geradzahliger Anzahl
vor, die Mindestdistanz ist daher 2.
-
Decodierung:
-
Zur
Decodierung werden Register in umgekehrter Reihenfolge bearbeitet.
Im ersten Decodierschritt wird das Informationsbit I2 gewonnen durch XOR-Verknüpfung des
Inhalts der ersten und zweiten Zelle des dritten Registers und durch
XOR-Verknüpfung
des Inhalts der dritten und vierten Zelle des dritten Registers.
Sind die Vergleichsergebnisse beide 1, so wird auf I2 = 1 decodiert,
sind sie beide 0, so wird auf I2 = 0 decodiert.
-
Vorteilhaft
wird mit Fuzzy-Zellwerten gearbeitet und für diese Entscheidung werden
beide Vergleichsergebnisse miteinander betrachtet durch einfache
Summation der Fuzzy-XOR-Werte, gefolgt durch eine Schwellwertentscheidung,
wie im ersten Beispiel beschrieben. Solche Summations- und Schwellwertglieder
sind in 11 mit Nr. 14 gekennzeichnet.
-
Abhängig von
I2 werden die erste und die dritte Zelle des dritten Registers invertiert,
indem I2 mit den betreffenden Zellwerten (Fuzzy-)XOR-verknüpft wird
und das Ergebnis in die Zellen zurückgeschrieben wird.
-
Entsprechend
wird mit den weiteren Registern verfahren:
Im zweiten Decodierschritt
wird der Inhalt der ersten und dritten Zelle des zweiten Registers (Fuzzy-)XOR-verknüpft, ebenso
der Inhalt der zweiten und vierten Zelle des zweiten Registers,
und I1 wird vorzugsweise durch Summation der Fuzzy-XOR-Werte, gefolgt
durch eine Schwellwertentscheidung gewonnen. Abhängig von I1 werden die erste
und die zweite Zelle des zweiten Registers invertiert, indem I1
mit den betreffenden Zellwerten (Fuzzy-)XOR-verknüpft wird
und das Ergebnis in die Zellen zurück geschrieben wird.
-
Im
dritten Decodierschritt wird das Informationsbit I0 durch (Fuzzy-)XOR-Verknüpfung des
Inhalts der vier Zellen mit dem Grundwert verknüpft. I0 wird vorzugsweise durch
Summation der Fuzzy-XOR-Werte, gefolgt durch eine Schwellwertentscheidung,
gewonnen.
-
Wenn
ein Fehlersignal ("Fehlerbild", s.o.) gewonnen
werden soll, werden hier abhängig
von I0 die vier Zellen des ersten Registers invertiert, indem I0 mit
den betreffenden Zellwerten (Fuzzy-)XOR-verknüpft wird und das Ergebnis in
die Zellen zurückgeschrieben
wird. Dieser Rückführzweig
ist im letzten Schritt für
die Decodierung selbst nicht notwendig.
-
Im
Beispiel 11 haben wir die folgende Konfiguration:
Für Teilinformation
I1 besteht die Zelltupelmenge aus den Zelltupeln A1 mit Inversionszelle
1 und Nichtinversionszelle 3, und Zelltupel A2 mit Inversionszelle 2
und Nichtinversionszelle 4. Für
Teilinformation I2 besteht die Zelltupelmenge aus den Zelltupeln
B1 mit Inversionszelle 1 und Nichtinversionszelle 2, und Zelltupel
B2 mit Inversionszelle 3 und Nichtinversionszelle 4.
-
I0
ist ein Sonderfall und besteht nur aus Inversionszellen: hier wird
nach 11 die Entscheidung nicht auf Basis eines Zellvergleichs
gefällt.
Dem kann in einfacher Weise abgeholfen werden durch eine differentielle
Codierung von (vorzugsweise aufeinanderfolgenden) I0-Werten: beim
Codieren werden die I0-Werte durch XOR-Verknüpfung aufeinander folgender
I0-Werte ersetzt.