Desen analizi için veri görselleştirme (dilden bağımsız, ancak R tercih edilir)


11

Onları bir desen anlamak için bir disk görüntü baytlar çizmek istiyorum. Bu temelde akademik bir görevdir, çünkü bu kalıbın bir disk test programı tarafından oluşturulduğundan neredeyse eminim, ancak yine de tersine mühendislik yapmak istiyorum.

Desenin 256 karakterlik bir periyodiklikle hizalandığını zaten biliyorum.

Bu bilgiyi görselleştirmenin iki yolunu hayal edebilirim: ya zaman boyunca görüntülenen 16x16 düzlemi (3 boyut), burada her pikselin rengi karakter için ASCII kodu veya her dönem için 256 piksel çizgisi (2 boyut).

Bu, xxd(32x16) ile görülen desenin anlık görüntüsüdür (birden fazla görebilirsiniz ):

Analiz edilecek model

Her iki durumda da, bu bilgileri görselleştirmenin bir yolunu bulmaya çalışıyorum. Bu muhtemelen sinyal analizi yapmak için zor değil, ama açık kaynaklı yazılım kullanarak bir yol bulamıyorum.

Matlab veya Mathematica'dan kaçınmak istiyorum ve son zamanlarda öğrendiğim için R'de bir cevap tercih ederim, ancak yine de herhangi bir dil hoş geldiniz.


Güncelleme, 2014-07-25: Emre'nin cevabı aşağıda verildiğinde, desenin ilk 30MB'si göz önüne alındığında, 256 yerine 512'ye hizalanmış (bu hizalama daha iyi görünüyor):

Grafik desen

Başka fikirleri bekliyoruz!


Verilerin bir örneği / alıntısı (belki sadece birkaç MB) ilginç olabilir.
Marco13

Verilerin periyodik doğası ile ilgileniyorsanız verilerin DFT'sine göz atmak ortaya çıkabilir.
mrmcgreg

@mrmcgreg: DFT'nin nasıl çalıştığını yeniden öğrenmem gerekecek. Sinyaller ve sistem sınıflarına daha fazla dikkat
etmeliydim

Yanıtlar:


5

Görsel bir analiz kullanırdım. Her 256 baytta bir yineleme olduğunu bildiğiniz için, 256 piksel genişliğinde ancak çok derin bir görüntü oluşturun ve verileri parlaklık kullanarak kodlayın. (İ) python'da şöyle görünecektir:

import os, numpy, matplotlib.pyplot as plt

%matplotlib inline

def read_in_chunks(infile, chunk_size=256):
    while True:
        chunk = infile.read(chunk_size)
        if chunk:
            yield chunk
        else:
            # The chunk was empty, which means we're at the end
            # of the file
            return

fname = 'enter something here'
srcfile = open(fname, 'rb')
height = 1 + os.path.getsize(fname)/256
data = numpy.zeros((height, 256), dtype=numpy.uint8)    

for i, line in enumerate(read_in_chunks(srcfile)):
    vals = list(map(int, line))
    data[i,:len(vals)] = vals

plt.imshow(data, aspect=1e-2);

Bir PDF şöyle görünür:

Görselleştirilmiş bir PDF dosyası

256 baytlık bir periyodik model, dikey çizgiler olarak kendini gösterirdi. Başlık ve kuyruk hariç oldukça gürültülü görünüyor.


Bu aradığım şey gibi görünüyor. Şimdi finaller için çalışıyorum ve tekrar düşünmek için zaman ayıramıyorum, ancak mümkün olan en kısa sürede size bildireceğim. "256 baytlık bir periyodik desen dikey çizgiler olarak kendini gösterirdi." - tam olarak ne düşünüyordum. 256 baytın hepsini aynı satıra koyduğum bir görüntüyü de gösterebilirim ve bu zaten metinde zaten açıktır. Bundan ne çıkacağını merak ediyorum :)
Valmiky Arquissandas

Bunu Debian Linux'ta çalıştırmıyorum. Paketleri kurdum python-scitoolsve ipython. Hata mesajı ValueError: invalid literal for int() with base 10: '#'. Yine de çalıştırabilir
miyim bakacağım

Ben direkt olarak içine kod çalıştırarak (başarılı ipythonve değişen map(int, line)etmek map(ord, line)ve yeni resim ile soru güncellendi.
Valmiky Arquissandas

Bana bir yıl sürdü, ama bu cevabı kabul etmeye karar verdim. Hala bu bit akımının ne olduğunu bilmiyorum, ama muhtemelen bulamayacağım. Yine de güzel bir deseni var!
Valmiky Arquissandas

1

Sinyal analizi hakkında neredeyse hiçbir şey bilmiyorum, ancak R kullanarak 2 boyutlu görselleştirme kolayca yapılabilir. Özellikle ihtiyacınız olacak reshape2ve ggplot2paketler olacak . Verilerinizin geniş olduğunu varsayarsak (örneğin [n X 256] boyutu), önce paketten işlev kullanarak verileri uzun biçime dönüştürmeniz gerekir . Sonra ' dan geometri kullanın . İşte gist ile güzel bir tarif .melt()reshape2geom_tileggplot2


2
4 GB'nin üzerinde veri. Bunu stdin veya benzeri bir şeyden okuyarak çizmeliyim. Her şeyi RAM'e yüklemek kötü bir fikir. Birkaç gün içinde söylediklerinize bir göz atacağım - ve umarım ortaya çıkabilecek diğer fikirler - ve nasıl gittiğini size bildireceğim, teşekkürler!
Valmiky Arquissandas

İçine yüklemeyin ve bir veri çerçevesi gibi davranmayın, bir veri çerçevesi değil, bir bayt akışıdır.
Spacedman

1

Ben bakardım rasterham ikili verileri okumak ve NxM ızgaraları olarak sunabilirsiniz Bunun için paketin,. Tüm dosyada okumak zorunda kalmadan büyük ikili ızgaraların alt kümelerini bile ayıklayabilir (R tarama nesnesinin kendisi, verilerin kendisi için değil, verilerin yalnızca bir proxy'sidir).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.