การสร้างภาพข้อมูลสำหรับการวิเคราะห์รูปแบบ (ไม่ขึ้นกับภาษา แต่ต้องการ R)


11

ฉันต้องการพล็อตไบต์จากดิสก์อิมเมจเพื่อทำความเข้าใจกับรูปแบบในนั้น นี่เป็นงานวิชาการส่วนใหญ่เนื่องจากฉันเกือบจะแน่ใจว่ารูปแบบนี้ถูกสร้างขึ้นโดยโปรแกรมทดสอบดิสก์ แต่ฉันต้องการทำวิศวกรรมย้อนกลับ

ฉันรู้อยู่แล้วว่ารูปแบบดังกล่าวอยู่ในแนวเดียวกันโดยมีระยะเวลา 256 อักขระ

ฉันสามารถจินตนาการได้สองวิธีในการแสดงข้อมูลนี้: ระนาบ 16x16 ที่ดูผ่านเวลา (3 มิติ) โดยที่แต่ละพิกเซลของสีคือรหัส ASCII สำหรับตัวละครหรือ 256 พิกเซลสำหรับแต่ละช่วงเวลา (2 มิติ)

นี่เป็นภาพรวมของรูปแบบ (คุณสามารถดูได้มากกว่าหนึ่งรายการ) มองเห็นผ่านxxd(32x16):

รูปแบบการวิเคราะห์

ฉันกำลังพยายามหาวิธีแสดงภาพข้อมูลนี้ นี่อาจไม่ใช่เรื่องยากสำหรับทุกคนในการวิเคราะห์สัญญาณ แต่ฉันไม่สามารถหาวิธีใช้ซอฟต์แวร์โอเพ่นซอร์ส

ฉันต้องการหลีกเลี่ยง Matlab หรือ Mathematica และฉันต้องการคำตอบใน R เนื่องจากฉันได้เรียนรู้เมื่อเร็ว ๆ นี้ แต่กระนั้นภาษาใดก็ยินดีต้อนรับ


อัปเดต, 2014-07-25: ได้รับคำตอบจาก Emre ด้านล่างนี่เป็นรูปแบบที่ได้รับจากรูปแบบ 30MB แรกที่จัดที่ 512 แทน 256 (การจัดตำแหน่งนี้ดูดีกว่า):

รูปแบบกราฟิก

ยินดีต้อนรับแนวคิดเพิ่มเติมใด ๆ !


ตัวอย่าง / ข้อความที่ตัดตอนมาของข้อมูล (อาจจะเพียงไม่กี่ MB) น่าสนใจ
Marco13

หากคุณสนใจในลักษณะของข้อมูลเป็นระยะโดยดูที่ DFT ของข้อมูลอาจถูกเปิดเผย
mrmcgreg

@mrmcgreg: ฉันจะต้องเรียนรู้วิธีการทำงานของ DFT อีกครั้ง ฉันควรจะได้รับความสนใจมากขึ้นในการส่งสัญญาณและระบบการเรียน :)
Valmiky Arquissandas

คำตอบ:


5

ฉันจะใช้การวิเคราะห์ด้วยภาพ เมื่อคุณรู้ว่ามีการทำซ้ำทุก ๆ 256 ไบต์ให้สร้างภาพที่มีความกว้าง 256 พิกเซล แต่ลึกมากและเข้ารหัสข้อมูลโดยใช้ความสว่าง ใน (i) python มันจะเป็นดังนี้:

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);

นี่คือหน้าตาของ PDF:

ไฟล์ PDF แสดงภาพ

รูปแบบเป็นระยะ 256 ไบต์จะปรากฏเป็นเส้นแนวตั้ง ยกเว้นส่วนหัวและส่วนท้ายมันดูค่อนข้างดัง


ดูเหมือนว่าสิ่งที่ฉันกำลังมองหา ตอนนี้ฉันกำลังเรียนรอบชิงชนะเลิศและไม่สามารถใช้เวลาคิดอีกครั้ง แต่ทันทีที่ฉันจะแจ้งให้คุณทราบ "รูปแบบระยะ 256 ไบต์จะปรากฏเป็นเส้นแนวตั้ง" - สิ่งที่ฉันคิด ฉันยังสามารถแสดงภาพที่ฉันใส่ 256 ไบต์ทั้งหมดไว้ในบรรทัดเดียวกันและที่เห็นได้ชัดในข้อความ ผมค่อนข้างอยากรู้อยากเห็นเกี่ยวกับสิ่งที่จะออกมาจากมัน :)
Valmiky Arquissandas

ฉันไม่สามารถเรียกใช้สิ่งนี้ได้บน Debian Linux ผมติดตั้งแพคเกจและpython-scitools เกิดข้อผิดพลาดคือipython ValueError: invalid literal for int() with base 10: '#'ฉันจะดูว่าฉันสามารถทำให้มันทำงานได้หรือไม่ ...
Valmiky Arquissandas

ฉันประสบความสำเร็จ (โดยเรียกใช้รหัสโดยตรงจากภายในipythonและเปลี่ยนmap(int, line)เป็นmap(ord, line)และอัปเดตคำถามด้วยภาพใหม่
Valmiky Arquissandas

ใช้เวลาหนึ่งปีกับฉัน แต่ฉันตัดสินใจยอมรับคำตอบนี้ ฉันยังไม่รู้ว่าบิตสตรีมนั้นคืออะไร แต่ฉันอาจไม่ทราบ มันมีรูปแบบที่ดี แต่!
Valmiky Arquissandas

1

ฉันไม่รู้อะไรเลยเกี่ยวกับการวิเคราะห์สัญญาณ แต่การสร้างภาพสองมิติสามารถทำได้อย่างง่ายดายโดยใช้อาร์โดยเฉพาะอย่างยิ่งที่คุณต้องการreshape2และggplot2แพ็คเกจ สมมติว่าข้อมูลของคุณกว้าง (เช่นขนาด [n X 256]) ก่อนอื่นคุณต้องแปลงเป็นรูปแบบยาวโดยใช้melt()ฟังก์ชั่นจากreshape2แพ็คเกจ จากนั้นใช้รูปทรงเรขาคณิตจากgeom_tile ggplot2นี่คือความสุขสูตรที่มีส่วนสำคัญ


2
มีข้อมูลมากกว่า 4 GB ฉันควรพล็อตมันโดยการอ่านจาก stdin หรือสิ่งที่คล้ายกัน เป็นความคิดที่ดีที่จะโหลดทุกสิ่งลงใน RAM ฉันจะดูสิ่งที่คุณพูดในสองสามวัน - และหวังว่าจะมีความคิดอื่น ๆ ที่อาจเกิดขึ้นได้ - และฉันจะแจ้งให้คุณทราบว่ามันเป็นอย่างไรขอบคุณ!
Valmiky Arquissandas

อย่าโหลดมันและจัดการกับมันเหมือน dataframe ไม่ใช่ dataframe มันเป็นสตรีมของไบต์
Spacedman

1

ฉันจะดูrasterแพ็คเกจสำหรับสิ่งนี้ซึ่งสามารถอ่านได้ในข้อมูลไบนารีดิบและนำเสนอเป็น NxM กริด นอกจากนี้ยังสามารถแยกชุดย่อยของไบนารีกริดขนาดใหญ่โดยไม่ต้องอ่านในไฟล์ทั้งหมด (วัตถุ Raster เองนั้นเป็นเพียงพร็อกซีไปยังข้อมูลไม่ใช่ตัวข้อมูลเอง)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.