Дипломная работа на тему "Использование ЭВМ в кардиологии"

ГлавнаяИнформатика → Использование ЭВМ в кардиологии




Не нашли то, что вам нужно?
Посмотрите вашу тему в базе готовых дипломных и курсовых работ:

(Результаты откроются в новом окне)

Текст дипломной работы "Использование ЭВМ в кардиологии":


Введение

В настоящее время развитие компьютерной индустрии затронуло разработки и исследования практически во всех отраслях современной науки. Компьютеры из года в год становятся неотъемлемой частью и обыденной жизни населения. Постепенное наращивание качества, надежности и производимости компьютерного оборудования заставляет разработчиков электронных приборов все чаще и чаще использовать в своих нововведениях микропроцессоры ведущих фирм производителей. Естественно такая ситуация не м огла не затронуть медицинскую промышленность. Во всех областях медицины исследования на высоком научном уровне немыслимы без применения современных средств программного обеспечения. Сейчас ЭВМ применяют практически на всех этапах медицинского обследования: в профилактике, диагностике и терапии заболеваний.

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

Заболевания сердца – одна из наиболее важных проблем медицины сегодняшнего дня. Современные исследования сердца не могут обойтись без компьютерной техники. Выделяют две основные области исследований, в которых используются компьютеры: моделирование сердца человека и обработка данных кардиологических исследований.

Первая – моделирование сердца человека – осуществляется с целью более глубокого проникновения в сущность функционирования и строения этого органа. Очевидно, что в отсутствие компьютерного обеспечения проблема моделирования едва ли может быть решена.

Вторая область – анализ данных кардиологических исследований. Цель таких работ – постановка диагноза, составление прогноза и лечение. В некоторых случаях обработка кардиологических параметров возможна и вручную, тем не менее, автоматический расчет их с помощью компьютера дает большие преимущества и требует меньше усилий. Наиболее важные преимущества автоматической обработки данных состоят в следующем:

- обработка данных осуществляется по одной схеме,

- результаты представляются в стандартном виде,

- можно использовать стандартную терминологию.

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

Различные типы данных, получаемые наиболее распространенными современными диагностическими методами в кардиологии представлены на рисунке 1. При обработке таких данных компьютеры выполняют следующие задачи: ввод данных, хранение, поиск, переработка и выдача информации. Переработка информации в свою очередь подразделяется на следующие подзадачи: фильтрация, распознавание образов, измерение параметров и интерпретация данных.

Рисунок убран из работы и доступен только в оригинальном файле.

Рис. 1. Категории объективных кардиологических данных.

Актуальная проблема сегодняшнего дня – надежность и доступность кардиографических аппаратов. Со временем микроконтроллеры ведущих фирм производителей стали дешевле и соответственно более доступны для внедрения в портативные аппараты диагностики сердца. Здесь все большая и большая нагрузка ложится на программное обеспечение, постепенно вытесняя из приборов ранее аппаратно реализуемые функции.

Подбор методов фильтрации и тестирование программных фильтров, разработанные в рамках данного дипломного проекта, удобно проводить отдельно, используя вспомогательные программы разработанные на персональной ЭВМ.

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

Заказать написание дипломной - rosdiplomnaya.com

Грамотное выполнение дипломных работ под заказ в Москве и в других городах России.

В последнее время широкое распространение получила объектно-ориентированная модель разработки программного обеспечения. Основная идея программирования при таком подходе состоит в разработке классов приложения для определения новых типов, манипулировать которыми так же просто, как и встроенными. Создавая новые типы для описания предметной области, С++ помогает программисту писать более легкие для понимания приложения. Классы позволяют отделить детали, касающиеся реализации нового типа, от определения интерфейса и операций, предоставляемых пользователю. При этом уделяется меньшее внимание мелочам, делающим программирование таким утомительным занятием. Значимые для прикладной программы типы можно реализовывать один раз, после чего использовать повторно [9]. Средства, обеспечивающие инкапсуляцию данных и функций, необходимых для реализации типа, помогают значительно упростить последующее сопровождение и развитие прикладной программы. Существует механизм, именуемый наследованием, который вводит возможность включать во вновь разрабатываемый класс общие свойства присущие ранее разработанному классу предку. Например, в трехмерной компьютерной графике классы OrthographicCamera (ортогональная камера) и PerspectiveCamera (перспективная камера) обычно являются производными от базового Camera. Каждый производный от него класс лишь реализует отличия от общей камеры, предоставляя альтернативный код для унаследования функций членов либо вводя альтернативные члены.

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

Самой распространенной и наиболее емкой средой разработки сегодня является Microsoft Visual C++. В наши дни Visual C++ лидирует среди продуктов для программирования в среде Windows. Visual C++ - это инструмент для программирования в среде Widnows, обладающий поистине фантастическими возможностями. Более того, многие разработчики считают Visual C++ самой мощной из всех программ такого класса. На самом деле Visual C++ представляет собой целый набор из множества инструментов, собранных в одном динамическом пакете, готовом к немедленной работе. Сначала программы для Windows приходилось писать на языке С, а не на С++, и получались они большими и сложными. Даже вывод на экран пустого окна требовал примерно пяти страниц сложного невразумительного кода. Язык С++ позволяет хранить большую часть программного кода внутри самостоятельных объектов, а это сокращает объем больших программ. Помимо этого, фирма Microsoft разработала библиотеку Microsoft Foundation Classes. MFC – замечательный пакет, состоящий из заранее написанного и готового к работе кода. Например, вместо того чтобы самостоятельно писать программу для работы с новым окном, можно просто воспользоваться классом cWnd из MFC, который выполнит всю работу за вас [2]. Возможности, предоставляемые библиотекой классов MFC позволяют конструировать элементы пользовательского интерфейса, легко работать со стандартными типами данных языка С, разрабатывать классы, производные от библиотечных с добавлением новых функциональных возможностей, разрабатывать собственные классы с последующим развитием их функциональности.

Глава 1. Тенденции развития компьютерных систем сбора и математической обработки ЭКГ

Электрокардиологический метод – метод регистрации и анализа биоэлектрических процессов человека и животных нашел весьма широкое применение в клинической практике, физиологическом эксперименте, авиационной и космической медицине, исследованиях по физиологии труда и спорта. Столь широкое применение электрокардиологического метода объясняется тем, что он позволяет получить ценную информацию о деятельностей тканей, органов и систем. Электрическое возбуждение распространяется в определенном направлении и последовательности, создавая на поверхности тела электрическое поле. Поскольку электропроводные свойства тканей неоднородны, электрическое поле ассиметрично с разностью потенциалов между отдельными участками тела. Это свойство положено в основу метода электрокардиографии, который регистрирует разность потенциалов путем различных отведений от поверхности тела, что достигается с помощью приборов – электрокардиографов [1]. Процесс получения из ЭКГ диагностической информации называется ЭКГ – анализом. Первые попытки автоматизировать этот процесс были предприняты еще в 70-х годах. Ожидалось, что кроме тех преимуществ, которые дает автоматизация, удастся также повысить диагностическую точность анализа благодаря применению статических методов, которые не могут быть использованы при обработке вручную [3]. Результатом развития различных компьютерных систем явился ЭКГ – анализ. Обычно он выполняется в четыре этапа:

