3

Взгляните на эту веб-страницу - закрытую, но не зашифрованную

Для трехмерного фазово-пространственного графика последовательность a, b, c, d, e, f и т.д. Может использоваться в качестве пространственных координат (ab, bc, cd), (bc, cd, de), (cd , de, ef) и т. д. Паттерны на созданном графике показывают повторяющиеся отношения между последующими последовательностями. На этом фазовом графике 50000 16-битных случайных чисел будут создавать неструктурированное облако точек.

Я хочу сделать то же самое. У меня есть бинарный файл (около 10 МБ), и я хотел бы создать несколько хороших графиков в стиле gnuplot, как они есть на этой веб-странице.

Что я ввожу в gnuplot, чтобы это произошло?

1 ответ1

1
  1. Создайте дамп вашего двоичного файла в формате, подходящем для gnuplot. Для удобства я использовал hexdump с пользовательским форматом вывода, который нам нужно сохранить в файле, например, как gnuplot.hdp (в принципе, строка формата может быть передана через опцию командной строки, но тогда мы столкнемся с слишком большим количеством вложенных кавычек в скрипте gnuplot):

    $ cat gnuplot.hdp
    3/1 "%03d " "\n"
    
    $ hexdump -f gnuplot.hdp random.data | head -n 4
    236 027 076
    070 243 055
    047 115 211
    184 206 073
    
  2. Разместите данные с помощью gnuplot. В простейшем случае мы строим байты 1, 2, 3 и 4, 5, 6 и т.д. Как координаты x, y, z :

    set parametric
    unset border
    unset xtics
    unset ytics
    unset ztics
    splot "< hexdump -f gnuplot.hdp random.data" using ($1):($2):($3) notitle
    

    Файл со случайными числами показывает - что неудивительно - довольно случайный график рассеяния:

    Но если мы используем, например, плохо сжатый файл, такой как простое растровое изображение, мы видим структуру (здесь это строка):

  3. Если мы хотим , чтобы походить на сюжет в цитируемой статье немного лучше, нам нужно 6/1 "%03d " "\n" , в формате hexdump так что мы получаем шесть байтов в строке. И мы должны расширить команду splot в gnuplot:

    splot "< hexdump -f gnuplot.hdp random.data" u ($1-$2):($2-$3):($3-$4) ls 1 not, '' u ($2-$3):($3-$4):($4-$5) ls 1 not, '' u ($3-$4):($4-$5):($5-$6) ls 1 not
    

    gnuplot лечит u как сокращение для using , а not для notitle , чтобы держать вещи коротким.

    Для растрового изображения мы получаем красивый объект;

    случайные данные выглядят так:

  4. Имейте в виду, что мы анализируем данные в блоках по 6 байтов, то есть, если коррелируется только 6-й и 7-й байты (или их кратные), графики не обнаружат этого.

  5. gnuplot должен легко обрабатывать входной файл размером 10 МБ, но особенно ротация может быть медленной - в зависимости от вашей вычислительной мощности.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .