Алгоритм сжатия медицинских данных в режиме реального времени

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

Буду признателен за любые рекомендации/ссылки на научные статьи.

РЕДАКТИРОВАТЬ: система будет основана на сервере (скорее всего, установленном в инфраструктуре пункта оказания медицинской помощи) и мобильных устройствах (смартфоны и планшеты iOS и Android с собственными приложениями), на которые поступают сигналы. быть переданным. Сервер будет собирать все данные из больницы (в первую очередь данные формы волны). В моем случае стабильность и скорость важнее задержки.

Это самая подробная спецификация, которую я могу предоставить на данный момент. Я собираюсь изучить ваши рекомендации, а затем протестировать несколько алгоритмов. Но я ищу что-то, что было успешно реализовано в подобной архитектуре. Я также открыт для любых предложений относительно вычислительной мощности сервера или серверного программного обеспечения.


person syntagma    schedule 29.01.2012    source источник
comment
Слишком мало информации. Что такое прочный? Эффективный? Насколько реально ваше реальное время? Как быстро вы можете передавать данные? Какая у вас вычислительная мощность? Как насчет памяти? Какие задержки допустимы? Как именно и где это будет использоваться? На каком оборудовании?   -  person Alexey Frunze    schedule 30.01.2012
comment
Я отредактировал этот пост, чтобы предоставить более подробную информацию.   -  person syntagma    schedule 31.01.2012
comment
Возможно, вы оптимизируете недорогие области своего решения и можете извлечь выгоду из того, что отступите и посмотрите на фактические данные. Более подробная информация (слишком длинная для комментария) в моем ответе ниже.   -  person fencepost    schedule 02.02.2012


Ответы (3)


Не думайте об этом как о данных реального времени или медицинских данных — думайте об этом как о пакетах данных, которые необходимо сжать для передачи (скорее всего, в пакетах TCP). Детали содержимого имеют значение только при выборе алгоритма сжатия, и даже здесь важно не то, является ли оно медицинским, а то, как данные форматируются/хранятся и как выглядят фактические данные. Важными вещами являются сами данные и ограничения, связанные со всей системой (например, это сбор данных, такой как монитор Холтера, или отчет о состоянии в реальном времени, такой как кардиомонитор в отделении интенсивной терапии? Какая система получает данные? данные?).

Глядя на данные, представляются ли они для передачи в виде необработанных двоичных данных или принимаются от другого компонента или устройства в виде (например) структурированного XML или HL7 с числовыми значениями, представленными в виде текста? Будет ли сжатие исходных данных наиболее эффективным вариантом, или их следует преобразовать в собственный двоичный формат, который покрывает только фактический диапазон данных (достаточно ли 2, 3 или 4 байтов, чтобы покрыть диапазон значений?)? Какая экономия может быть достигнута путем конвертации и каковы проблемы совместимости (например, потеря совместимости с HL7).

Выбор абсолютно лучшего алгоритма сжатия также может не стоить много дополнительной работы, если только вы не собираетесь работать в сценарии с чрезвычайно низкой пропускной способностью; если данные поступают со встроенного устройства, вы должны сбалансировать эффективность сжатия с возможностями и ограничениями встроенного процессора, набора инструментов и окружающей системы для работы с ним. Если специально созданная процедура сжатия экономит вам 5 % по сравнению с тем, что уже встроено в инструменты, стоит ли дополнительное время кодирования и отладки и место для хранения во встроенной флэш-памяти? Существующие проверенные программные библиотеки, которые обеспечивают "достаточно хороший" результат, могут быть предпочтительными, особенно для медицинских устройств.

Наконец, в зависимости от среды вы можете захотеть пожертвовать большой частью сжатия в пользу некоторого уровня избыточности, например, передачи скользящего окна данных, чтобы потеря любых X-пакетов не приводила к потере данных. Это также может позволить вам изменить протоколы и изменить конфигурацию устройства — разница между потоковой передачей UDP (без повторной передачи потерянных пакетов) и TCP (где отправителю может потребоваться повторная передача) может быть значительной.