1.  Ввод ЭКГ.

2.  Фильтрация ЭКГ.

3.  Распознавание характерных элементов ЭКГ и измерение соответствующих параметров.

4.  Интерпретация и классификация ЭКГ.

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

Запись и ввод ЭКГ.

ЭКГ записывают с помощью прибора, называемого электрокардиографом. До начала 70-х годов ЭКГ отведения записывались последовательно одно за другим [1]. Лишь позже появились трехканальные электрокардиографы, позволяющие вести запись сразу трех отведений. Современная регистрирующая аппаратура может одновременно фиксировать до 12 отведений. От электрокардиографа сигнал передается в АЦП. Здесь аналоговый сигнал ЭКГ преобразуется в цифровую форму и передается в компьютер. Используются различные частоты дискретизации, но чаще всего 250 и 500 Гц. Эти две величины, согласно теореме Шеннона, достаточно высоки, поскольку в ЭКГ взрослого человека максимальная частота, имеющая диагностическое значение, составляет примерно 80 ГЦ. Каждая ЭКГ – кривая после оцифровки передается в компьютер в виде последовательности чисел {Yi}, где Yi – амплитуда (в мкВ) i - ой точки. В современной клинической практике принята следующая система отведений, считающаяся стандартной. В этой системе съем потенциалов осуществляется с правой руки (R), левой руки (L), левой ноги(F) и шести точек от правого края грудины до левой среднеподмышечной линии (C1-C6). На основе снятых потенциалов вычисляются отведения:

Основные:

I = L – R

II = F – R

III = F – L

Усиленные:

aVR = R – (L + F)/2

aVL = L – (R + F)/2

aVF = L – (R + L)/2

Грудные с V1 по V6:

Vi =Ci – (R + L + F)/3

При реализации такой схемы приходится задействовать дополнительный электрод на правую ногу (N), обеспечивающий нулевой потенциал, относительно которого и осуществляется съем потенциалов с основных электродов. При реализации такой схемы отведений достаточно часто используется тот факт, что из приведенных 12 отведений только 8 являются линейно – независимыми друг от друга [3]. Это позволяет исключить из схемы аппарата 4 независимых аналоговых тракта, что несколько сокращает его стоимость. Исключаемые отведения вычисляются программным методом следующим образом:

III = II – I

aVR = -(II+I)/2

aVL = (2I – II)/2

aVF = (2II-I)/2

После снятия аналогового сигнала с отведений он соответственно оцифровывается для последующей передачи обработчику, в качестве которого сейчас обычно выступает компьютер [4]. Частота дискретизации Fs на основании теоремы Котельникова – Шеннона должна быть более чем в два раза верхней полосы пропускания. С теоретической точки зрения теорема Шеннона определяет минимальное значение частоты дискретизации Fs для сигнала с ограниченной полосой частот (т. е. для сигнала содержащего частоты вплоть до максимальной Fb). Из теоремы следует что при дискретизации, как минимум вдвое большей, чем частота сигнала, гарантируется частотное содержимое аналогового сигнала и обеспечивается идеальное восстановление оригинального сигнала по его дискретным значениям, с помощью надлежащей интерполяции [5].

Сейчас достаточно часто применяют частоту оцифровки в 500 Гц, рекомендованную Американской Ассоциацией Электрокардиологов [6,7]. Эта величина, согласно теореме Шеннона, достаточно высока, поскольку в ЭКГ взрослого человека максимальная частота, имеющая диагностическое значение, составляет примерно 80 Гц. Однако не следует думать, что частоты дискретизации в современных кардиографах ограничиваются 500 Гц – на данный момент они достигают нескольких килогерц. В соответствии с современными требованиями разрешение по амплитуде у современных приборов должно составлять не менее 5 мкВ. Высокое амплитудное разрешение необходимо для некоторых видов обработки кардиокривых, например для анализа поздних потенциалов, а так же для высококачественного представления электрокардиограммы на экране или в твердой копии без применения специальной интерполяции.

Необходимый диапазон частот для электрокардиографа, применяемого для диагностики должен составлять, как минимум от 0.05 и до 120 Гц (по уровню – 3dB). Причем, если к верхнему диапазону частот нет четко обоснованных требований – в разных источниках называются значения от 100 до 250 Гц, то со значением нижней частоты пропускания связываются диагностически значимые ЭКГ критерии. Если значение нижней полосы пропускания не выдерживается, то возможны ошибки автоматизированной диагностики, вплоть до постановки ошибочного заключения [8].

К сожалению кардиографы, созданные по стандартной схеме обладают рядом недостатков, к которым стоит отнести наличие прецизионных резисторов во входном каскаде схемы отведений, сложных инструментальных входных усилителей, крупногабаритных конденсаторов. Совсем недавно стала доступна элементная база, реализующая принцип сигма – дельта цифрового преобразования в одном модуле. Это позволило реализовать электрокардиограф исключительно на сигма – дельта АЦП [10,11], лишенного упомянутых недостатков. К сожалению, такие аппараты до сих пор обладают достаточно высокой стоимостью.

Фильтрация ЭКГ.

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

Первостепенное значение на стадии диагностики в кардиологии имеет фильтрация сигналов ритмов сердца. Для постановки правильного диагноза врачу необходимо получать данные от кардиографа, связанные только с активностью сердечных ритмов. После регистрации и дискретизации сигнала ЭКГ следующим этапом обработки ЭКГ обычно является цифровая фильтрация. Это необходимо для повышения качества записи и подавления различных шумов, связанных в основном с мышечным тремором, смещением электродов и электрическими помехами. Цифровые фильтры, применяемые в электрокардиографии можно разделить на 3 основные группы – это нерекурсивные фильтры с конечной импульсной характеристикой(КИХ), рекурсивные фильтры с бесконечной импульсной характеристикой (БИХ), адаптивные фильтры, а также частотные фильтры, производящие фильтрацию сигнала в определенной области частот с использованием локального преобразования Фурье [12]. Для борьбы с мышечной наводкой желателен атреморный фильтр низкой частоты (ФНЧ), ограничивающий диапазон входного сигнала где – то до 60-70 Гц, а для борьбы с сетевой наводкой режекторный фильтр на 50 Гц в условиях отечественных стандартов и на 60 Гц в условиях иностранных сетей. В итоге ПО обработки ЭКГ имеет, как минимум, переключаемый фильтр верхних частот (ФВЧ) с наибольшей постоянной по времени не менее 3.2 секунды, фильтр сетевой наводки и совмещенный с ним или реализованный отдельно переключаемый ФНЧ.

