Je veux tracer les octets d'une image disque afin de comprendre un modèle en eux. Il s'agit principalement d'une tâche académique, car je suis presque sûr que ce modèle a été créé par un programme de test de disque, mais j'aimerais quand même le rétroconcevoir.
Je sais déjà que le motif est aligné, avec une périodicité de 256 caractères.
Je peux imaginer deux façons de visualiser ces informations: soit un plan 16x16 vu dans le temps (3 dimensions), où la couleur de chaque pixel est le code ASCII du personnage, soit une ligne de 256 pixels pour chaque période (2 dimensions).
Ceci est un instantané du motif (vous pouvez en voir plusieurs), vu à travers xxd
(32x16):
Quoi qu'il en soit, j'essaie de trouver un moyen de visualiser ces informations. Ce n'est probablement pas difficile pour quiconque dans l'analyse du signal, mais je n'arrive pas à trouver un moyen d'utiliser un logiciel open source.
Je voudrais éviter Matlab ou Mathematica et je préférerais une réponse en R, puisque je l'ai apprise récemment, mais néanmoins, n'importe quelle langue est la bienvenue.
Mise à jour, 2014-07-25: étant donné la réponse d'Emre ci-dessous, voici à quoi ressemble le modèle, étant donné les 30 premiers Mo du modèle, alignés à 512 au lieu de 256 (cet alignement semble meilleur):
Toute autre idée est la bienvenue!
la source
Réponses:
J'utiliserais une analyse visuelle. Comme vous savez qu'il y a une répétition tous les 256 octets, créez une image de 256 pixels de largeur par autant de profondeur et encodez les données en utilisant la luminosité. En (i) python, cela ressemblerait à ceci:
Voici à quoi ressemble un PDF:
Un modèle périodique de 256 octets se serait manifesté sous forme de lignes verticales. À l'exception de l'en-tête et de la queue, il semble assez bruyant.
la source
python-scitools
etipython
. Le message d'erreur estValueError: invalid literal for int() with base 10: '#'
. Je vais voir si je peux le faire fonctionner de toute façon ...ipython
, et en changeantmap(int, line)
demap(ord, line)
et mis à jour la question avec la nouvelle image.Je ne sais presque rien sur l' analyse du signal, mais la visualisation 2 dimensions pourrait être facilement fait en utilisant R. En particulier , vous aurez besoin
reshape2
etggplot2
paquets. En supposant que vos données sont larges (par exemple, la taille [n X 256]), vous devez d'abord les transformer en format long en utilisant lamelt()
fonction dureshape2
package. Utilisez ensuite lageom_tile
géométrie deggplot2
. Voici une belle recette avec de l' essence .la source
Je regarderais le
raster
paquet pour cela, qui peut lire des données binaires brutes et le présenter comme des grilles NxM. Il peut même extraire des sous-ensembles de grandes grilles binaires sans avoir à lire l'intégralité du fichier (l'objet raster R lui-même n'est qu'un proxy des données, pas les données elles-mêmes).la source