И теперь, когда я болтал о системной стороне, появилось много информации о пакетировании и потоковой передаче аналоговых данных, начиная от разработки протоколов потоковой передачи, таких как RTP, чтобы узнать подробности пакетирования голоса для GSM/CDMA и VOIP. Тем не менее, наиболее важными факторами, определяющими ваши решения, могут стать наборы инструментов, доступные вам на стороне устройства и сервера. Использование существующих наборов инструментов, даже если они не являются наиболее эффективным вариантом, может позволить вам значительно сократить время разработки (и время выхода на рынок), а также может упростить сертификацию вашего устройства/продукта для медицинского использования. С точки зрения бизнеса, дополнительные 3-6 месяцев на разработку программного обеспечения, поиск действительно квалифицированных разработчиков и получение разрешений регулирующих органов, вероятно, будут решающими факторами.

ОБНОВЛЕНИЕ 01/02/2012: я только что провел несколько минут, просматривая XML-экспорт ЭКГ сердечного стресса в 12 отведениях с общим временем наблюдения более 12 минут и размером XML-файла ~ 6 МБ. . По моим оценкам, более 25% этого файла были повторяющимися и ЧРЕЗВЫЧАЙНО сжимаемыми XML-файлами в заголовках исследования, а данные формы волны представляли собой числа, разделенные запятыми, в диапазоне от -200 до 200, сосредоточенные в центре диапазона и медленно меняющиеся. , с числами, пересекающими ось Y и остающимися на этой стороне некоторое время. Предполагая, что большая часть того, что вам нужно, — это значения формы волны, для этого примера вы будете смотреть на скорость передачи данных без сжатия 4500 КБ / 763 секунды или около 59 Кбит / с. Полностью несжатый и с использованием текстового форматирования, вы можете легко запустить его через GPRS-соединение «2,5G». В любой современной беспроводной инфраструктуре используемая полоса пропускания практически незаметна.

Я все еще думаю, что стандартные библиотеки сжатия съели бы такие данные на обед (с учетом проблем с заголовками сжатия и, возможно, заголовками пакетов). Если вы настаиваете на выполнении пользовательского сжатия, я бы посмотрел на отправку значений разницы, а не на необработанные числа (если только ваши необработанные данные уже не смещены). Если ваши данные выглядят примерно так, как я просматриваю, вы, вероятно, могли бы преобразовать каждый элемент в 1-байтовое значение от -127 до +127, возможно, зарезервировав крайние концы как «специальные» значения, используемые для переполнения (обработайте их, как вы видите fit - специальное представление, ошибка и т.п.). Если вы предпочитаете быть немного менее эффективным при передаче и незначительно быстрее в обработке, вы можете вместо этого просто отправить каждое значение как подписанное 2-байтовое значение, которое все равно будет использовать меньшую полосу пропускания, чем текстовое представление, потому что в настоящее время каждое значение в любом случае составляет 2+ байта. (значения 1-4 символа плюс разделители больше не нужны).

По сути, не беспокойтесь о размере данных, если только они не будут работать 24 часа в сутки 7 дней в неделю по высокоскоростному беспроводному соединению с низкими ограничениями.

person fencepost    schedule 29.01.2012
comment
как я могу получить данные с мониторов любого руководства? вот мой вопрос tinyurl.com/j7qw2bz - person murtaza.webdev; 08.08.2016

Существует категория программного обеспечения для сжатия, которое настолько быстрое, что я не вижу сценария, в котором его нельзя было бы назвать «в реальном времени»: они обязательно достаточно быстры. Такие алгоритмы называются LZ4, Snappy, LZO, QuickLZ и достигают сотен МБ/с на процессор.

Их сравнение доступно здесь: http://code.google.com/p/lz4/

«Сжатие в реальном времени для передачи» также можно рассматривать как компромисс между скоростью и коэффициентом сжатия. Большее сжатие, даже если оно медленнее, может эффективно сократить время передачи.

Например, на этой странице было проведено исследование «оптимального компромисса» между сжатием и скоростью: http://fastcompression.blogspot.com/p/compression-benchmark.html

person Cyan    schedule 29.01.2012

Я протестировал множество библиотек сжатия и пришел к такому выводу.

LZO (http://www.oberhumer.com/opensource/lzo/) работает очень быстро. учитывая сжатие большого объема данных (более 1 МБ)

Snappy (http://code.google.com/p/snappy/) хорош, но требует больше ресурсов обработки при распаковке (лучше для данных менее 1 МБ)

http://objectegypt.com предлагает библиотеку под названием IHCA, которая работает быстрее, чем lzo, при сжатии больших данных и предлагает хорошую распаковку. скорость и не требует лицензии

наконец вам лучше сделать свои собственные функции сжатия, потому что никто не знает о ваших данных больше, чем вы

person Ymni    schedule 14.02.2013