На рисунках 1.1 и 1.2 приведены блок – схемы КИХ и БИХ фильтров соответственно. Элементы Z -1 – просто элемент задержки, который может рассматриваться как регистр, хранящий один отсчет входного сигнала, треугольники – элементы, выполняющие арифметическую операцию умножения, а окружности – сложение.

Рисунок убран из работы и доступен только в оригинальном файле.

Рисунок 1.1. Структура КИХ фильтра

Рисунок убран из работы и доступен только в оригинальном файле.

Рисунок 1.2. Структура БИХ фильтра.

Традиционная фильтрация обычно применяется тогда, когда полезный сигнал и шум находятся в разных диапазонах частот, причем спектральный характер шума заранее известен. Фильтры обычно проектируются исходя из желаемой АЧХ, которая достигается лишь с требуемой точностью, накладывая определенные ограничения на возможную амплитуду осцилляции в полосе пропускания, ширину переходной области между полосой пропускания и подавления. Для обработки биологических сигналов большую важность имеет линейная, а если это возможно, то и нулевая ФЧХ. Если фильтр имеет нелинейную ФЧХ, то его работа будет вносить нелинейные искажения в сигнал, которые могут сказаться при последующем анализе сигнала. Требование линейности ФЧХ для КИХ фильтров выливается в требование симметрии коэффициентов фильтра относительно середины. Существует достаточно большое количество методик расчета как КИХ, так и БИХ фильтров [5]. Расчетная среда Matlab предоставляет широкий спектр возможностей для расчета фильтров. Расчеты фильтров для применения в детекторе подачи импульса дефибриляции будут приведены в приложении.

Когда не доступна информация о частотном составе шума, или шум имеет известный, но переменный состав, применяется адаптивная фильтрация (рис 1.3).

Рисунок убран из работы и доступен только в оригинальном файле.

Рис 1.3. Блок-схема адаптивного фильтра

Записанный сигнал d(t) представляет из себя сумму «чистого» не зашумленного сигнала s(t) и шума n(t). u(t) - сигнал, так или иначе связанный с входным шумом. Адаптивный фильтр вычленяет из входного сигнала составляющие, кореллирующие с шумом и автоматически корректирует свои параметры, исходя из входного сигнала. Выход адаптивного фильтра y(t) - это оценка составляющей сигнала, кореллирующей с шумом. Таким образом, ошибка e(t) = s1= d(t) - y(t) - это оценка составляющей сигнала, несвязанной с шумом. Следовательно, главной задачей адаптивного фильтра является минимизация E[(n(t)-y(t))2]. Адаптивные фильтры могут быть классифицированы по следующим параметрам [15]:

- качеству фильтрации;

- алгоритму, корректирующему параметры фильтра;

- структуре фильтра.

Большим преимуществом адаптивных фильтров является большая гибкость по сравнению с КИХ и БИХ фильтрами, а также большая их эффективность.

Еще одним важным этапом в предварительной обработке ЭКГ является коррекция изолинии для того, чтобы записанная кардиограмма была пригодна для анализа врачом. Простейший ФВЧ фильтр часто неприменим, так как изолиния может осциллировать с достаточно большими частотами. Для того, чтобы фильтр, реализованный с достаточно малым числом коэффициентов, был способен качественно отфильтровать сигнал, он должен обладать нижней полосой пропускания в 0.05 Гц, с подавлением -3 ДБ. Такие характеристики фильтра будут оказывать влияние на низкочастотные компоненты ЭКГ, такие как ST сегмент. Поэтому зачастую рекомендуется использовать более изощренные методы для коррекции изолинии. Для этого пользуются известными характеристиками ЭКГ сигнала и, в частности тем, что период до Р-волны и после Т волны имеют один и тот же электрический потенциал во всех циклах ЭКГ. Следовательно, изолиния должна проходить через эти точки. Таким образом, кривая изолинии получается путем интерполяции этих изоэлектрических участков полиномами различного порядка или даже неполиномиальными функциями, например сплайнами. Полученная таким образом интерполированная кривая изолинии вычитается из исходного сигнала, устраняя тем самым блуждание изолинии.

Выделение и измерение параметров элементов ЭКГ

Одной из самых важных задач, решаемых программными комплексами ЭКГ диагностики, является определение, измерения и классификация характерных элементов ЭКГ. Обычно характерный вид рассматриваемого элемента ЭКГ хорошо известен. В настоящее время существует множество подходов к выделению и измерению параметров ЭКГ. Перед тем, как перейти к рассмотрению основных методик, рассмотрим подробнее структуру кардиоцикла. На ЭКГ сердечный цикл обычно представляется в виде трех комплексов. Р – комплекс соответствует деполяризации предсердий, QRS – деполяризации желудочков, T – их реполяризации. Реполяризация предсердий на ЭКГ не проявляется. Каждый комплекс состоит из нескольких разнонаправленных пиков (смотреть рис.1.4). Число пиков (зубцов) в каждом комплексе неодинаково в разных отведениях и у разных пациентов. Р и Т комплексы обычно содержат один или два зубца, а QRS – комплекс - от одного до семи. На представленном рисунке введены следующие обозначения:

1 – РР – интервал; 2 – PR – сегмент; 3 – ST – сегмент;

2 – Р – комплекс; 5 – QRS – комплекс; 6 – QT – интервал;

7 – PR – интервал; 8 – RR – интервал; 9 – Т – комплекс

Рисунок убран из работы и доступен только в оригинальном файле.

Рис. 1.4. Сердечный цикл и его характерные элементы

Характерные элементы ЭКГ, которые необходимо распознать - это комплексы, сегменты (расстояние между зубцами) и интервалы. К параметрам ЭКГ, подлежащим измерению, относятся высота зубцов и длительность комплексов, а также величина сегментов и интервалов. Таким образом, необходимо выполнять два типа измерений: временные и амплитудные. В настоящее время существует несколько методик распознавания элементов ЭКГ. Одной из групп таких методик является группа структурных методов, основывающихся на априорном знании характеристик определяемого элемента ЭКГ. Обычно алгоритмы, принадлежащие к этой группе, являются эвристическими. Естественно, что характеристики одних и тех же элементов ЭКГ могут меняться от цикла к циклу. Структурные методы пытаются найти такие структурные особенности элемента ЭКГ, которые практически не изменяются от цикла к циклу, применяя для этого специальным образом подобранные фильтры, пороговые детекторы. Дополнительно также производится анализ длительностей комплексов, процедура фильтрации ложных пиков и т. д. Фактически основной работой, положившей начало этой группе алгоритмов, была [16], от которой в настоящее время получено множество производных методик, адаптированных для определения различных элементов ЭКГ. К другой группе методик принадлежат алгоритмы, основывающиеся на принципе сравнения искомого элемента ЭКГ с неким полученным специальным образом шаблоном. Такой шаблон обычно получается путем усреднения выровненных элементов, определенных ручным способом. Далее, исходя из доверительной вероятности определения, определяется максимальное среднеквадратичное отклонение, при котором классифицируемый элемент все еще принадлежит к группе шаблона. Фактически осуществляется потоковый просмотр исходного сигнала при использовании определенного окна и, если выделенный сегмент не выходит за границы максимального СКО, то он считается распознанным как элемент, принадлежащий группе шаблона. Самым важным моментом является выбор максимально допустимого СКО от оригинала, так как слишком большое СКО приведет к неверному принятию некорректных комплексов, а слишком малое - к потере реальных.

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

