Ich möchte die Bytes von einem Disk-Image zeichnen, um ein Muster in ihnen zu verstehen. Dies ist hauptsächlich eine akademische Aufgabe, da ich fast sicher bin, dass dieses Muster von einem Festplattentestprogramm erstellt wurde, aber ich würde es trotzdem gerne rückentwickeln.
Ich weiß bereits, dass das Muster mit einer Periodizität von 256 Zeichen ausgerichtet ist.
Ich kann mir zwei Möglichkeiten vorstellen, diese Informationen zu visualisieren: entweder eine 16x16-Ebene, die durch die Zeit betrachtet wird (3 Dimensionen), wobei die Farbe jedes Pixels der ASCII-Code für das Zeichen ist, oder eine 256-Pixel-Linie für jede Periode (2 Dimensionen).
Dies ist eine Momentaufnahme des Musters (Sie können mehr als eines sehen), xxd
durchsichtig (32x16):
In beiden Fällen versuche ich, diese Informationen zu visualisieren. Dies ist wahrscheinlich für niemanden schwer in der Signalanalyse, aber ich kann anscheinend keinen Weg finden, Open-Source-Software zu verwenden.
Ich möchte Matlab oder Mathematica vermeiden und ich würde eine Antwort in R bevorzugen, da ich sie kürzlich gelernt habe, aber trotzdem ist jede Sprache willkommen.
Update, 25.07.2014: Angesichts der Antwort von Emre unten sieht das Muster so aus, wenn die ersten 30 MB des Musters bei 512 statt 256 ausgerichtet sind (diese Ausrichtung sieht besser aus):
Weitere Ideen sind willkommen!
quelle
Antworten:
Ich würde eine visuelle Analyse verwenden. Da Sie wissen, dass alle 256 Bytes eine Wiederholung erfolgt, erstellen Sie ein Bild mit einer Breite von 256 Pixel und einer beliebigen Tiefe und codieren Sie die Daten mit Helligkeit. In (i) Python würde es so aussehen:
So sieht ein PDF aus:
Ein periodisches Muster von 256 Byte hätte sich als vertikale Linien manifestiert. Bis auf den Header und das Tail sieht es ziemlich laut aus.
quelle
python-scitools
undipython
. Die Fehlermeldung lautetValueError: invalid literal for int() with base 10: '#'
. Ich werde sehen, ob ich es trotzdem schaffen kann ...ipython
map(int, line)
map(ord, line)
Ich weiß fast nichts über Signalanalyse, aber die zweidimensionale Visualisierung könnte leicht mit R durchgeführt werden. Insbesondere benötigen Sie
reshape2
undggplot2
Pakete. Angenommen, Ihre Daten sind breit (z. B. [n x 256]), müssen Sie sie zuerst mithilfe der Funktion aus dem Paket in ein Langformat umwandeln . Verwenden Sie dann Geometrie von . Hier ist ein schönes Rezept mit Kern .melt()
reshape2
geom_tile
ggplot2
quelle
Ich würde mir das
raster
Paket dafür ansehen , das binäre Rohdaten einlesen und als NxM-Gitter darstellen kann. Es kann sogar Teilmengen großer Binärgitter extrahieren, ohne die gesamte Datei einlesen zu müssen (das R-Raster-Objekt selbst ist nur ein Proxy für die Daten, nicht für die Daten selbst).quelle