-
Die
vorliegende Erfindung betrifft Daten-Komprimierungs- und Dekomprimierungs-Techniken
und spezieller ein Verfahren zur Komprimierung und/oder Dekomprimierung
von Daten unter Verwendung einer Primzahlreihe.
-
Für die Übertragung
und die Speicherung von Daten wird eine erhöhte Bandbreite benötigt. Die vermehrte
Verwendung von Daten in Echtzeit erfordert jedoch maximale Transferraten
mit minimalen Datenverlusten, die durch Verarbeitungsfehler bedingt
sind. Diese Forderung führt
vermehrt zu Anwendungen, die eine Datenkomprimierung verwenden.
-
Obwohl
viele Fortschritte bei der Verarbeitungsgeschwindigkeit und bei
den Datenkomprimierungstechniken gemacht wurden, haben die Verbesserungen
bei der Verarbeitungsgeschwindigkeit die Verbesserungen in Verbindung
mit der Datenkomprimierung weit abgehängt. Zusätzlich hat die begrenzte zur
Datenübertragung
in modernen Kommunikationssystemen zur Verfügung stehende Bandbreite ein kontinuierlich
wachsendes Interesse an effektiven Datenkomprimierungstechniken
geschaffen.
-
Zur
Zeit gibt es zwei grundsätzliche
Kategorien der Datenkomprimierung, nämlich verlustfreie und verlustbehaftete.
Verlustfreie Datenkomprimierungstechniken sind konzipiert, um Datenredundanz ohne
irgendeinen Datenverlust zu beseitigen. Im Gegensatz dazu entfernen
verlustbehaftete Komprimierungstechniken sowohl redundante Daten
als auch als unwesentlich eingestufte Daten anhand von speziell
für die
Datenanwendung vorbestimmten Kriterien.
-
Obwohl
verlustlose Komprimierungstechniken zunehmend effizienter wurden,
ist der mögliche Umfang
der verlustfreien Komprimierung bei vielen Anwendungen limitiert.
Bei Bildkomprimierung wird typischerweise eine maximale Komprimierungsrate von
2 : 1 oder weniger realisiert. Verlustbehaftete Datenkomprimierungstechniken
ermöglichen
wesentlich größere Komprimierungsraten
bei Anwendungen, die eine Echtzeit-Serienwiedergabe von analogen
Signalen (wie Sprache oder Musik) und von Datenfeldern, die zwei-dimensionale
Bilder wiedergeben (Standbild oder Video), verwenden, wobei ein Teil
der Daten vernichtet werden kann ohne bemerkbare Fehler bei der
Rekonstruktion. Weitergehende Komprimierungserfolge können durch
Variieren der Toleranzgrenze in Bezug auf in der Rekonstruktionsphase
bemerkbare Fehler erreicht werden, abhängig von der einzelnen Anwendung.
-
Ein
gemeinsames Merkmal von verlustfreien und verlustbehafteten Komprimierungstechniken
ist die durch die verfügbare
Bandbreite gesetzte Begrenzung. Bei den meisten Anwendungen, bei
denen die Daten vor dem Übertragen
komprimiert werden, ist die Übertragungszeit,
die im allgemeinen eine Funktion der Bandbreite ist, der entscheidende
Faktor. Sobald die Daten empfangen sind, ist die Dekomprimierung
typischerweise eine einfache Aufgabe aufgrund der hohen Geschwindigkeit
der gängigen Prozessoreinheiten,
welche die Inverse der Datenkomprimierungsroutine ausführen. Konsequenterweise
wird viel Zeit auf das Übertragen
und Empfangen von Daten über
begrenzte Bandbreiten verwendet. Deshalb wäre ein System zum Komprimieren und
Dekomprimieren von Daten wünschenswert,
das minimale Bandbreite verwendet unter Maximierung der Verwendung
von Prozessorgeschwindigkeit.
-
US-A-4,588,985
offenbart eine Polynomzerlegungstechnik, die eine relativ kleine
Anzahl an Zerlegefunktionen benötigt,
um Daten einer bestimmten Domäne
A einem bestimmten Bereich B zuzuordnen, wobei die Wahrscheinlichkeit,
dass zwei verschiedene Datenpunkte in A demselben Punkt in B zugeordnet
werden, minimiert wird. Das zu zerlegende Element x wird in Teilketten
x1 ... xn zerlegt,
jede k oder weniger Bits lang, wobei k die größte ganzzahlige Zahl ist, die
kleiner oder gleich log2(b) ist, und b die Größe des Bereichs
B ist und eine Primzahl sein kann oder nicht.
-
Demgemäss ist es
ein grundlegendes Ziel der Erfindung, die in den beigefügten Ansprüchen dargelegt
ist, ein Verfahren zur Datenkomprimierung bereitzustellen, das die
benötigte
Bandbreite minimiert, während
es umfassend die modernen Verarbeitungsressourcen verwendet.
-
Es
ist ein anderes Ziel der Erfindung, ein Verfahren zur Datenkomprimierung
bereitzustellen, das die Bandbreite minimiert, während es die Verwendung von
Prozessorgeschwindigkeit maximiert.
-
Es
ist ein weiteres Ziel der Erfindung, eine Vorrichtung zur Übertragung
von komprimierten Daten bereitzustellen.
-
Es
ist noch ein weiteres Ziel der Erfindung, ein Verfahren zur Übertragung
von komprimierten Daten in Echtzeit bereitzustellen.
-
Gemäß einem
Ziel der Erfindung umfasst ein computerimplementiertes Verfahren
zur Komprimierung von digitalen Daten für eine Übertragung und/oder für eine Speicherung
folgende Schritte:
Auswahl mindestens eines Komprimierungsparameters
einschließlich
eines Primzahlparameters entsprechend einer vorbestimm ten Anzahl
von Primzahlfaktoren, die beim Codieren jedes Datenwertes während der
Komprimierung und Dekomprimierung der Daten in einen komprimierten
Datenblock basierend auf mindestens einem Komprimierungsparameter
zu verwenden sind. Die Komprimierung des Datenstroms verwendet Primzahlreihen
und deren Exponenten, um verlustfreie Datenkomprimierung mit einer
hohen Komprimierungsrate zu bieten.
-
Gemäß einem
bevorzugten Merkmal der Erfindung wird ein Header erzeugt, der die
Komprimierungsparameter enthält,
der Header wird an einen Komprimierungspuffer übertragen und der Datenstrom
wird an den Komprimierungspuffer übertragen. Gemäß einem
weiteren bevorzugten Merkmal wird der Header an den komprimierten
Datenblock angefügt.
-
Der
resultierende komprimierte Datenblock und der Header enthalten Initialisierungsparameter, die
zur Rekonstruktion des Datenstroms ausreichend sind. Demzufolge
wird die zur Datenübertragung
benötigte
Bandbreite minimiert, während
die Rechenanforderungen erhöht
werden.
-
Falls
die zu komprimierenden Daten nicht in dem Komprimierungspuffer gespeichert
werden können,
umfasst ein weiteres bevorzugtes Merkmal eine Segmentierung des
Datenstroms vor dem Schritt des Übertragens
in einen oder mehrere Datenblöcke
gemäß den Komprimierungsparametern
und ein Zusammensetzen des einen oder der mehreren komprimierten
Datenblöcke
nachfolgend auf den Komprimierungsschritt in einen komprimierten
Datenstrom.
-
Gemäß einem
anderen Ziel der Erfindung umfasst ein Verfahren zur Dekomprimierung
komprimierter digitaler Daten die Schritte: Abfragen mindestens
eines Komprimierungsparameters aus einem mit den komprimierten Daten
verknüpften
Header ein schließlich
eines Primzahlparameters, der sich auf eine vorbestimmte Anzahl
an Primzahlfaktoren bezieht, die beim Codieren von Daten während der Komprimierung
der Daten und der Dekomprimierung der Daten in einen dekomprimierten
Datenblock entsprechend mindestens einem Komprimierungsparameter
zu verwenden sind. Entsprechend einem bevorzugten Merkmal umfasst
das Verfahren weiterhin ein Übertragen
des komprimierten Datenblocks in einen Auswertepuffer. Das Abfragen
von während
der Datenkomprimierungsphase generierter Komprimierungsparameter
erlaubt eine verlustfreie Rekonstruktion der Originaldaten ohne
große
Anforderungen an die Bandbreite während der Übertragung. Falls die Daten
in der Form eines komprimierten Datenstroms sind, der vor der Komprimierung
segmentiert wurde, kann das Verfahren weiterhin eine Segmentierung der
komprimierten Daten in einen oder mehrere komprimierte Datenblöcke gemäß den von
dem Header angefragten Komprimierungsparametern umfassen und ein
Zusammensetzen eines oder mehrerer komprimierter, aus dem Schritt
der Dekomprimierung resultierender Datenblöcke in einen Datenstrom.
-
Gemäß einem
anderen Ziel der Erfindung wird eine Vorrichtung zur Übertragung
komprimierter Daten bereitgestellt, die umfasst:
einen Codierer
zum Empfang eines zu übertragenden
Datenstroms, wobei der Codierer konfiguriert ist zum:
Konstruieren
eines Headers, der einen Komprimierungsparameter umfasst einschließlich eines
Primzahlparameters, der einer vorbestimmten Anzahl von Primfaktoren
entspricht, die beim Codieren jedes Datenwerts während einer Komprimierung zu
verwenden sind, eines Limitparameters, der einem vorbestimmten Exponentenwert
entspricht und einem Größenparameter,
der dem größten Satz
von Bytes entspricht, die während
eines Zyklus zu komprimieren sind,
Segmentieren des Datenstroms
in einen oder mehrere Datenblöcke
vorbestimmter hänge
gemäß dem Größenparameter
nach Feststellung, dass die Größe des Datenstroms
den Größenparameter übersteigt,
Komprimieren
des einen oder der mehreren Datenblöcke gemäß den Komprimierungsparametern,
um einen oder mehrere komprimierte Datenblöcke zu bilden,
Generieren
eines Exponentialparameters für
jeden der einen oder der mehreren komprimierten Datenblöcke,
Zusammensetzen
des einen oder der mehreren komprimierten Datenblöcke in einen
komprimierten Datenstrom;
eine Datenübertragungseinrichtung zum Übertragen des
Headers und des komprimierten Datenstroms;
eine Datenempfangseinrichtung
zum Empfang des Headers und des komprimierten Datenstroms von der
Datenübertragungseinrichtung;
und
einen Decoder zum Auslesen des Headers und des komprimierten
Datenstroms aus der Empfangseinrichtung, wobei der Decoder konfiguriert
ist zum:
Auslesen der Kompressionsparameter aus dem Header,
Segmentieren
des komprimierten Datenstroms in einen oder mehrere komprimierte
Datenblöcke
gemäß den empfangenen
Komprimierungsparametern,
Dekomprimieren des einen oder der
mehreren komprimierten Datenblöcke,
um einen oder mehrere dekomprimierte Datenblöcke zu erhalten, und
Wiederzusammensetzen
des einen oder der mehreren dekomprimierten Datenblöcke in den
vom Codierer empfangenen Datenstrom.
-
Die
vorliegende Erfindung umfasst auch eine Kommunikationsvorrichtung,
die im beiliegenden Anspruch 14 dargelegt ist.
-
Die
vorliegende Kommunikationsvorrichtung stellt eine verlässliche
verlustfreie Datenkomprimierung bereit, minimiert die Bandbreite
und nützt
den Vorteil der gängigen
Verarbeitungseinheiten aus. Die Vorrichtung kann bei einer Vielzahl
von Kommunikationsnetzwerken eingesetzt werden einschließlich leitungsvermittelnden
Netzen, Paketvermittlungsnetzen, drahtgebundenen Netzen und drahtlosen
Netzen. Weiterhin kann die Vorrichtung in Echtzeit unter Verwendung
von Halbleiterbauelementen verwendet werden, um die Komprimierungs-
und Dekomprimierungsalgorithmen zu implementieren.
-
Für ein umfassenderes
Verständnis
der vorliegenden Erfindung und ihrer Vorteile wird nun auf die folgende
Beschreibung Bezug genommen in Verbindung mit den beiliegenden Zeichnungen,
in denen gleiche Nummern gleiche Teile bezeichnen und von denen:
-
1 ein Blockdiagramm ist,
das ein Computersystem zeigt, das zur Implementierung der vorliegenden
Erfindung verwendet werden kann.
-
2A bis 2E Flussdiagramme sind, die den detaillierten
Computerprozess zum Komprimieren von Daten gemäß der vorliegenden Erfindung
zeigen.
-
3A bis 3B Flussdiagramme sind, die den detaillierten
Computerprozess zum Dekomprimieren von Daten gemäß der vorliegenden Erfindung
zeigen.
-
4 ein Blockdiagramm ist,
das die Ergebnisse der verschiedenen Schritte während der Komprimierung und
Dekomprimierung von Daten gemäß der vorliegenden
Erfindung zeigt.
-
5 ein Blockdiagramm ist,
das eine Vorrichtung zum Übertragen
von komprimierten Daten gemäß der vorliegenden
Erfindung zeigt.
-
Die
vorliegende Erfindung wird nun mit einem veranschaulichendem Beispiel
der Komprimierung und Dekomprimierung eines Datenstroms beschrieben.
Zuerst wird eine Beschreibung einer allgemeinen Computer-Hardware
angegeben, die fähig ist,
die Erfindung zu implementieren, gefolgt von der allgemeinen Prozedur
zum Komprimieren und Dekomprimieren von Daten. Es wird jedoch offensichtlich
werden, dass die vorliegende Erfindung auch bei verschiedenen Datenübertragungs-
und Kommunikationsvorrichtungen anwendbar ist.
-
COMPUTER-HARDWARE-ÜBERSICHT
-
In 1 ist ein Computersystem 10 gezeigt, auf
dem eine Ausführungsform
der vorliegenden Erfindung implementiert werden kann. Das Computersystem 10 weist
einen Bus oder andere Kommunikationsmittel zur Informationskommunikation
auf. Das Computersystem 10 umfasst weiterhin einen Arbeitsspeicher
(RAM) oder eine andere dynamische Speichereinrichtung 16 (als
Hauptspeicher bezeichnet), der mit dem Bus 12 zum Abspeichern
von Information und von auf einem Prozessor 14 auszuführenden Befehlen
verbunden ist. Der Hauptspeicher 16 kann auch zum Abspeichern
temporärer
Variablen oder anderer Zwischenergebnis-Informationen während des
Ausführens
der Befehle durch den Prozessor 14 verwendet werden. Das
Computersystem 10 umfasst auch einen Festspeicher (ROM)
und/oder ein anderes statisches Speichergerät 18, das an den Bus 12 zum
Speichern von statischen Informationen und Befehlen für den Prozessor 14 verbunden
ist. An den Bus 12 ist eine Datenspeichereinrichtung 20 zum Speichern
von Informationen und Befehlen angeschlossen.
-
An
das Computersystem 10 kann eine Datenspeichereinrichtung
wie eine Magnetplatte oder eine optische Platte und ihr dazugehöriges Laufwerk angeschlossen
sein. Das Computersystem 10 kann auch über den Bus 12 an
eine Anzeigeeinrichtung 22 angeschlossen sein, wie eine
Bildröhre
(cathode ray tube, CRT), zur Anzeige von Informationen für einen Computerbenutzer.
Eine alphanumerisches Eingabeeinrichtung 24 einschließlich alphanumerischer
und anderer Tasten ist typischerweise an den Bus 12 zur Übertragung
von Information und von Kommandoselektionen für den Prozessor 14 angeschlossen.
Ein anderer Typ einer Eingabeeinrichtung ist eine Cursor-Kontrolle 26,
wie eine Maus, ein Trackball oder Cursor-Richtungstasten zum Übertragen
von Richtungsinformationen und von Kommandoselektionen an den Prozessor 14 und
zum Kontrollieren der Cursor-Bewegung
auf der Anzeige 22. Das Eingabegerät weist typischerweise zwei
Freiheitsgrade in zwei Achsen auf, einer ersten Achse (beispielsweise
x) und einer zweiten Achse (beispielsweise y), die es dem Gerät erlauben,
Positionen in einer Ebene zu bestimmen.
-
Alternativ
können
andere Eingabegeräte
wie ein Schreiber oder ein Stift verwendet werden, um mit der Anzeige 22 zu
interagieren. Ein Anzeigeobjekt auf einem Computer-Bildschirm kann
durch Verwendung eines Schreibers oder eines Stifts, der das angezeigte
Objekt berührt,
ausgewählt
werden. Der Computer erfasst die Auswahl durch die Implementierung
eines berührungsempfindlichen
Bildschirms. Ebenso kann zum Auswählen eines angezeigten Objekts
ein Lichtstift und ein lichtempfindlicher Bildschirm verwendet werden.
Solche Geräte
können
daher die Positionsauswahl und die Auswahl als eine einzige Tätigkeit
vornehmen anstelle des "Zeigens und
Klickens" bei einem
System, das eine Maus oder einen Trackball verwendet. Schreiber-
und Stift-basierte Eingabegeräte
wie auch berührungs-
und lichtempfindliche Bildschirme sind bekannt aus dem Stand der
Technik. Ein solches System kann auch eine Tastatur wie die alphanumerische
Eingabeeinrichtung 24 entbehren, wobei jede Interaktion über den
Schreiber als Schreibinstrument (wie ein Stift) bereitgestellt wird
und der geschriebene Text unter Verwendung von optischen Zeichenerkennungs-(OCR-)Techniken
ausgewertet wird.
-
Die
vorliegende Erfindung bezieht sich auf die Verwendung des Computersystems 10 zum
Komprimieren und De komprimieren von Daten. Gemäß einer Ausführungsform
werden die Komprimierung und die Dekomprimierung von Daten durch
das Computersystem 10 als Antwort auf den Prozessor 14 ausgeführt, der
in dem Speicher 16 enthaltene Sequenzen von Befehlen ausführt. Das
Ausführen
von in dem Speicher 16 enthaltenen Sequenzen von Befehlen
veranlasst den Prozessor 14 dazu, verschiedene Berechnungen
und Veränderungen
von Daten auszuführen,
wie später
hier beschrieben wird. Bei alternativen Ausführungsformen können Halbleiterbaugruppen
oder Mikrochips anstelle von oder in Kombination mit den Software-Befehlen
verwendet werden, um die vorliegende Erfindung zu implementieren.
Daher ist die vorliegende Erfindung nicht auf irgendeine spezifische
Kombination von Hardware-Schaltung und Software beschränkt.
-
DATENKOMPRIMIERUNG
-
In
den 2A bis 2E ist ein Verfahren zum Komprimieren
von Daten gemäß der vorliegenden Erfindung
gezeigt. Im Schritt S10 beginnt die Initialisierung des Systems
durch Auswahl der Maximalanzahl von Primzahlen (Schlüsselparameter),
die in dem Komprimierungsalgorithmus zu verwenden sind. Im Schritt
S12 wird der maximale Wert für
die Exponenten der Primzahlen (Exponentenparameter) ausgewählt. Die
Größe des größten Satzes
an Bytes, die in einem bestimmten Zyklus komprimiert werden, wird
im Schritt S14 ausgewählt.
Die verschiedenen Initialisierungsparameter (oder Komprimierungsparameter)
können
eine Eingabe des Benutzers sein oder können basierend auf vorbestimmten
Bedingungen automatisch ausgewählt
sein.
-
Nachdem
die Initialisierungsparameter ausgewählt wurden, wird ein Header
im Schritt S16 erzeugt. Daher umfasst der Header vorteilhafterweise drei
Parameter, die dazu verwendet werden, die Daten zu komprimieren
und richtig zu dekomprimieren. Der für die Initialisierungs-(Komprimierungs-)Parameter
ausgewählte
Wert kann von System zu System variieren, abhängig von der zur Verfügung stehenden Verarbeitungsgeschwindigkeit.
Im Schritt S18 wird der erstellte Header übertragen. Abhängig von
dem Typ des Kommunikationsnetzes, das verwendet wird, kann eine
Antwort vor dem Fortfahren mit der Datenkomprimierungssequenz erwünscht sein.
Alternativ kann der Header mit den komprimierten Daten später zusammengesetzt
werden und übertragen
werden.
-
Im
Schritt S20 bestätigt
der Empfänger
den Empfang des Headers. Der Komprimierungszyklus ist jetzt initialisiert.
Im Schritt S22, der in der 2B gezeigt
ist, wird eine Zeichenfolge erstellt, die die Primzahlen umfasst,
die in dem Komprimierungsalgorithmus verwendet werden. Gemäß der Erfin dung hat
die Primzahlzeichenfolge eine Länge
von 5, falls der Primzahlparameter 5 ausgewählt ist und die Werte der Elemente,
welche die Zeichenfolge enthält, sind
[2, 3, 5, 7, 11].
-
Im
Schritt S24 werden die Initialisierungs-(Komprimierungs-)Parameter
in den Speicher des Computers oder des Systems, das zum Komprimieren
des Datenstroms verwendet wird, geladen und der Wert eines Zählers (I)
wird zu 0 gesetzt. Abhängig
von der Größe des zu
komprimierenden Datenstroms kann es notwendig sein, den Datenstrom entsprechend
dem Größenparameter
in mehrere Datenblöcke
zu segmentieren. Dies stellt sicher, dass die Größe der Daten nicht die Limits
eines Komprimierungspuffers überschreitet,
der dazu verwendet wird, die Daten während des Komprimierungsprozesses
zu speichern. Im Schritt S26 wird der Datenstrom in einem Empfangspuffer
empfangen. Der Datenstrom oder alternativ der erste segmentierte
Datenblock wird in den Komprimierungspuffer übertragen. Nachdem der Komprimierungspuffer
gefüllt
ist, beginnt der Datenkomprimierungszyklus. Im Schritt S28 in 2C werden die Daten in dem
Komprimierungspuffer durch die erste Primzahl geteilt. Die erste
Primzahl entspricht dem ersten Element in der Primzahlzeichenfolge.
-
Im
Schritt S30 wird das Ergebnis des Divisionsprozesses berechnet.
Falls der Rest gleich 0 ist, wird die Exponentenzahl der für die Division
verwendeten Primzahl um 1 erhöht.
Falls der Rest nicht gleich 0 ist, wird der Zähler um 1 im Schritt S34 erhöht. Im Schritt
S36 wird der Wert des Zählers
geprüft.
Falls der Wert des Zählers
gleich der ausgewählten
Maximalanzahl an Primzahlen (Schlüsselparameter) ist, wird ein
Fehlerwert um 1 erhöht
und der Wert des Zählers
wird reinitialisiert. Der Wert der Daten im Komprimierungspuffer
wird mit einem Anpassungsalgorithmus angepasst. Der Anpassungsalgorithmus
wird vor der Initialisierung festgelegt. Er kann eine Vielfalt an
Tätigkeiten
umfassen. Für
Diagramme wird ein einfaches Dekrement verwendet. Das Programm kehrt
zum Schritt S28 zurück,
wo der Inhalt des Komprimierungspuffers wiederum durch das erste
Element der Primzahlzeichenkette geteilt wird, d. h. durch die erste
Primzahl. Falls der Zähler
nicht gleich dem für
die Maximalanzahl an Primzahlen (Schlüsselparameter) ausgewählten Wert
ist, kehrt das Programm zum Schritt S28 zurück, wo die Inhalte des Komprimierungspuffers
durch das nächste nachfolgende
Element der Primzahlzeichenfolge dividiert werden, d. h. durch die
nächste
Primzahl.
-
Im
Schritt S40 wird der Quotient des Divisionsprozesses ausgewertet.
Ist der Quotient kleiner als der Wert der größten Primzahl, fährt das
Programm mit dem Schritt S46 fort. Falls der Quotient größer ist
als der Wert der größten Primzahl,
wird der Wert des Zählers
ausgewertet. Falls der Wert des Zählers gleich dem für den Primzahlparameter
gewählten
Wert minus 1 ist, wird der Fehlerwert erhöht und der Zähler wird
zu 0 gesetzt. Das Programm wendet den Anpassungsalgorithmus auch
auf den Komprimierungspuffer an. Das Programm kehrt zum Schritt
S28 zurück
und wiederholt die Divisionssequenz. Falls der Zähler nicht gleich der Maximalanzahl
an Primzahlen (Primzahlparameter) ist, führt das Programm die Divisionssequenz
ohne Erhöhen
des Fehlerwertes fort. Der Wert des Komprimierungspuffers wird durch
den Quotienten des Divisionsprozesses jedes Mal ersetzt, wenn der
Rest gleich 0 ist.
-
Im
Schritt S46, 2D, wird
der Wert des Komprimierungspuffers ausgewertet. Falls der Wert gleich
1 ist, springt das Programm zum Schritt S64. Falls der Wert des
Komprimierungspuffers nicht gleich 1 ist, wird er mit den Elementen
der Primzahlzeichenkette im Schritt S48 verglichen. Demnach wird
der Wert des Komprimierungspuffers mit jeder in dem Komprimierungsalgorithmus
verwendeten Primzahl verglichen. Falls der Wert des Komprimierungspuffers
gleich einer der Primzahlen ist, wird eine 1 zu der Exponentenzahl
der Primzahl im Schritt S50 addiert. Das Programm wird dann zum
Schritt S64 weitergeleitet. Falls der Wert des Komprimierungspuffers
nicht gleich einem der Primzahlen ist, wird der Zähler im
Schritt S52 zu 0 gesetzt.
-
Der
Wert des Komprimierungspuffers wird durch die erste Primzahl im
Schritt S54 dividiert. Im Schritt S56 wird das Ergebnis der Division
ausgewertet. Falls der Rest 0 ist, wird im Schritt S58 eine 1 zu der
Exponentenzahl der für
die Division verwendeten Primzahl addiert. Das Programm kehrt zum
Schritt S54 zurück,
wo der Inhalt des Komprimierungspuffers wiederum durch dieselbe
Primzahl dividiert wird. Falls der Rest 0 ist, wird der Inhalt des
Komprimierungspuffers im Schritt S60 ausgewertet. Falls der Inhalt
des Komprimierungspuffers gleich 1 ist, springt das Programm zum
Schritt S64. Falls der Inhalt des Komprimierungspuffers nicht gleich
1 ist, wird der Zähler
um 1 erhöht
und das Programm springt im Schritt S62 zum Schritt S54 zurück. Der
Divisionsprozess wird erneut wiederholt.
-
Der
Prozess dauert fort bis der Wert des Komprimierungspuffers gleich
1 ist und es dem Programm erlaubt ist, mit dem Schritt S64, 2E, fortzufahren. Der Körper des
Datenblocks wird im Schritt S64 in einen komprimierten Datenstrom
zusammengesetzt und an den Empfänger
im Schritt S66 übertragen,
um den Komprimierungsprozess zu vervollständigen. Der komprimierte Datenstrom
ist in der Form einer Zeichenkette, welche die Exponentenwerte für jede der
Primzahlen und die Fehlerwerte umfasst, die während des Komprimierungszyklus
bestimmt wurden. Wie zuvor beschrieben, kann der komprimierte Datenstrom
auch den Header einschließen.
Falls gewünscht, kann
eine Bestätigung von
dem Empfänger
erhalten werden, um den Empfang des komprimierten Datenstroms zu
bestätigen.
-
DATENDEKOMPRIMIERUNG
-
In
den 3A und 3B ist ein Verfahren zur Dekomprimierung
von Daten gemäß der vorliegenden
Erfindung gezeigt. Im Schritt S70 wird ein Komprimierungsparameter
umfassender Header von einer Empfangsstation empfangen. Im Schritt
S72 kann eine Bestätigung
für den
Header an die Übertragungsstation
zurück übertragen
werden. Im Schritt S74 wird die Body-Länge des Datenstroms basierend
auf den aus dem Header ausgelesenen Komprimierungsparametern berechnet.
Der Empfänger
erwartet nun die Übertragung
der Datenblöcke
im Schritt S76.
-
Der
im Schritt S76 übertragene
Datenblock wird in einen Konstruktionspuffer eingetragen, bis er in
seinem Gesamtumfang empfangen ist. Im Schritt S78, 3B, werden die Inhalte der Datenblöcke in einen
Auswertepuffer zur Dekomprimierung übertragen. Im Schritt S80 werden
die Daten dekomprimiert, indem zuerst jede Primzahl mit der in der
Komprimierungsphase bestimmten Exponentenzahl potenziert wird. Die
Ergebniszahlen der Potenzrechnung werden dann miteinander multipliziert
und in dem Konstruktionspuffer gespeichert. Im Schritt S82 wird
der Wert des Fehlerparameters zu dem Inhalt des Konstruktionspuffers
addiert. Grundsätzlich
wird der Anpassungsalgorithmus so oft invertiert angewendet, wie
durch den Fehlerparameter bestimmt. Falls der Anpassungsalgorithmus
ein "Dekrement" ist, kann der Fehlerparameter
einfach addiert werden. An diesem Punkt ist der originale Datenstrom
rekonstruiert worden.
-
Beispielsweise
soll angenommen werden, dass die Primzahlen, die aus dem Header
ausgelesen wurden [2, 3, 5] sind, die generierten Exponentenzahlen
sind [3, 5, 2] und der Fehlerpara meter ist 3. Die dekomprimierten
Daten wären
(23)*(35)*(52) + 3, oder 48603. Im Schritt S84 können die
Daten in binärer
Form an den Computer oder ein geeignetes System zur Auswertung übertragen
werden. Falls weitere zu dekomprimierende Blöcke vorhanden sind, springt
das Programm zum Schritt S76 zurück
und wiederholt den Dekomprimierungsprozess.
-
ERLÄUTERNDES
BEISPIEL
-
4 zeigt die Ergebnisse verschiedener Schritte
während
der Komprimierung eines Datenstroms gemäß der vorliegenden Erfindung.
Die zu übertragenden
Daten werden zuerst im Schritt S100 ausgelesen. Die Daten entsprechen
einer binären oder
einer Text-Datei, die in einem System gespeichert ist, digital gesampelten
Signalen, etc. In diesem Schritt werden die Daten als ein großer Strom
binärer Zahlen
behandelt. Die Daten werden im Schritt S110 in ihren gleichwertigen
Dezimalwert konvertiert, so dass sie komprimiert werden können. Davon
werden die Anzahl der in dem Algorithmus zu verwendenden Primzahlen
(Schlüsselbeispiel)
und der maximale Exponent (Exponentenparameter) für jede Primzahl im
Schritt S112 ausgewählt.
Gemäß dem Beispiel wird
ein Byte reserviert, um den Wert des Fehlerparameters zu speichern.
Dies kann bei realen Anwendungen unzureichend sein und die Länge des
Fehlerfeldes in der Definition des Headers ist auf alle Fälle ein
angenommener Wert. Die Initialisierungsparameter entsprechen den
Werten, die typischerweise in dem an die Empfangsstation übermittelten
Header codiert werden. Außerdem
wird angenommen, dass der numerische Wert der zu übertragenden
Daten innerhalb der Grenzen des Komprimierungspuffers liegt, daher
ist eine Segmentierung nicht nötig.
-
Das
Programm fährt
im Schritt S114 mit dem Komprimierungsalgorithmus fort und dividiert
die Daten durch alle Primzahlen. Der erste Zyklus ergibt im Schritt
S116 eine 1 für
die Expo nentenzahl der ersten Primzahl. Der Wert im Komprimierungspuffer
enthaltenen Daten kann nicht ohne Rest durch die verbleibenden Primzahlen
geteilt werden. Deshalb wird eine Fehlersituation ausgelöst. Im Schritt
S118 wird der Wert der Daten des Komprimierungspuffers um 1 erniedrigt
und der Fehlerparameter wird um 1 erhöht. Im Schritt S120 wird der
Komprimierungsalgorithmus wieder angewendet und die Daten werden
durch alle Primzahlen geteilt.
-
Die
Ergebnisse des zweiten Zyklus sind im Schritt S122 dargestellt.
Für die
erste Primzahl wurde kein Exponentialwert generiert. Die zweite
Primzahl generiert einen Exponenten von 4, die dritte Primzahl generiert
den Exponenten 5; die vierte Primzahl generiert den Exponenten 4;
die fünfte
und die sechste Primzahl generieren beide den Exponenten 3; die siebte
und die achte Primzahl generieren beide den Exponenten 4; und die
neunte Primzahl generiert den Exponenten 5. Die Werte für die Exponenten
liegen alle unterhalb des Wertes, der als maximaler Exponent in
der Initialisierungsphase ausgewählt
wurde. Resultierend aus dem Komprimierungszyklus sind die zu übertragenden
komprimierten Daten in der Form einer 1, was der Anzahl der während des
Komprimierungszyklus gezählten
Fehler entspricht, und neun Zahlen entsprechend den Exponentenwerten für jede der
in dem Komprimierungszyklus verwendeten Primzahlen.
-
Diese
Daten werden im Schritt S124 in eine binäre Form gebracht, wobei die
ersten acht Bits dem Fehlerwert entsprechen und der nachfolgende
Satz von neun 3-Bit-Werten den Exponenten entspricht, die für jede Primzahl
erhalten wurden. Die zu übertragenden
komprimierten Daten weisen eine Länge von 35 Bit auf, wie im
Block R gezeigt. Der originale Datenstrom entspricht einem 103-Bit-Binär-Strom.
Ein Vergleich der zwei binären
Datenströme
ergibt ein 2,94-zu-1-Komprimierungs verhältnis. Die Dekomprimierung
der Daten durch die Empfangsstation wird unter Verwendung des folgenden
mathematischen Ausdrucks erreicht:
(20)*(34)*(55)*(74)*(113)*(133)*(174)*(194)*(235) + 1.
-
KOMMUNIKATIONSVORRICHTUNG
-
In 5 ist eine Vorrichtung zur Übermittlung
komprimierter Daten gezeigt. Die Vorrichtung umfasst eine erste
Station 30 und eine zweite Station 40. Jede Station 30, 40 umfasst
einen Codierer, eine Datenübertragungseinrichtung,
eine Datenempfangseinrichtung und einen Decoder. Der Codierer und
der Decoder können
Standard-Hardware oder Übertragungseinrichtungen
für Datenübertragung und
-empfang wie ein Sender/Empfänger
sein, oder sie können
ein digitaler Computer sein, der eine Folge von Programmbefehlen
ausführt,
die einen Prozessor dazu veranlassen, die notwendigen Übertragungs-
und Empfangsfunktionen auszuführen.
-
Der
Codierer ist konfiguriert, um einen Header zu erstellen, der die
für den
Komprimierungszyklus zu verwendenden Komprimierungsparameter aufweist.
Deshalb umfasst der Header einen Schlüsselparameter entsprechend
der Anzahl der in der Komprimierungsroutine verwendeten Primzahlen,
einen Limitparameter entsprechend dem größten Wert der Exponenten, einen
Größenparameter
entsprechend dem größten Satz
an Bytes, die in einem einzelnen Zyklus zu komprimieren sind, und
einen Fehlerparameter entsprechend der Anzahl, wie oft die Komprimierungsroutine
versagt. Der Codierer ist auch konfiguriert, um den Datenstrom,
falls nötig,
in einen oder mehrere Datenblöcke
entsprechend des Wertes des Größenparameters
zu segmentieren.
-
Der
Codierer weist einen Komprimierungspuffer auf, um den Wert der Daten
zu speichern. Der Komprimierungspuffer kann ein Schreib/Lese-Speicher
(RAM), ein magnetisches Speicherme dium, etc. sein. Der Codierer
komprimiert die Datenblöcke durch
aufeinanderfolgendes Dividieren des Wertes des Komprimierungspuffers
durch die Primzahlen und generiert danach einen Exponentenparameter, der
mit jeder der Primzahlen verknüpft
ist. Falls mehrere Datenblöcke
verwendet werden, setzt der Codierer die Datenblöcke auch wieder zusammen, um einen
einzelnen komprimierten Datenstrom zu erzeugen. Zusätzlich erledigt
der Codierer eine geeignete Übertragung
der Daten von der binären
in die dezimale Form und umgekehrt. Der Datenstrom wird dann durch
die Übertragungseinrichtung
an die Empfangseinrichtung über
eine Kommunikationsverbindung übertragen.
Das Datenübertragungsgerät kann ein
Sender 32, eine Mikrowellenantenne 34, ein Modem
(nicht gezeigt), das an die Computervorrichtung angeschlossen ist,
um mit einer konventionellen Telefonleitung 36 betrieben
zu werden, eine Satellitenübertragung 38,
etc. sein. Demgemäss
kann die Datenübertragung
drahtlos, optisch, drahtgebunden, etc. sein.
-
Nachdem
die Daten von der Empfangseinrichtung der zweiten Station 40 empfangen
wurden, ruft der Decoder den Header und den komprimierten Datenstrom
ab. Die Komprimierungsparameter des Headers werden decodiert und
der Dekomprimierungszyklus beginnt. Der Decoder segmentiert den komprimierten
Datenstrom in einen oder mehrere komprimierte Datenblöcke basierend
auf den Informationen, die er aus dem Größenparameter erhalten hat.
Der Decoder umfasst einen Konstruktionspuffer und einen Auswertepuffer,
die verwendet werden, um die Daten zu dekomprimieren. Wie der Komprimierungspuffer
können
der Konstruktionspuffer und der Auswertepuffer in der Form eines
RAMs, eines magnetischen Datenträgers,
etc. sein.
-
Jeder
komprimierte Datenblock wird in den Auswertepuffer verschoben und
dekomprimiert, indem jede Primzahl mit dem Exponentenwert potenziert
wird, der während
des Komprimierungs zyklus erhalten wurde und indem das Produkt gebildet
wird. Das Ergebnis dieses Prozesses ist eine Mehrzahl von dekomprimierten
Datenblöcken.
Der Decoder setzt dann die dekomprimierten Datenblöcke in den originalen
Datenstrom ohne irgendwelche Verluste zusammen.
-
Die
in 5 gezeigte Vorrichtung
ist zum Betrieb mit verschiedenen Kommunikationsnetzen einschließlich paketvermittelten
und leitungsvermittelten Netzen geeignet. Außerdem kann die Vorrichtung
in Echtzeit für
interaktive Datenübertragung
und Kommunikation verwendet werden. In einer solchen Konfiguration
werden wieder eine erste und eine zweite Station verwendet. Jede
Station umfasst einen Codierer, eine Datenübertragungseinrichtung, eine
Datenempfangseinrichtung und einen Decoder. Die erste Station erstellt
einen ersten Header, der zur zweiten Station übertragen wird. Der Decoder
der zweiten Station fragt die Komprimierungsparameter von dem ersten
Header ab und sendet eine Bestätigung
an die erste Station. Die Bestätigung
kann auch einen zweiten Header umfassen, der von der zweiten Station
erstellte Komprimierungsparameter enthält, falls bidirektionale Kommunikation
gewünscht
ist. Nachdem die Bestätigung
empfangen wurde, beginnt die erste Station damit, Datenblöcke zu komprimieren
und an die zweite Station zu übertragen.
Die erste Station kann auch von der zweiten Station empfangene Datenblöcke empfangen
und dekomprimieren. Ebenso empfängt
und dekomprimiert die zweite Station Datenblöcke von der ersten Station
und komprimiert und überträgt Datenblöcke an die
erste Station. Der Betrieb der Kommunikationsvorrichtung in Echtzeit kann
voll- oder halbduplex sein.
-
Dieselbe
Technik kann in Anwendungen, bei denen das Übertragungsmedium ein Bus ist,
bspw. zwischen einer CPU und einer Platte, eingesetzt werden, so
dass der Speicherplatz auf der Platte reduziert wird.
-
Die
vielen Merkmale und Vorteile der Erfindung offenbaren sich in der
detaillierten Beschreibung und folglich ist es mit den beigefügten, die
Erfindung darstellenden Ansprüchen
beabsichtigt, all die Merkmale und Vorteile der Erfindung abzudecken,
die in den Bereich der Erfindung fallen. Weiterhin ist es nicht
beabsichtigt, die Erfindung auf die exakte Ausführungsform und Betriebsweise
zu beschränken,
die dargestellt und beschrieben ist, da dem Fachmann viele Modifikationen
und Variationen einfallen werden und demgemäss fallen solche Modifikationen
und Äquivalente
in den Bereich der beanspruchten Erfindung.