В заключении следует отметь, что обычно все вышеописанные методики применяются в комплексе, что значительно более эффективно, чем использовать только один конкретный метод в отдельности.

Интерпретация и классификация ЭКГ

Результаты выявления элементов ЭКГ и измерения их параметров используются для интерпретации с целью постановки правильного диагноза. В настоящее время известны две основные категории алгоритмов, применяемых в различных системах автоматической диагностики. К первой категории относятся алгоритмы, моделирующие логику врача-диагноста — детерминистический. Естественно, в них используются признаки заболеваний, диагностическая значимость которых установлена всем предшествующим опытом медицины. Применительно к задачам электрокардиографии это связано, в частности, с обязательным использованием параметров медицинского описания электрокардиограммы. Данные тестируют по установленным критериям и получают набор непротиворечивых заключений по ЭКГ. Стоит заметить, что сегодня универсальный комплекс таких критериев отсутствует. Алгоритмы второй категории, как правило, основаны на методах многомерного статистического анализа и теории вероятностей. При этом отказываются не только от медицинской логики, но и от принятых в медицине обозначений элементов электрокардиограммы и способов измерений.

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

Достоинством немедицинских диагностических алгоритмов является то, что они могут использовать любые параметры описания электрокардиограммы. Благодаря этому им оказываются доступны резервы информации, которые в клинической практике остаются неиспользованными. Недостатком этих алгоритмов является неудобность их обучения. Это представляет существенные трудности, так как связано с подбором хорошо исследованных больных с заболеваниями, различать которые должен научиться автомат. Тем не менее, алгоритмы второй категории считаются более перспективными, так доступная им новая информация даст возможность сделать диагностику более эффективной. В настоящее время ведутся активные работы в разных странах мира в области разработки алгоритмов классификации ЭКГ. Основными направлениями работ является применение нейронных сетей, методов частотно-временного преобразования (вейвлет-анализ) и многое другое.

Сжатие ЭКГ данных

Большинство современных программных ЭКГ системы обладают возможностью сжатия данных. Такая возможность необходима для организации эффективного хранения данных, передачи больших объемов данных через Internet. Некоторые методы сжатия даже включены в стандарты обмена ЭКГ данными [18].

В целом, компрессия данных осуществляется за счет уменьшения избыточности ЭКГ. Все основные методы сжатия данных могут разделены на 2 группы: сжатие с потерями данных и без потерь. Под сжатием с потерями подразумевается то, что исходный сигнал может быть восстановлен только с заведомо известной степенью точности. Методы сжатия с потерями используют стандартные методы кодирования избыточности, применяемые для сжатия произвольных данных. Эти методики обычно используют особенности ЭКГ сигнала: периодичность, наличие участков практически постоянного потенциала. Чтобы извлечь из этого пользу, сигнал зачастую дифференцируется, генерируется усредненный шаблон периодического участка(обычно QRS комплекс), который вычитается из сигнала на каждом периоде. Все это делается для того, чтобы впоследствии как можно эффективнее применить операцию кодирования без потери информации. Сжатие с потерями обычно происходит по стандартной схеме. Вначале используется некоторое дискретное преобразование сигнала, полученные коэффициенты дополнительно квантуются и далее применятся стандартная процедура сжатия квантованных коэффициентов без потерь. В настоящее время в качестве дискретных преобразований широко применяются дискретное преобразование Фурье (ДПФ), дискретное косинусное преобразование, преобразование Карунена-Леве, а также вейвлет-преобразование. [19]. Следует заметить, что единственный шаг кодирования, на котором осуществляется потеря данных, - это процедура квантования.

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

Рисунок убран из работы и доступен только в оригинальном файле.

Итак, в этой главе был проведен обзор функциональных возможностей систем сбора и математической обработки ЭКГ информации и основных методик ЭКГ, применяемых в настоящее время в клинической практике. Все методики ЭКГ – анализа, за исключением этапа интерпретации и классификации ЭКГ, описанные в этом разделе так или иначе используются при построении программы, предлагаемой на рассмотрение.

Перейдем теперь к рассмотрению основных принципов построения и использования предлагаемой нами программы тестирования и оптимизации программных фильтров для определения моменты подачи импульса в дефибрилляторе ДФР-2.

Глава 2. Основные принципы и методы объектно-ориентированного программирования

Проблемы при решении сложных задач

Проблемы, которые мы пытаемся решить с помощью разрабатываемого программного обеспечения, часто неизбежно содержат сложные элементы, к которым предъявляется множество различных, нередко противоположных требований.

Основная задача разработчиков состоит в создании иллюзии простоты, защищающей пользователей от сложности описываемого предмета или процесса. Размер программы отнюдь не входит в число ее достоинств. Внутри прикладной программы могут существовать сотни, и даже тысячи переменных. Как же мы можем изменить эту ситуацию? Для этого необходимо изучить структуру сложных систем. Если объединить понятия структуры классов и структуры объектов со всеми признаками сложных систем, то получим, что практически все сложные системы можно представить одной канонической формой, представленной ниже на рис. 2.1.

Рисунок убран из работы и доступен только в оригинальном файле.

Рис. 4.1. Каноническая форма сложной декомпозиции.

В самом деле, правильная декомпозиция непосредственно определяет сложность, присущую программной системе, обеспечивая разделение пространства состояний системы. На рис. 2.2 мы разделили подсистему, выбрав в качестве критерия декомпозиции принадлежность ее элементов к различным абстракциям данной предметной области.

Рисунок убран из работы и доступен только в оригинальном файле.

Рис. 2.2. Объектно-ориентированная декомпозиция.

Объектный подход

В основе объектно-ориентированного проектирования (ООП) лежит объектный подход. Основными принципами являются: абстрагирование, ограничение доступа, модульность, иерархичность, типизация, параллелизм и устойчивость. Эти принципы не новы, однако, именно в объектном подходе они объединены для решения общей задачи.

