NMR Center >> | Dmitry Dmitriev >> | Spectra compression |
Spectra compression
(Как сделать наши архивы на треть плотнее)
Чем мы обычно архивируем ЯМР спектры? Как известно, наиболее распространенный архиватор Zip не очень хорошо подходит для этого - коеффициент сжатия FID-ов обычно близок к двум, а спектры уменьшаются всего на 20-25 %. Причина этого в том, что используемый в программе Zip алгоритм LZW хорошо работает на неоднородных данных - то есть таких, в которых некоторые последовательности байт встречаются чаще других. Типичный же ЯМР спектр на 99% состоит из шума, в котором, по определению, появление каждого из значений некоторого интервала примерно равновероятно.
Можно ли улучшить коефициент сжатия стандартным архиватором? Думаю, что да. Специалисты в области упаковки информации утрверждают, что собственно сжатие - лишь заключительный процесс. До 80% уcпеха компрессии закладывается на начальной стадии - сортировки и упорядочения данных с учетом их структуры и физического смысла, при которых обьем файла зачастую не изменяется.
Возьмем типичный спектр в формате DISNMR. Для архиватора Zip он представляет собой хаотическую последовательность байт, комбинации которых почти не повторяются. Однако, мы знаем, что в этом хаосе есть закономерности - надо только помочь алгоритму найти их. Файл представляет собой цепочку 24-битных слов, каждое из которых задает интенсивность в последовательных точках спектра:
Рис. 1.1
Как уже было сказно, в типичном спектре до 99% точек лежат на базовой линии, их интенсивность выражается небольшими числами, для хранения которых не нужно всех 24-х бит. Следовательно, большинство слов различаются лишь нижними разрядами, а их верхние биты одинаковы. Более того, и нижние разряды соседних слов похожи - ведь ЯМР-спектр является непрерывной фунцией и интенсивность в соседних точках спектра в общем случае близка. Однако, архиватор не замечает схожести соседних значений - ведь она проявляется на уровне битов, а он ищет закономерности в последовательностях байт. Чтобы облегчить задачу архиватору, запишем отдельные слова в виде 24-битовых векторов, расположив их вертикально (см. рис 1.2) Очевидно, что если двигаться по строкам этой таблицы (назовем это битовым "срезом"), обнаружить повторяемость значительно проще. Если сохранить в файл битовые слои срез за срезом, обьем файла останентся прежним, но сжиматься такой файл должен существенно лучше.
Рис. 1.2
Результвты
Для проверки, дает ли метод битовых срезов (Bits Slices - BS) выигрыш при упаковке спектральных файлов, была написана тестовая программа swbits (см. приложение к части 3). Программой был обработан большой набор файлов различных типов: DISNMR спектры до фурье преобразования (FIDs), DISNMR спекры после ФП (spc), а также некоторые другие спектральные форматы. Результаты представлены ниже.
FID файлы (355 шт, сумм. размер 17 720К)
Метод | Размер, Кб | Время упаковки, сек | Вместимость диска ср. с Zip, % |
Zip | 9014 | 43 | 100 |
bzip2 | 6670 | 66 | 135 |
BS + Zip | 6656 | 22 | 135 |
BS + bzip2 | 8859 | 68 | 102 |
SPC файлы (236 шт, сумм. размер 11 781К)
Метод | Размер, Кб | Время упаковки, сек | Вместимость диска ср. с Zip, % |
Zip | 9394 | 14 | 100 |
bzip2 | 7012 | 75 | 136 |
BS + Zip | 7024 | 17 | 136 |
BS + bzip2 | 6916 | 64 | 136 |
WINNMR WMF файлы (49 шт, сумм. размер 1 299К)
Метод | Размер, Кб | Время упаковки, сек | Вместимость диска ср. с Zip, % |
Zip | 595 | 2 | 100 |
bzip2 | 523 | 5 | 114 |
BS + Zip | 425 | 3 | 140 |
BS + bzip2 | 307 | 4 | 194 |
Краткие выводы
Как видно из таблиц, почти во всех случаях послойная упаковка спектральных файлов дает экономию примерно 30-40% дискового пространства по сравнению с упаковкой исходных спектров. При этом время компрессии остается на уровне "быстрого" Zip, а при упаковке ФИД-ов - даже уменьшается. Схожие результаты получены и при тестах на спектрах с прибора DRX, а также двумерных файлах.
Далее...
Copyright © by Dmitry E. Dmitriev2002 Last change 28/12/02