Объектно-ориентированное проектирование принципиально отличается от традиционных подходов структурного проектирования, так как подразумевает другой подход к процессу декомпозиции, а получаемый программный продукт по архитектуре в значительной степени выходит за рамки традиционных представлений.

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

Рисунок убран из работы и доступен только в оригинальном файле.

Рис. 2.3. Архитектура языков программирования третьего поколения.

Объектный подход может быть осуществлен на более высоких уровнях абстракций. Группы абстракций в больших системах могут представляться в виде многослойной структуры. Группы объектов существуют на каждом уровне и тесно взаимодействуют между собой. Внутри каждой группы мы видим то же взаимодействие.

Рисунок убран из работы и доступен только в оригинальном файле.

Рис. 2.4. Архитектура программных систем большой сложности на основе объектных и объектно-ориентированных языков программирования.

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

Объектно-ориентированное программирование (ООП) - это методология программирования, которая основана на представлении программы в виде совокупности объектов, каждый из которых является реализацией определенного класса, а классы образуют иерархию на принципах наследуемости.

В данном определении можно выделить три части:

-ООП использует в качестве элементов конструкции объекты, а не алгоритмы.

-Каждый объект является реализацией какого-либо определенного класса.

-Классы организованы иерархически.

Программа будет объектно-ориентированной только при соблюдении этих трех требований.

Объектно-ориентированное проектирование

Методы программирования подразумевают правильное эффективное использование механизмов языков программирования. Методы проектирования, напротив, основное внимание направляют на структурирование сложных систем.

Определим объектно-ориентированное структурирование следующим образом:

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

В данном определении содержатся две важные части:

-OOС ведет к объектно-ориентированной декомпозиции

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

Объектно-ориентированный анализ

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

На результатах ООА формируются модели, на которых основывается ООС; ООС в свою очередь создает основу для окончательной реализации системы с использованием методологии ООП.

Способы программирования и компоненты объектного подхода

Каждый стиль программирования имеет свою концептуальную основу, требует различного подхода к решаемой задаче. Для объектно-ориентированного стиля концептуальная основа состоит в объектном подходе. Этому подходу соответствуют четыре главных элемента:

-абстрагирование

-ограничение доступа

-модульность

-иерархия

Эти элементы являются главными в том смысле, что без любого из них подход не будет объектно-ориентированным. Кроме главных имеются еще три дополнительных элементов:

-типизация

-параллелизм

-устойчивость

Эти элементы являются полезными, но не обязательными в объектном подходе.

Рассмотрим эти элементы более подробно.

Абстрагирование

Абстрагирование является одним из главных способов, используемых для решения сложных задач. По одному из определений это упрощенное описание или изложение системы, при котором одни свойства и детали выделяются, а другие опускаются. Хорошей является такая абстракция, при которой подчеркиваются существенные для рассмотрения и использования детали, и опускаются те, которые на данный момент несущественны или отвлекают внимание.

Определение абстракции: Абстракция – это такие существенные характеристики некоторого объекта, которые отличают его от всех других видов объектов и, таким образом четко определяют особенности данного объекта с точки зрения дальнейшего рассмотрения и анализа.

Абстрагирование концентрирует внимание на внешних особенностях объекта и позволяет отделить самые существенные особенности поведения от деталей их осуществления. Полезным является еще один принцип, называемым принципом наименьшей выразительности, по которому абстракция должна охватывать лишь самую суть объекта, не больше, но и не меньше.

Существует целый спектр абстракций, начиная с объектов, которые приблизительно соответствуют сущности предметной области, кончая объектами, не имеющими реальных аналогий в жизни:

-Абстракция сущности объекта - объект представляет собой модель существенных сторон предметной области.

-Абстракция поведения – объект состоит из обобщенного множества операций, каждая из которых выполняет определенную функцию

-Абстрагирование в виде виртуальной машины – объект объединяет группы операций виртуальной машины, которые используются либо для управления объектом, либо соответствуют функциям нижнего уровня

Произвольная абстракция – объект включает в себя набор независимых по отношению друг к другу операций

Наиболее интересны для нас абстракции сущности объектов, так как они соответствуют словарю предметной области.

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

Ограничение доступа

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

Абстрагирование и ограничение доступа являются взаимодополняющими операциями: абстрагирование фокусирует внимание на внешних особенностях объекта, а ограничение доступа – или иначе защита информации – не позволяет объектам пользователям различать внутреннее устройство объекта. Практически, в описании класса существуют две части: интерфейс и реализация. Интерфейс отражает внешнее проявление объекта, создавая абстракцию поведения всех объектов данного класса. Внутренняя реализация описывает механизмы достижения желаемого поведения объекта. Принцип такого различения интерфейса и реализации соответствует разделению по сути: в интерфейсной части собрано все, что касается взаимодействия данного объекта с любыми другими объектами; реализация скрывает от других объектов все детали, не имеющие отношения к процессу взаимодействия объектов.

Ограничение доступа – это процесс защиты отдельных элементов объекта, не затрагивающий существенных характеристик объекта как целого.

В языке С ++ элементы объекта могут быть общедоступны, обособлены или защищены. Общедоступная часть “видима” для всех объектов, обособленная “скрыта” от других объектов, а защищенная “скрыта” от всех объектов.

Модульность

Разделение программы на фрагменты позволяет частично уменьшить ее сложность. Однако гораздо важнее тот факт, что разделение программы улучшает проработку ее частей. Это свойство особенно полезно, когда программа состоит из огромного количества классов. Итак,

Модульность – это разделение программы на отдельно компилируемые фрагменты, имеющие между собой средства сообщения.

В большинстве языков ведется разделение интерфейсной части и реализации. Таким образом, модульность и ограничение доступа идут неразрывно друг от друга. В традиционном структурном проектировании модульность связывается прежде всего с логической группировкой подпрограмм на основе принципов взаимной связи и общей логики. В объектно-ориентированном программировании ситуация несколько иная: необходимо физически разделить классы и объекты, составляющие логическую структуру проекта и явно отличающиеся от подпрограмм. Программист должен находить баланс между двумя противоположными тенденциями: стремлением ограничить доступ к данным и необходимости обеспечения видимости тех или других абстракций в нескольких модулях. Доступ к данным из другого модуля должен осуществляться только через процедуры данного модуля.

Модульность – это свойство системы, связанное с возможностью декомпозиции ее на ряд тесно связанных модулей.

Иерархия.

Значительное упрощение в понимании сложных задач достигается за счет образования иерархической структуры из абстракций. Определим иерархию следующим образом:

Иерархия – это ранжированная или упорядоченная система абстракций.

Основными видами иерархических структур применительно к сложным системам являются структура классов (иерархия по номенклатуре) и структура объектов (иерархия по составу).

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

Принципы абстрагирования, ограничения доступа и иерархии конкурируют между собой. Данфорт и Томлисон утверждают: “Абстрагирование данных состоит в установлении жестких границ, защищающих состояние и функции объекта; принцип наследования требует открыть доступ и к состоянию, и к функциям объекта для производных объектов”. Для любого класса обычно существуют два вида объектов пользователей: объекты, которые используют операции данного класса для доступа к его элементам, и объекты-подклассы, полученные наследованием данного класса.

Различные языки программирования по-разному реализуют механизмы наследования и ограничения доступа, наиболее гибким в этом отношении является С++. В нем интерфейсная часть класса может быть разделена на три части: обособленную – видимую только для самого класса, защищенную – видимую также для подклассов; общедоступную – видимую для всех. В ряде случаев наследование носит множественный характер.

Типизация.

Несмотря на схожесть понятий ”класс” и ”тип”, в качестве отдельного элемента объектного подхода выделяется типизация, поскольку эта концепция подчеркивает различные особенности абстракций. Определим типизацию следующим образом:

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

Параллелизм.

Любая программа включает по меньшей мере один канал управления, но в параллельной системе таких каналов может быть несколько: одни могут быть временными, а другие могут сохраняться в течении всего времени выполнения программы. Реальная параллельность достигается только на многопроцессорных системах, а системы с одним процессором имитируют параллельность за счет алгоритмов разделения времени.

Объект является основой, которая объединяет две концепции: каждый объект (как абстракция реальности) может представлять собой отдельный канал управления (абстракцию процесса). Такой объект называется активным. Для систем, построенных на основе OOD, реальность может быть представлена как совокупность взаимодействующих объектов, часть которых является активной и выступает в роли узлов независимых действий.

Параллелизм – свойство объектов находиться в активном, либо пассивном состоянии.

Устойчивость.

Устойчивость – понятие, связанное не только с временем существования данных. В OODB сохраняется не только состояние объекта, но и способ интерпретации класса любой другой программы должен быть определен однозначно. Из этого можно понять всю сложность управления базой данных в процессе ее наращивания, в частности при изменении классов объектов. Рассмотрим только устойчивость объектов во времени.

Устойчивость – свойство объекта существовать во времени (вне зависимости от процесса, породившего данный объект) и (или) в пространстве (перемещение объекта из адресного пространства, в котором он был создан).

Применения объектного подхода

Объектный подход создает множество существенных удобств, которые при других условиях не могут быть обеспечены. Наиболее важным является то, что объектный подход позволяет создавать системы, которые воплощают пять атрибутов хорошо структурированных сложных систем. Кроме того, можно назвать еще пять преимуществ, которые связаны с применением объектного подхода.

Глава 3. Разработка программы реализации программных фильтров для определения моментов подачи импульсов дефибриляции

Программа, управляемая событиями

Известно, что приложения для Windows можно разрабатывать как с использованием библиотеки классов MFC, так и без нее. Использование всей мощи MFC, конечно, облегчает процесс разработки приложений, однако каждому разработчику необходимо иметь представление о структуре и принципах функционирования традиционного Windows – приложения, созданного с помощью функций API (Application Programming Interface). Это утверждение объясняется тем, что каркас приложения MFC содержит внутри себя структуру традиционного Windows – приложения. Кроме того, многие методы классов MFC содержат, инкапсулируют, вызовы API – функций. В состав API входят не только функции (более 2000), но и множество структур, более 700 сообщений, макросы и интерфейсы. Цель этой главы – показать традиционную структуру Windows – приложения, созданного на основе классов MFC.

Основной чертой всех Windows – приложений является то, что они поддерживают оконный интерфейс, используя при этом множество стандартных элементов управления (кнопки, линейки, шкалы, списки и т. д.). Эти элементы поддерживаются с помощью динамических библиотек (DLL), которые являются частью операционной системы. Именно поэтому элементы доступны любым приложениям, и даже самое первое приложение будет иметь почти такой же облик, как и любое другое.

Все Windows – приложения являются программами, управляемыми событиями (event-driven applications), что коренным образом отличает их от программ с фиксированной последовательностью выполнения. Программы, управляемые событиями, обладают большей гибкостью в смысле выбора пользователем порядка выполнения операций. Однако разработчик не может заранее предсказать последовательность вызовов функций и даже выполнения операторов своего приложения, так как эта последовательность определяется на этапе выполнения кода. Характерно то, что последовательность большей частью определяется не программой, а системой Windows и зависит от потока сообщений о событиях в системе. Большую часть времени приложение, управляемое событиями, находится в состоянии ожидания событий, точнее, сообщений о событиях. Сообщения могут поступать от различных источников, но все они попадают в очередь системных сообщений. Только некоторые из них система передаст в очередь сообщений вашего приложения. Все это время приложение выполняет цикл ожидания сообщений. Как только придет сообщение, адресованное вашему приложению, система передаст управление вашей оконной процедуре. Можно отметить факт, что в случае многопотокового приложения (multithreaded application) сообщение приходит активному потоку (thread) приложения.

Наступление события обозначается поступлением сообщения. Все сообщения Windows имеют стандартные имена, многие из которых начинаются с префикса WM_ (Windows Message). Например, WM_PAINT именует сообщение о том, что необходимо перерисовать содержимое окна того приложения, которое получило это сообщение. Идентификатор сообщения WM_PAINT – это символьная константа, обозначающая некое число.

Рассмотрим такой пример. Пользователь приложения нажимает клавишу на клавиатуре, а система вырабатывает сообщение об этом событии. Вы знаете, что Windows обеспечивает поддержку клавиатуры, не зависящую от типа устройства (device – independent support). Для каждого типа клавиатуры она устанавливает соответствующий драйвер, то есть специальную программу, которая служит посредником между клавиатурой и операционной системой. Клавиатурная поддержка Windows не зависит также от языка общения с системой. Это достигается использованием специальной клавиатурной раскладки (layout), которую пользователь выбрал в данный момент. Каждой клавише присвоено уникальное значение – идентификатор клавиши, зависящий от типа устройства и называемый скан – кодом. Когда пользователь вводит символ, то клавиатура генерирует два скан кода: один – когда он нажимает клавишу, и другой – когда отпускает. Скан коды с клавиатуры поступают в клавиатурный драйвер, который, используя текущую раскладку, транслирует их и преобразует в сообщения.

Клавиатурный драйвер интерпретирует скан – код и преобразует его в определяемый Windows код виртуальной клавиши (virtual - key code), не зависящий от типа устройства и идентифицирующий функциональный смысл клавиши. После этого преобразования скан - кода драйвер создает сообщение, в которое включается: скан – код, виртуальный код и другая информация о нажатии клавиши, и помещает его в очередь системных сообщений. Windows выбирает сообщение из этой очереди и посылает его в очередь сообщений соответствующего потока (thread). В конце концов цикл выборки сообщений данного потока передает его соответствующей оконной процедуре для обработки. Модель вызова с клавиатуры в системе Windows представлена на рис. 3.1.

Рисунок убран из работы и доступен только в оригинальном файле.

Рис. 3.1 Схема генерации и движения сообщений Windows.

Рассмотренная модель выработки и прохождения сообщений поможет вам понять структуру, принятую во всех Windows – приложениях. Последние два блока в рассмотренной схеме определяют особенности строения любого Windows – приложения. Простейшее приложение состоит как минимум из двух функций:

- функция WinMain (имя зарезервировано), которая содержит цикл выборки сообщений и выполняется первой в любом приложении;

- оконная процедура, которую вызывает система, направляя ей соответствующие сообщения.

Имя оконной процедуры выбирается произвольно. Система Windows регистрирует это имя, связывая его с вашим приложением. Также безусловно нужно отметить, что хотя в приложениях на основе MFC трудно увидеть функцию WinMain или оконную процедуру, они там присутствуют, но скрыты от программиста разработчиками среды Visual Studio.

Главное окно приложения.

На рис. 3.2 приведено главное окно приложения. Через набор управляющих элементов производится управление основной программой.

Элементы управления:

-  Кнопка “Загрузить файл” – реализует загрузку оцифрованного и упакованного файла ЭКГ диаграммы (рис. 2), хранящегося на диске и отображает распакованные данные в окне просмотра (рис. 3).

-  Кнопка “Выход” – выйти из приложения.

-  Комбинированное поле фильтров – Выбор фильтра для последующего отображения в окне просмотра.

-  Флажок переключатель ”Фильтр пробка” – установка режима фильтрации сетевой наводки (игнорирует выбор фильтра в комбинированном поле).

-  Флажок переключатель “Дифференциатор” – устанавливает режим определения подачи импульсов дефибриляции.

-  Комбинированное поле отведений – Выбор номера отведения для отображения в окне просмотра.

-  Кнопка “применить” – устанавливает режим отображения отфильтрованного сигнала в окне просмотра (работает после загрузки файла).

Рисунок убран из работы и доступен только в оригинальном файле.

Рис. 3.2 Главное окно приложения.

Загрузка файла.

Прежде чем на экране появится второе окно с данными баз ЭКГ, в программе необходимо загрузить один из файлов *.@8. В функции, реагирующей на нажатие кнопки “Загрузить файл” используется стандартный диалог выбора файла для загрузки, далее выбранный файл передается в функцию, выделяющую массивы значений всех двенадцати отведений. После этого здесь же конструируется окно просмотра с неинициализированной фильтрованной ЭКГ.

void CNewvisualDlg::OnLoadFile()

{

//конструктор файлового диалога

CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"Экг диаграммы(*.@8)|*.@8||");

//сделать модальным и запомнить состояние

int response = dlg. DoModal();

if(response = IDOK)

{

CString fname=dlg. GetFileName();

if(fname=="") goto end;

HANDLE InputFile = CreateFile(fname, GENERIC_READ, FILE_SHARE_READ,

0,OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN,0);

//распаковать и выделить 12 отведений

ReadK12(InputFile);

//создать окно просмотра

m_dlgPaint. Create(IDD_VIEW_GRAPH, this);

m_dlgPaint. SetWindowPos(&wndTop,200,0,m_dlgPaint. right*0.8,

m_dlgPaint. left-100,SWP_SHOWWINDOW);m_dlgPaint. ShowWindow(SW_SHOW);//показать окно

m_dlgPaint. Counter = 0;

SetTimer(ID_SHOW_TIMER,2,NULL);

memcpy(m_dlgPaint. StartOtv, StartOtv[0],16000);

Flag = true;

UpdateData();

m_dlgPaint. Invalidate();

}

end:

;;

}

Дальше более интересно было бы рассмотреть алгоритм выделения отведений из файлов баз ЭКГ. У файлов *.@8 первые 53 байта содержат заголовочную информацию для параметров ЭКГ(время снятия ЭКГ, тип ЭКГ, частота сигнала и т. д.). Взятие дальнейшей информации идет в зависимости от типа ЭКГ, если ЭКГ сжата, то работает алгоритм сжатия, если не сжата, то данные берутся элементарным способом.

Окно просмотра ЭКГ диаграмм.

Окно просмотрареализует отображение ЭКГ диаграмм в режиме

прокрутки, в соответствии с реальным временем снятия ЭКГ сигнала (рис 2).

Режим прокрутки реализуется при помощи установки таймера функцией SetTimer(ID_SHOW_TIMER,2,NULL), где 2 – время в миллисекундах посыла сообщения от таймера к системе. Поскольку частота съема данных ЭКГ равна 500 Гц. , то здесь прокрутка реализована со скоростью отрисовки в один пиксел на каждый посыл сообщения от таймера. Алгоритм работы таймера будет рассмотрен ниже.

компьютерный программный импульс дефибриляция

Рисунок убран из работы и доступен только в оригинальном файле.

Рис.3.3 Окно просмотра ЭКГ диаграмм (Неотфильтрованный и отфильтрованный сигнал)

В данном окне используется два режима работы; режим показа сигнала из файла загрузки, режим показа как сигнала из файла загрузки, так и отфильтрованного сигнала, в соответствии с установками управляющих элементов. Для вывода данных ЭКГ на экран была написана динамически подключаемая графическая библиотека Graph. dll, которая может использоваться в других приложениях. Созданный динамический модуль система интегрирует в пространство другого(клиентского) процесса, загрузив его по определенному базовому адресу. Мы воспользуемся преимуществом, которое предоставляет библиотека MFC, расширяющая WIN32 – поддержку DLL. DLL – расширение способно экспортировать не только отдельные функции, но и целые классы C++. Приложение, использующее DLL(клиентское приложение), может создавать объекты импортируемого класса, а так же создавать производные классы на основе класса, реализованного в DLL. Обычные DLL могут экспортировать функции. DLL-расширения могут экспортировать как функции, так и классы.

DLL – расширение динамически связывается с кодом DLL – версии библиотеки MFC и требует, чтобы клиентская программа тоже компоновалась с ним динамически. Обычная DLL может связываться с библиотекой MFC как динамически, так и статически. Но это не снижает привлекательности DLL – расширений, так как при необходимости можно поставить заказчику необходимые системные DLL, такие как Mfc42d. dll, Mfc042.dll и другие.

Исходный код определения экспортируемого класса приведен ниже.

class AFX_EXT_CLASS CGraph

{

double dXLeft;// Левый верхний угол

double dYTop;

double dFracX;// Ширина и высота

double dFracY;

double dMinX, dMaxX;// Min-Max значения по горизонтали

double dMinY, dMaxY;// Min-Max значения по вертикали

double dSpanX;// Размах графика по горизонтали

double dSpanY;// Размах графика по вертикали

double dStepX, dStartX;// Шаг и начальное значение

double dStepY, dStartY;

UINT nPoints;// Количество точек

// Целочисленные аналоги

UINT nStepsX, nStepX, MinX, MaxX;

UINT nStepsY, nStepY, MinY, MaxY;

UINT *X, *Y;// Координаты точек на экране

int iPowerX, iPowerY;// Экспоненты

CRect rect;// Прямоугольник вывода

// Три типа шрифтов: для осей, заголовка и экспонент

CFont TextFont, TitleFont, PowerFont;

public:

void GetRect(int&,int&,int&,int&); //получить размер прямоугольника отображения

Cgraph (CRect, UINT, double, double ,double, double);//конструктор

// Функции нормировки исходных массивов

void ScaleX(TValues&);

void ScaleY(TValues&);

// Масштабирование массива

void Scale (double, int&, double&);

// Изображение координатной сетки

void DrawGrid (CDC*, CString&, CString&, CString&, TValues&, TValues&);

// Изображение графика зависимости

void DrawFunc (CDC*,BYTE *);

virtual ~CGraph ();

};

В конструкторе мы инициализируем область вывода графика, количество отображаемых точек и коэффициенты вывода, относительно общей области. Далее в основном приложении для вывода графики нам понадобятся функции DrawGrid и DrawFunc. Масштабирование входных координат точек графика, задаваемых числами с плавающей точкой двойной точности, производится в функции Scale, где значения по осям Х и Y масштабируются отдельно через вызовы функций ScaleX и ScaleY. Функция DrawGrid выводит на экран координатную сетку, а функция DrawFunc рисует график.

Класс Filters.

Класс Filters реализует хранение и расчет данных для фильтрации ЭКГ.

class Filters

{

public:

char Name[10];// название фильтра

double * Coeficients;//коэффициенты фильтра с плавающей точкой

short * QuantizCoeficients;//целочисленные коэффициенты

BYTE NumCoef;// число коэфициентов

//конструктор

Filters(char * FilterName, BYTE NumCoeficientsdouble, double * Coef = NULL, double * Quant = NULL);

// функция расчета КИХ фильтров

void GetType_1(short * InBuffer, short * OutBuffer);

// функция рассчета БИХ фильтров

void GetType_2(short * Inbuffer, short * Outbuffer);

// функция рассчета фильтров с приведением

// к целочисленным коэфициентам

void GetQType(short * Inbuffer, short * Outbuffer, BOOL Type, BYTE PreCoef = 0);

~Filters();// деструктор

};

В конструкторе происходит инициализация названия фильтра, числа коэффициентов, самих коэффициентов в зависимости от типа фильтра.

Предварительная обработка сигнала в электрокардиографии заключается, в основном, в цифровой фильтрации сигнала и его усреднении. Цель фильтрации – подавление неблагоприятных факторов, таких как шумы, выделение определенных характеристик сигнала и его коррекция. Наиболее простой в реализации и достаточно эффективной является линейная инвариантная к сдвигу фильтрация. С точки зрения реализации (впрочем, это является общепринятым в теории ЦОС ) разумно разделить линейные цифровые фильтры на 2 типа: фильтры с конечной импульсной характеристикой (КИХ) и фильтры с бесконечной импульсной характеристикой (БИХ). По-другому они называются нерекурсивный и рекурсивный соответственно.

Фильтры с конечным импульсным откликом описываются следующим уравнением:

Рисунок убран из работы и доступен только в оригинальном файле.

Соответственно, передаточная функция таких фильтров выглядит следующим образом:

Рисунок убран из работы и доступен только в оригинальном файле.

Передаточная функция не имеет полюсов, следовательно, фильтр всегда устойчив, более того, если ряд коэффициентов симметричен, то фильтр имеет линейную ФЧХ. КИХ - фильтры обычно реализуются в такой же форме, как и определяются, т. е. в виде суммы.

Фильтры с бесконечным импульсным откликом описываются следующим выражением:

Рисунок убран из работы и доступен только в оригинальном файле.

Передаточная функция имеет вид:

Рисунок убран из работы и доступен только в оригинальном файле.

Существует достаточно много типов БИХ фильтров, классифицируемых прежде всего по форме передаточной характеристики: Баттерворта, Чебышева, эллиптический.

Цифровые фильтры обычно проектируются в соответствии с определенными требованиями, предъявляемыми обычно к передаточной функции, которая, естественно, определяется конкретной задачей, для которой разрабатываемый фильтр и предназначен. Идеальные фильтры не реализуемы, поэтому приходится говорить лишь о соответствии фильтра параметрам в рамках допустимой ошибки. Для расчета цифровых фильтров существует несколько методик, требующих различных вычислительных возможностей. В электрокардиографии обычно применяют фильтры какого – либо одного типа и для определенной частоты среза и частоты дискретизации. Поэтому расчет фильтра в реальном времени проводить обычно не требуется, а коэффициенты рассчитываются при помощи какого – либо пакета, позволяющего сделать это визуально и интерактивно (в данном дипломном проекте расчеты проводились в среде Matlab v.6.0).

Функции КИХ и БИХ фильтрации:

//Функция КИХ фильтрации

void Filters::GetType_1(short * InBuffer, short * OutBuffer)

{

WORD i = 0;

double Temp = 0;

while(i<8000)

{

if(i<NumCoef) OutBuffer[i] = InBuffer[i];

else

{

for(BYTE j = 0;j<NumCoef;j++)

Temp += InBuffer[i-j]*Coeficients[j];

OutBuffer[i] = (short)Temp;

}

Temp = 0.0;

i++;

}

}

//Функция БИХ фильтрации

void Filters::GetType_2(short * Inbuffer, short * Outbuffer)

{

WORD i = 0;

double Temp = 0;

while(i&l

Здесь опубликована для ознакомления часть дипломной работы "Использование ЭВМ в кардиологии". Эта работа найдена в открытых источниках Интернет. А это значит, что если попытаться её защитить, то она 100% не пройдёт проверку российских ВУЗов на плагиат и её не примет ваш руководитель дипломной работы!
Если у вас нет возможности самостоятельно написать дипломную - закажите её написание опытному автору»


Просмотров: 569

Другие дипломные работы по специальности "Информатика":

Web-сайт для учителей информатики: анализ существующих и разработка нового приложения

Смотреть работу >>

Поиск фотооборудования

Смотреть работу >>

Автоматизированная система складского учета в ЗАО "Белгородский бройлер"

Смотреть работу >>

Автоматизированная система учета договоров страхования предпринимательских рисков

Смотреть работу >>

Создание информационно-справочной системы "Методический кабинет"

Смотреть работу >>