В настоящее время развитие компьютерной индустрии затронуло разработки и исследования практически во всех отраслях современной науки. Компьютеры из года в год становятся неотъемлемой частью и обыденной жизни населения. Постепенное наращивание качества, надежности и производимости компьютерного оборудования заставляет разработчиков электронных приборов все чаще и чаще использовать в своих нововведениях микропроцессоры ведущих фирм производителей. Естественно такая ситуация не могла не затронуть медицинскую промышленность. Во всех областях медицины исследования на высоком научном уровне немыслимы без применения современных средств программного обеспечения. Сейчас ЭВМ применяют практически на всех этапах медицинского обследования: в профилактике, диагностике и терапии заболеваний.
Основной задачей современной медицины является предупреждение заболеваний на ранних стадиях развития. Для этого разрабатывается различная диагностическая аппаратура, которая по сути своей является информационно-измерительной системой.
Заболевания сердца – одна из наиболее важных проблем медицины сегодняшнего дня. Современные исследования сердца не могут обойтись без компьютерной техники. Выделяют две основные области исследований, в которых используются компьютеры: моделирование сердца человека и обработка данных кардиологических исследований.
Первая – моделирование сердца человека – осуществляется с целью более глубокого проникновения в сущность функционирования и строения этого органа. Очевидно, что в отсутствие компьютерного обеспечения проблема моделирования едва ли может быть решена.
Вторая область – анализ данных кардиологических исследований. Цель таких работ – постановка диагноза, составление прогноза и лечение. В некоторых случаях обработка кардиологических параметров возможна и вручную, тем не менее, автоматический расчет их с помощью компьютера дает большие преимущества и требует меньше усилий. Наиболее важные преимущества автоматической обработки данных состоят в следующем:
- обработка данных осуществляется по одной схеме,
- результаты представляются в стандартном виде,
- можно использовать стандартную терминологию.
Некоторые же показатели просто не могут быть получены путем ручной обработки, и в этих случаях преимущества компьютера совершенно очевидны.
Различные типы данных, получаемые наиболее распространенными современными диагностическими методами в кардиологии представлены на рисунке 1. При обработке таких данных компьютеры выполняют следующие задачи: ввод данных, хранение, поиск, переработка и выдача информации. Переработка информации в свою очередь подразделяется на следующие подзадачи: фильтрация, распознавание образов, измерение параметров и интерпретация данных.
Рис. 1. Категории объективных кардиологических данных.
Актуальная проблема сегодняшнего дня – надежность и доступностькардиографических аппаратов. Со временем микроконтроллеры ведущих фирм производителей стали дешевле и соответственно более доступны для внедрения в портативные аппараты диагностики сердца. Здесь все большая и большая нагрузка ложится на программное обеспечение, постепенно вытесняя из приборов ранее аппаратно реализуемые функции.
Подбор методов фильтрации и тестирование программных фильтров, разработанные в рамках данного дипломного проекта, удобно проводить отдельно, используя вспомогательные программы разработанные на персональной ЭВМ.
Наиболее распространенным и в полной мере функциональным языком программирования на сегодняшний момент является язык С++, объединяющий в себе возможности стандартизированного языка С и объектно-ориентированного подхода.
В последнее время широкое распространение получила объектно-ориентированная модель разработки программного обеспечения. Основная идея программирования при таком подходе состоит в разработке классов приложения для определения новых типов, манипулировать которыми так же просто, как и встроенными. Создавая новые типы для описания предметной области, С++ помогает программисту писать более легкие для понимания приложения. Классы позволяют отделить детали, касающиеся реализации нового типа, от определения интерфейса и операций, предоставляемых пользователю. При этом уделяется меньшее внимание мелочам, делающим программирование таким утомительным занятием. Значимые для прикладной программы типы можно реализовывать один раз, после чего использовать повторно [9]. Средства, обеспечивающие инкапсуляцию данных и функций, необходимых для реализации типа, помогают значительно упростить последующее сопровождение и развитие прикладной программы. Существует механизм, именуемый наследованием, который вводит возможность включать во вновь разрабатываемый класс общие свойства присущие ранее разработанному классу предку. Например, в трехмерной компьютерной графике классы OrthographicCamera (ортогональная камера) и PerspectiveCamera(перспективная камера) обычно являются производными от базового Camera. Каждый производный от него класс лишь реализует отличия от общей камеры, предоставляя альтернативный код для унаследования функций членов либо вводя альтернативные члены.
Таким образом, используя программные модули, разработанные ранее и обладающие нужным набором функций разработчик может добиться максимальной эффективности работы своих модулей в совокупности с ранее разработанными, как правило поставляемыми вместе с интегрированной средой разработки.
Самой распространенной и наиболее емкой средой разработки сегодня является MicrosoftVisualC++. В наши дни VisualC++ лидирует среди продуктов для программирования в среде Windows. VisualC++ - это инструмент для программирования в среде Widnows, обладающий поистине фантастическими возможностями. Более того, многие разработчики считают VisualC++ самой мощной из всех программ такого класса. На самом деле VisualC++ представляет собой целый набор из множества инструментов, собранных в одном динамическом пакете, готовом к немедленной работе. Сначала программы для Windows приходилось писать на языке С, а не на С++, и получались они большими и сложными. Даже вывод на экран пустого окна требовал примерно пяти страниц сложного невразумительного кода. Язык С++ позволяет хранить большую часть программного кода внутри самостоятельных объектов, а это сокращает объем больших программ. Помимо этого, фирма Microsoft разработала библиотеку MicrosoftFoundationClasses. 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. Объектно-ориентированная декомпозиция.
Объектный подход
В основе объектно-ориентированного проектирования (ООП) лежит объектный подход. Основными принципами являются: абстрагирование, ограничение доступа, модульность, иерархичность, типизация, параллелизм и устойчивость. Эти принципы не новы, однако, именно в объектном подходе они объединены для решения общей задачи.
Объектно-ориентированное проектирование принципиально отличается от традиционных подходов структурного проектирования, так как подразумевает другой подход к процессу декомпозиции, а получаемый программный продукт по архитектуре в значительной степени выходит за рамки традиционных представлений.
Начиная с FORTRANII и позднее, для решения задач программирования на более высоком уровне стали возникать новые существенные механизмы структурирования. Это привело к реализации механизма раздельной компиляции модулей, которые были чем-то большим, чем случайный набор данных и подпрограмм.
Рис. 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<8000)
{
if(i<(NumCoef/2 - 1)) Outbuffer[i] = Inbuffer[i];
else
{
for(BYTE j = 0;j<(NumCoef/2);j++)
Temp += (Inbuffer[i-j]*Coeficients[j]
- Outbuffer[i-j]*Coeficients[j+NumCoef/2]);
Outbuffer[i] = (short)Temp;
}
Temp = 0;
i++;
}
}
Если тип фильтра – БИХ, тогда коэффициенты обратной связи ак в конструкторе нужно передавать сразу за коэффициентами bm.
В связи с тем, что последующая реализация тестируемых фильтров будет производиться на микроконтроллере Siemence без реализации арифметики с плавающей точкой, необходимо реализовать фильтрацию с целочисленными коэффициентами. Реализация целочисленных коэффициентов производится в функции GetQType. В конструктор передаются коэффициенты с плавающей точкой, рассчитанные в среде Matlab при условиях квантизации, которые при перемножении на число два в пятнадцатой степени дают целочисленные коэффициенты. Соответственно после фильтрации все точки ЭКГ масштабируются к исходным значениям.
//Функция фильтрации с целочисленными коэффициентами
void Filters::GetQType(short * Inbuffer,short * Outbuffer,BOOL Type,BYTE PreCoef)
{
WORD i = 0;
int Temp = 0;
while(i<8000)
{
if(i<(NumCoef/2 - 1)) Outbuffer[i] = Inbuffer[i];
else
{
for(BYTE j = 0;j<(NumCoef/2);j++)
if(Type == FALSE)
Temp += (int)(Inbuffer[i-j]*(short)QuantizCoeficients[j]);
else
Temp += (Inbuffer[i-j]*QuantizCoeficients[j]
-Outbuffer[i-j]*QuantizCoeficients[j+NumCoef/2]);
if(Temp>0)
Outbuffer[i] = (short)( Temp >> (15+PreCoef) );
else
Outbuffer[i] = -(short)( (-Temp) >> (15+PreCoef) );
}
Temp = 0;
i++;
}
}
Первый параметр функции – входной массив графика, второй параметр – массив в который будут передаваться отфильтрованные значения, третий параметр – тип фильтра (БИХ или КИХ), четвертый параметр – коэффициент масштабирования отфильтрованных значений выходного массива.
Реализация таймера.
При успешной загрузке данных из файла устанавливается системный таймер с временем срабатывания (в миллисекундах), равным 2. Таймеры являются лимитированным глобальным ресурсом системы, поэтому следует проверять код, возвращаемый функцией SetTimer. После установки таймера каждые 2 миллисекунды система будет посылать в очередь сообщений нашего приложения сообщение WM_TIMER. Значение третьего параметра NULL говорит о том, что сообщение будет обрабатываться в оконном классе, а не в специально созданной глобальной функции, адрес которой следовало бы передать третьим параметром. При возникновении прерывания от таймера управление будет передано в функцию OnTimer.
void CNewvisualDlg::OnTimer(UINT nIDEvent)
{
if(Flag == true)
{
if(m_dlgPaint.NPoints == 500)
m_dlgPaint.NPoints = (m_dlgPaint.x2 - m_dlgPaint.x1);
else
{
m_dlgPaint.NPoints+=(m_dlgPaint.x2 - m_dlgPaint.x1);
m_dlgPaint.PointCounter+=(m_dlgPaint.x2 - m_dlgPaint.x1);
}
m_dlgPaint.rect.left = m_dlgPaint.x1-5;
m_dlgPaint.rect.right = m_dlgPaint.x1;
m_dlgPaint.rect.top = m_dlgPaint.y1;
m_dlgPaint.rect.bottom = m_dlgPaint.y2+10;
CRect rect2;rect2.CopyRect(&m_dlgPaint.rect);
rect2.SetRect(0,0,(m_dlgPaint.rect.right-1),
m_dlgPaint.rect.bottom);
m_dlgPaint.InvalidateRect(&rect2);
}
if(m_dlgPaint.rect.right >= m_dlgPaint.x2) Flag = true;
if(m_dlgPaint.Counter < m_dlgPaint.NPoints)
{
m_dlgPaint.Counter+=5;
m_dlgPaint.rect.left+=5;
m_dlgPaint.rect.right+=5;
Flag=false;
}
else Flag = true;
if(m_dlgPaint.NPoints>=8000)
{
Flag = true;
m_dlgPaint.NPoints= 500;
m_dlgPaint.Counter = 0;
m_dlgPaint.PointCounter = 0;
}
m_dlgPaint.InvalidateRect(&m_dlgPaint.rect);
CDialog::OnTimer(nIDEvent);
}
Реализация
QRS
детектора
.
Интеграция в проект QRS детектора была осуществлена при помощи руководителя практики, заголовочный файл и файл реализации были подключены к проекту. Графическая реализация была целиком самостоятельной работой. Для отображения заметок определения QRS, в функцию, рисующую график добавляется параметр (массив из 8000 элементов)
//код заполнения массива для
//последующего отображения в окне просмотра
if(m_dlgPaint.StartOtv[0] == 0) return;
INT disp,amp;
memset(m_dlgPaint.DifFlag,0,8000);
for(i=0;i<8000;i++)
if(CalcPoint(m_dlgPaint.StartOtvFilt[i],&disp,&))
{
m_dlgPaint.DifFlag[i-disp] = 1;
}
Глава 4.
Расчет затрат на создание программного продукта
Цель составления любых программ состоит в получении определенных результатов в процессе эксплуатации и оценивается эффективностью программного средства. Поводом для создания рассматриваемого пакета программ послужила необходимость обеспечения входного и межоперационного контроля над физическими параметрами полупроводниковых микросхем, а также повышения точности этого контроля на этапе исследования п/п пластины. Уточним применяемое далее понятие эффективности процесса разработки программного средства. Выбор адекватных показателей эффективности программных средств зависит от их назначения, области применения, а также от ряда характеристик программ, проявляющихся при их применении. Поэтому, для выбора технических решений могут использоваться различные критерии. Целесообразно подразумевать под эффективностью процесса разработки минимум затрат на разработку программ при заданной экономической эффективности применения и качества программных средств. Минимизация затрат на обеспечение жизненного цикла комплекта программ (далее КП) в некоторой степени эквивалентны максимизации разности эффекта и затрат, если предположить, что экономический эффект от применения программ зафиксирован и стабилен. Затраты в жизненном цикле ПО определяются не только этапом разработки, но и этапами эксплуатации и сопровождения, причем затраты на этих этапах могут значительно превосходить затраты на этапе проектирования и разработки и характеризуются своими особыми закономерностями. Обычно, критерии качества изделий используются в совокупности, с разных сторон отражающей основные характеристики функционирования объекта. Тем не менее, во многих случаях доминирует экономический эффект, который наиболее прост, и обобщенно принято описывать суммарным доходом Э от использования изделия в течение его жизненного цикла продолжительностью Тж
. В первом приближении это разность между полной идеальной экономической эффективностью программы Эо
и суммарными потерями и затратами K, снижающими предельный доход за весь жизненный цикл:
Э = Эо - K
В качестве идеальной эффективности Эо рассматривается совокупный доход, который можно получить от использования программ за весь жизненный цикл, если бы они не требовали затрат на создание, производство и эксплуатацию, а также функционировали бы на реализующих ЭВМ без потерь и искажений.
Предполагается, что при любых затратах на разработку всегда достигается заданная идеальная эффективность последующего применения ПО в процессе его эксплуатации и необходимые показатели качества функционирования. Это предположение позволяет в дальнейшем исключить из анализа эффективность применения программных средств Эо и сосредоточить внимание на эффективности процесса их разработки. Дополнительным основанием такого допущения может служить то, что многие виды программ невозможно или очень трудно характеризовать доходом от их функционирования, что в нашем случае очень актуально. Тогда исследования эффективности процесса создания ПО можно проводить, минимизируя затраты K в предположении, что обеспечены заданные функциональные характеристики программ.
Снижение эффективности Э на величину K происходит прежде всего вследствие затрат на разработку, производство, сопровождение и эксплуатацию программ, а так же вследствие различных сбоев программ и оборудования. В соответствии с этапами жизненного цикла ПО основные затраты K, снижающие идеальную эффективность за цикл жизни Тж
, можно представить следующими составляющими:
затраты на создание КП и обеспечение решения заданных задач (в том числе на технологическое обеспечение, аппаратную оснащенность разработки) - Kр
;
затраты на эксплуатацию программных и аппаратных средств ЭВМ, реализующих КП - Sэ
;
затраты на сопровождение КП, включающие затраты на хранение и контроль его состояния, проведение модификации, исправление ошибок и т.д. - Kс
;
накладные расходы Kн
.
В результате совокупную реальную эффективность функционирования ПО за весь жизненный цикл длительностью Тж можно представить в виде:
Э = Эо
- Kр
- Sэ
- Kс
- Kн
Составляющие затрат на разработку программ
K
р
Разработка программ является областью с малой материало- и энергоемкостью, и основные затраты связаны с непосредственным или овеществленным трудом специалистов различных категорий.
Наибольшее значение в составе Kр
при разработке комплекса программ (КП) имеют следующие составляющие затрат:
на непосредственное проектирование, программирование, отладку и испытания программ в соответствии с требованиями пользователя или заказчика - K1р
;
на изготовление опытного образца КП как продукции производственно-технического назначения - K2р
;
на разработку, подготовку и применение технологии программных средств автоматизации разработки программ - K3р
;
на технологические и реализующие ЭВМ, используемые для автоматизации разработки программ - K4р
;
на подготовку и повышение квалификации специалистов-разработчиков - K5р
.
Первые две составляющие K1р
и K2р
являются непосредственными затратами на создание программных средств. Составляющие K3р
и K4р
можно рассматривать как затраты, обеспечивающие оснащенность процесса создания КП. Затраты на подготовку и повышение квалификации наиболее трудно формализовать и учитывать в конкретной разработке программных средств. В данном случае эта составляющая не учитывается.
Затраты на непосредственную разработку КП
Затраты на непосредственную разработку комплекса программ K1р
являются важнейшей составляющей в жизненном цикле КП. Наибольшее влияние на них оказывает объем КП. Затраты на разработку K1р
и объем программ Пк связаны через показатель интегральной средней производительности труда разработчиков Р. Для учета влияния на K1р
различных факторов удобно пользоваться коэффициентами изменения трудоемкости (КИТ) - Сij
, учитывающими зависимость i-ой составляющей совокупных затрат от j-го фактора. Непосредственные затраты на разработку можно представить как частное от деления объема КП и производительность труда, корректируемое произведением коэффициентов изменения трудоемкости:
Выделим четыре основных группы факторов, влияющих на затраты K1р
при непосредственной разработке программ:
факторы, отражающие особенности создаваемого комплекса программ как объекта разработки, и требования к его общим характеристикам;
факторы, характеризующие технологическую и программную оснащенность средствами автоматизации процесса разработки программ;
факторы, отражающие оснащенность процесса создания КП аппаратурными средствами, на которых базируются системы автоматизации разработки;
факторы, определяющие оснащенность процесса разработки программ и его обеспечение квалифицированными специалистами.Для каждого фактора может быть выделен параметр, наиболее полно отражающий его содержание численными значениями. Для большинства факторов произведены оценки диапазона возможного изменения относительных затрат на разработку одной команды в КП при варьировании соответствующего параметра в указанном диапазоне. Эти изменения затрат характеризуются коэффициентами Сij
изменения усредненной трудоемкости разработки строки текста программы за весь цикл создания КП при варьировании j-го фактора i-ой группы. Приводятся их средние значения.
Факторы КП как объекта проектирования, влияющие на непосредственные затраты при разработке программ.
Эта группа факторов отличается наибольшим влиянием на затраты и производительность труда.
Наиболее активно в качестве показателя сложности программ используется ее объем, выраженный числом операторов на ассемблере или строк на языке программирования высокого уровня. Объем программ является одной из наиболее достоверно измеряемых характеристик КП. Логично предположить, что по мере увеличения объема КП возрастает относительная трудоемкость разработки каждой команды в программе. Такая зависимость
может быть описана логарифмической функцией:(источник формул см. используемую литературу [1] )
Надежность функционирования КП является наиболее важным фактором, отражающим качество программных средств.
В качестве параметров, характеризующих надежность системы, наиболее широко используется наработка на отказ Тн
и коэффициент готовности Кг
. Оба показателя тесно связаны, что позволяет ограничить внимание на первом из них. Изучение математических моделей процесса выявления ошибок в программах привело к тому, что одной из наиболее достоверных и простых является экспоненциальная зависимость числа оставшихся ошибок от времени ее тестирования. Эти соображения позволяют аппроксимировать средние значения С13
при повышении требований к надежности КП логарифмической зависимостью:
Ограничение ресурсов производительности и оперативной памяти реализующей ЭВМ: при использовании создаваемым КП производительности и памяти реальной ЭВМ менее чем на 50% можно и не учитывать эти ограничения, однако в нашем случае ресурсы ЭВМ используются практически полностью:
С14
= (1.14 * (1 - р)1/2
)-1
где р - реальная загрузка ЭВМ ( в относительных величинах ).
Длительность предполагаемой эксплуатации КП изменяется от нескольких месяцев до нескольких лет. По экспертным оценкам, увеличение предстоящей длительности эксплуатации КП на порядок от 1 до 10 лет приводит к увеличению КИТ С15
примерно в 1.5-2 раза. Такую зависимость можно описать логарифмической функцией:
где а15
изменяется в диапазоне от 1 до 1.5.
Предполагаемый тираж программ: при переходе от уникального КП к программам , подлежащим тиражированию, затраты заметно возрастают:
Применение современных методов разработки КП.
При создании данного КП использовалась пошаговая разработка компонентов программы. В этом случае интегральная оценка эффективности метода более-менее стабильна и характеризуется повышением производительности труда приблизительно на 30 - 40% (С31
=0.6-0.7).
Уровень автоматизации разработки КП рассматривается, прежде всего, как фактор, влияющий на С1р
и на производительность труда специалистов.
В нашем случае С32
= 1.
Уровень языков программирования КП. Разработка нашей программы на языке С++, обладающем удовлетворяющими нас характеристиками, а также доступность процедур и функций языка высокого уровня в совокупности дали увеличение производительности на 50% (С33
= 0.5).
Модернизация комплекса проводится не с целью продажи, а для собственных нужд завода. То есть данный комплекс существует в единственном экземпляре и не предполагается его тиражировать.
С34
= 1.
Факторы оснащенности процесса разработки КП аппаратурными средствами, влияющими на непосредственные затраты при разработке программ.
При анализе фактора аппаратурной оснащенности процесса разработки программ целесообразно учитывать интегральные характеристики всех вычислительных средств, использующихся при создании данного КП. При разработке данной программы применяется реализующая ЭВМ.
Относительное быстродействие ЭВМ определяет доступный уровень автоматизации разработки программ. Влияние относительного быстродействия на полные затраты можно оценить на уровне 20-30%.(С41
= 0.7 - 0.8).
Относительный объем оперативной памяти может также проявиться как заметный фактор, изменяющий производительность труда разработчика. В нашем случае недостаточный объем памяти вызвал снижение производительности труда на 10-20% (С42
= 1.1-1.2)
Факторы организации процесса разработки КП, влияющие на непосредственные затраты при создании программ.
Индивидуальные особенности специалистов могут приводить к изменению производительности труда во много раз. В среднем технологическую квалификацию можно считать выше среднего (С52
=0.7), тематическую квалификацию - как средняя (С51
=0.8). Программистская квалификация и опыт работы с языками проектирования составил 3 года (С53
= 0.9)
Уровень квалификации заказчика высок, но техническое задание на разработку было сформировано с дальнейшими доработками (С54
=1.2).
Затраты на изготовление опытного образца как продукции производственно-технического назначения.
Затраты на изготовление опытного образца КП как продукции производственно-технического назначения К2р
определяется необходимостью обеспечить отчуждение всего комплекса программ от его непосредственных разработчиков. Для изготовления КП как продукции производственно-технического назначения необходимо:
изготовить и оформить опытный образец КП на носителях данных;
Затраты K2
p
в нашем случае не имеют смысла, поскольку, как уже отмечалось ранее, данный комплекс существует в единственном экземпляре и не предполагается его тиражировать.
Затраты на технологию и программные средства автоматизации разработки КП.
Затраты на технологию и программные средства автоматизации разработки КП K3
p
обычно являются весьма весовыми только при использовании автоматизированных технологий. В нашем случае мы имеем принципиально новую систему, технология разработки которой пока не определена, поэтому затратами на технологию можно пренебречь.
Затраты на ЭВМ, используемые для автоматизации разработки данной программы.
Затраты на ЭВМ, используемые для автоматизации разработки данного КП - К4р
включают капитальные затраты на закупку и установку соответствующих ЭВМ, а также текущие затраты на их эксплуатацию в течение разработки КП.
Поэтому общие затраты на ЭВМ будут выглядеть как:
С4р
= С4р1
= а41
*Тр
.
Где а41
- стоимость машинного времени реализующей ЭВМ.
Расчет затрат на разработку
комплекса
Исходные данные
Наименование характеристики | Количество |
Количество программистов, S | 1 чел. |
Оклад программиста, Sм | 1000 руб./ мес. |
Объем программы, П | 3000 строк |
Стоимость одного часа машинного времени, а41 | 5 руб./ч |
Общее время разработки, Tр | 4 мес. |
Количество машинного времени, затраченного в день, Тдн | 3 ч/день |
Коэффициенты изменения трудоемкости
сложность программы - С11
= lg(3000 * 10-3
)=0.47;
ограничение ресурсов производительности ЭВМ -
С14
= (1.14 * (1 - р)1/2
)-1
= 2.7;
современные методы разработки - С31
= 0.7;
уровень языка программирования - С33
= 0.5;
относительное быстродействие ЭВМ - С41
= 0.8;
относительный объем памяти - С42
= 1.1;
технологическая квалификация - С51
= 0.7;
тематическая квалификация - С52
= 0.8;
программистская квалификация - С53
= 0.9;
квалификация заказчика - С54
= 1.2;
остальные коэффициенты примем равными единице.
Расчет непосредственных затрат на разработку
Пк =3000 (команд);
Производительность P = Пк
/ Тр
= 3000/88=34.1 (команд/день);
Считаем, что в месяце, в среднем, 22 рабочих дня, тогда средняя дневная заработная плата разработчика Sд = 45,45 (руб.);
Произведение коэффициентов
Сij - Пij
Cij
= 0.245;
Также необходимо учитывать расходы, включающие в себя:
заработную плату административно - управленческого персонала с отчислением на социальные нужды;
аренду помещения;
хозяйственные нужды;
приобретение специальной литературы.
Считаем, что
накладные расходы составили kнр
= 90% от непосредственных затрат;
коэффициент дополнительной зарплаты kдоп
= 29%;
коэффициент сбора на социальные нужды kсн
= 41%.
Теперь можем рассчитать непосредственные затраты на разработку - К1р
:
K1р
= Пк * Пij
Cij
* Sд * S * 1.5 / P = 3000 * 0.245 * 45,45* 1 * 1.5 /34.1 = 1474 (рублей).
Затратами на создание опытного образца являются затраты на разработку, т.е. программа сама по себе и есть опытный образец. Затратами на технологию и программные средства мы пренебрегаем.
Затраты на ЭВМ
Тр
= 88 (дней);
Рассчитаем затраты на ЭВМ:
К4р
= а41
*Тр
* Tдн
= 5 * 88 *3 = 1320 (руб)
Все результаты сведем в таблицу.
Затраты на разработку КП
Составляющие | Затраты (руб.) | % от затрат на разработку |
K1р | 1474 | 53% |
K4р | 1320 | 47% |
Таким образом затраты на разработку системы моделирования макроэкономики составляют Kр
= 2794 руб.
Мы рассчитали суммарные затраты на разработку данного Кп и увидели, что они составили примерно 2794 тыс. рублей. Большие затраты были на эксплуатацию реализующей ЭВМ. Эти затраты были рассчитаны с учетом существующего нестабильного положения цен на рынке электронных товаров.
Снизить непосредственные затраты возможно по мере повышения квалификации в данном вопросе, а также более эффективным использованием рабочего времени, но для этого пока не созданы соответствующие условия, связанные с оборудованием рабочего места.
Глава 5. Производственно
-
экологическая безопасность при разработке программных фильтров
На современном этапе создание новой техники ставит задачу не только облегчить труд человека, но и привести к изменению его роли и места в производственном процессе. В условиях технического прогресса увеличивается количество объектов, которыми он должен управлять, возрастают скорости управляемых им процессов, широкое применение получает дистанционное управление. В связи с этим возрастает роль охраны труда, призванной не только облегчить труд человека, но и сделать условия труда комфортными.
При использовании человеком даже самой передовой технологии у него могут возникнуть соответствующие профессиональные заболевания, если работая, он будет пренебрегать даже элементарными правилами техники безопасности.
Типичными ощущениями, которые испытывают к концу рабочего дня чрезмерно увлеченные и беспечные пользователи персональных компьютеров, являются: головная боль, резь в глазах, тянущие боли в мышцах шеи, рук и спины, зуд кожи на лице и т.д. Испытываемые день за днем, они могут привести к мигреням, частичной потере зрения, сколиозу, кожным воспалениям и другим нежелательным явлениям. Все это не случайно.
Вероятнее всего, человеку уже никогда не удастся полностью избежать пагубного влияния передовых технологий, но, как и во многих других случаях, сами пользователи персональных компьютеров, по крайней мере, могут свести их к минимуму. Большинство проблем решаются сами собой при правильной организации рабочего места, соблюдении правил техники безопасности и разумном распределении рабочего времени.
В рамках данного дипломного проекта при написании тестовой программы нужно уделить большое внимание производственному освещению, оздоровлению воздушной среды, защите от шума, электробезопасности, пожарной безопасности и др.Все это немаловажные факторы, пренебрегая которыми можно заработать ряд вышеописанных болезней.
Целесообразно будет рассмотреть в этом разделе вопросы, связанные с работоспособностью человека при работе за ПЭВМ, рассчитать уровень утомляемости работы программиста и провести обзор основных мероприятий, направленных на уменьшение утомляемости при работе за компьютером.
Зависимость между показателями утомления и условиями труда
В настоящее время фактически общепризнанным является положение о том, что условия труда влияют на показатели функционального состояния организма человека и его работоспособность.
В процессе работы на человека воздействует комплекс факторов (элементов) условий труда, включая группы санитарно-гигиенических и психофизиологических.
Можно установить количественную зависимость между показателем утомления и условиями труда. Для этой цели используются критерии отнесения факторов в группы условий труда, разработанные НИИ труда. Каждый фактор (элемент) условий труда оценивается в 1-6 баллов. Баллы, полученные по всем критериям, суммируются, что позволяет получать показатель условий труда. Чем выше показатель условий труда, тем они более неблагоприятны. Наиболее высокий (а значит и наиболее неблагоприятный) показатель равен 72 баллам.
Эта методика имеет ряд упрощений, при которых допускается одинаковая значимость всех критериев. Кроме того, санитарно-гигиенические условия считаются нормальными, если их значение не превышает предельно-допустимых концентраций и уровней (ПДК и ПДУ), что также является определенным упрощением, так как, несомненно, условия, приближающиеся к уровню ПДК и ПДУ, нельзя считать оптимальными. Несмотря на все эти упрощения, выявлена весьма высокая корреляция (r = 0,83) между показателями утомления и условий труда. На основании экспериментальных материалов получено уравнение:
(6.1) | ||
где | Y - | показатель утомления, |
X - | показатель условий труда. |
Высокая корреляция между показателями утомления и условий труда имеет большое практическое значение. Речь идет о том, что для ориентировочных расчетов, проводимых в условиях производства, показатель утомления можно устанавливать по показателю условий труда, определение которого не связано с трудоемкими физиологическими исследованиями. Ниже приводится расчет уровня утомляемости для программистов, работающих за экраном дисплея ПЭВМ.
Таблица 5.1. Расчет уровня утомляемости
Оценка психофизиологических и санитарно-гигиенических условий труда | Значение элемента | Количество баллов |
А. Психофизиологические факторы. | ||
1. Физическая динамическая нагрузка | Незначительная | 1 |
2. Физическая статическая нагрузка | Незначительная | 1 |
3. Поза и передвижение в пространстве | Поза несвободная (“сидя”). Корпус и конечности в удобном положении. | 3 |
4. Напряжение зрения, категория зрительных работ | Высокой точности | 5 |
5. Длительность сосредоточенного наблюдения, в % от времени смены | Более 90% | 5 |
6. Темп, число движений в час | Мелкие движения пальцев, кистей рук (работа на клавиатуре) | 1 |
7. Продолжительность повторяющихся операций (монотонность) | Монотонность отсутствует | 1 |
Б. Санитарно-гигиенические факторы | ||
8. Температура на рабочем месте, 0 С | 20 0 С | 1 |
9. Токсические вещества | Ниже ПДК | 1 |
10. Промышленная пыль | Ниже ПДК | 1 |
1. Промышленный шум | Ниже ПДК | 1 |
12. Инфракрасное (тепловое) излучение | Незначительное | 1 |
Общая сумма баллов: X = 22
При отсутствии фактора оценка его должна соответствовать одному баллу, поэтому показатель условий труда не может быть менее 12 баллов.
Прогнозируемое утомление: Y = 2,15 * 22 - 10,3 = 37 отн.ед.
Диапазон изменений работоспособности в результате выполнения различных видов умственного труда с разной интенсивностью находится в пределах от 10 до 54 отн.ед.
Анализ экспериментальных данных, позволяет прийти к заключению, что производственное утомление до 40 отн.ед. не вызывает признаков переутомления. Показатель утомления в диапазоне от 0 до 25 отн.ед. можно считать небольшим, от 26 до 40 отн.ед. - умеренным и более 40 отн.ед. - значительным.
На основании полученной оценки прогнозируемого утомления можно сделать вывод о том, что труд программиста нельзя назвать легкой работой. Согласно приведенной шкале (рис. 5.1), прогнозируемая утомляемость программистов находится почти на границе умеренной зоны и зоны значительного утомления
Рис. 5.1 Прогнозируемая утомляемость при работе за компьютером. |
Комплекс мероприятий, направленных на уменьшение утомляемости при работе за компьютером
Проблема безопасности рабочего места при работе с компьютером кажется незначительной. Чем может навредить компьютер? Кажется, что единственная опасность, исходящая от компьютера - это возможность поражения электрическим током. Однако такое мнение ошибочно, компьютер это устройство обладающее целым рядом воздействий на организм человека. При неправильном использовании и отсутствии элементарных знаний в вопросе безопасной работы на компьютере могут возникнуть значительные проблемы со здоровьем.
Рассмотрим основные факторы, влияющие на работоспособность и здоровье программистов и пользователей ЭВМ, а также мероприятия, направленные на уменьшение их вредного воздействия.
Электромагнитное излучение
Наиболее вредным производственным воздействием является побочное электромагнитное и радиационное излучения. Практически все вредное излучение возникает в результате работы монитора компьютера, поскольку доля электромагнитных полей, создаваемых компонентами системного блока ПК, незначительна.
Побочное электромагнитное излучение (ЭМИ) практически не ослабляется никакими защитными экранами или фильтрами, однако конструкция электронно-лучевой трубки современных мониторов уменьшает до минимума излучение в сторону оператора. Соответственно, максимум излучения сосредоточен по бокам и сзади от монитора, что предъявляет определенные требования к планированию взаимного расположения рабочих мест – операторы не должны находиться под влиянием ЭМИ соседних компьютеров.
Другим видом вредного излучения является радиационное, возникающее вместе со свечением люминофора в результате бомбардировки поверхности экрана электронами. В соответствии с ГОСТ 27954-88 мощность дозы рентгеновского излучения на расстоянии 5 см от поверхности экрана при 41-часовой рабочей неделе не должна превышать 0,03 мкР/с. Однако уровень этого излучения достаточно низок, быстро убывает с увеличением расстояния от поверхности ЭЛТ и не превышает действующих норм.
Основными мероприятиями по защите от воздействия излучения являются:
экранирование посредством защитных фильтров, что, впрочем, утратило свою актуальность в последнее время ввиду значительного улучшения качества самих мониторов;
защита расстоянием:
рекомендуемое расстояние от глаз оператора до поверхности монитора составляет 70 см (минимальное - 30 см);
расположение рабочего места - на расстоянии не ближе 1.2 м от задней и боковых поверхностей соседних терминалов;
регулярные обследования пользователей у окулиста.
Электрическая опасность
Согласно действующим правилам устройства электроустановок помещения для работы с ЭВМ и их внешними устройствами относятся к категории помещений без повышенной опасности (сухие, с нормальной температурой воздуха, с токонепроводящими полами), однако опасность поражения электрическим током существует. При этом стандартное напряжение в 220В, хотя и представляет определенную опасность для жизни человека, является все-таки менее опасным, чем напряжения внутри монитора, которые достигают значений в десятки и сотни кВ. Поражение электрическим током возможно в случае нарушения заземления компьютера, повреждения соединительных проводов, защитных корпусов. Кроме того, в результате короткого замыкания возможно возникновение пожара, который может привести к тяжелым последствиям, так как при горении электронной аппаратуры выделяются токсичные газы.
ГОСТ 12.2007-75 устанавливает требования безопасности, предотвращающие или уменьшающие до допустимого уровня воздействие на человека электрического тока.
Одной из обязательных мер электробезопасности при работе с компьютером является надежное заземление его (так как потребляемая ЭВМ мощность составляет 150-200Вт,а напряжение сети – 220В(+/-15В), то ток заведомо больше порогового Iпор
=0,5мА, следовательно, сопротивление защитного заземления должно равняться Rз
=4Ом). Для заземления компьютера, в первую очередь, могут применяться естественные заземлители, любые металлические конструкции, имеющие хорошую связь с землей. Если сопротивление естественных заземлителей больше нормируемого, то необходимо сооружать искусственные заземлители. Ими могут быть стальные трубы, угловая сталь, металлические стержни и др.
Нерациональное освещение
Недостаток или избыток освещения при работе за компьютером ведет к быстрому утомлению, головной боли, падению производительности труда, росту числа ошибок, а при систематическом нарушении режима освещенности – к нарушению зрения.
В дисплейном зале освещение должно быть совместное: естественное (боковое, через окна) и искусственное – и должно соответствовать требованиям СНиП 4-79. По конструктивному исполнению искусственное освещение может быть двух видов: общее и комбинированное, когда к общему освещению добавляется местное.
Как отмечено выше, работа за компьютером относится к категории работ высокой точности (размер объектов до 1,0 мм, контраст с фоном – малый, фон – темный), наименьшая необходимая освещенность при этом равна 300 лк.
При работе с ЭВМ необходимо соблюдать следующие правила:
прежде, чем начать работу за ПК, пройти всестороннее обследование у окулиста;
терминал не должен быть обращен к окну, так как интенсивная освещенность поля зрения ухудшает контрастность изображения на экране;
равномерное распределение яркости - может быть достигнуто за счет использования нескольких источников света либо применения ламп дневного освещения;
оптимальная направленность светового потока – рекомендуемый угол падения света на рабочую поверхность составляет 60 градусов к ее нормали;
осветительные установки не должны являться источниками повышенной опасности;
избавиться от бликов можно при помощи штор или жалюзи, ограничивающих световой поток, либо используя специальные экранные фильтры;
стена позади программиста должна быть освещена так же, как и экран.
Посторонние шумы
При работе различные части компьютера создают посторонний шумовой фон, который отрицательно воздействует на психику человека. Требованиями СН 3223-85 «Допустимые уровни шума на рабочих местах» при работе на ПК допускается уровень шума, не превышающий 50 дБ. Однако в современных моделях компьютеров наблюдается устойчивая тенденция к снижению уровня посторонних шумов (значительно ниже установленной нормы), поэтому шумы на сегодня являются весьма незначительным вредным фактором.
Микроклимат
Согласно СН 4088-86 "Микроклимат производственных помещений" в залах с работающей вычислительной техникой параметры микроклимата должны быть следующими:
в холодные периоды года температура воздуха, скорость его движения и относительная влажность воздуха должны соответственно составлять: 22-24 градуса; 0.1 м/с; 40-60%; температура воздуха может колебаться в пределах от 21 до 25 градусов при сохранении остальных параметров в вышеуказанных пределах.
в теплые периоды года температура воздуха, его подвижность и относительная влажность воздуха должны соответственно составлять: 23-25 градуса; 0.1-0.2 м/с; 40-60%; температура воздуха может колебаться в пределах от 22 до 26 градусов при сохранении остальных параметров в вышеуказанных пределах.
Оптимальный температурный режим можно поддерживать правильно организованной вентиляцией рабочего помещения с помощью кондиционеров и увлажнителей. Одним из основных параметров по оптимизации микроклимата и состава воздуха в помещении является обеспечение надлежащего воздухообмена. Расчет воздухообмена в рамках данного дипломного проекта приведен ниже.
Психофизиологические факторы
Вредные психофизические воздействия – к ним относятся физические и нервно-психические факторы – вызываются сидячим образом работы, а также вследствие высокого эмоционального и нервно-психического напряжения, поскольку задачи, решаемые программистами, зачастую требуют больших умственных затрат.
Для уменьшения вредного влияния этих факторов необходимо соблюдать режим работы за компьютером. Продолжительность рабочего дня непосредственно за экраном ПК не должна превышать 4 часов; кроме того, рекомендуется каждый час делать перерыв на 5-10 минут и выполнять легкую разминку, включающую несколько простых физических упражнений.
Планирование рабочего места
При планировании рабочего места за компьютером необходимо учитывать рассмотренные выше требования:
организационные,
электробезопасности,
по уменьшению влияния вредных психофизических воздействий,
по защите от воздействия побочных излучений,
к микроклимату рабочего помещения,
к освещенности.
Кроме того, компьютер должен быть установлен так, чтобы за ним было легко и удобно работать. В процессе работы Ваша поза должна быть такой, чтобы Вы не уставали и, чтобы все необходимое для работы было легкодоступным. Уровень глаз при вертикальном расположении экрана должен приходиться на центр экрана или на 2/3 его высоты. Клавиатуру лучше располагать на расстоянии 10-20 см от края стола, что позволит запястьям рук опираться о стол, либо на коленях. Стул, на котором Вы сидите, должен быть со спинкой и желательно с подлокотниками.
Расчет воздухообмена
Санитарными нормами установлено, что объем производственных помещений на одного работающего должен составлять не менее 15 кубометров, а площадь помещения - не менее 4.5 кв.м.
В производственных помещениях объемом до 20 кубометров на одного работающего при отсутствии загрязнения воздуха производственными вредностями вентиляция должна обеспечивать подачу наружного воздуха в количестве не менее 30 куб.м/час на одного работника, а в помещениях объемом 20 - 40 кубометров на одного работающего - не менее 20 куб.м/час. Во всех указанных случаях при этом должны быть выдержаны нормы по температуре и влажности воздуха.
Помещение, где располагается рабочее место программиста, имеет площадь 47.5 кв.м и объем 156.5 кубометров. Учитывая вышеприведенные требования найдем допустимое количество одновременно работающих человек:
а) N < 47.5 / 4.5 = 10.5
б) N < 156.5 / 15 = 10.4
Получаем, что для выполнения указанных требований в данном помещении могут работать не более десяти человек.
Произведем расчет воздухообмена.
Исходные данные:
1. норма температуры в рабочей зоне для помещений, характеризуемых избытком [>23 Вт/м3] теплоты для легкой работы t = 20 - 22 °C ;
2. Объем помещения: 156.5 кубометров.
3. Количество аппаратуры и выделяемая ей мощность:
Монитор SK-3142- K1=2 шт.- W1=150 Вт
ЭВМ IBM PC/AT- K2=2 шт.- W2=250 Вт
Генератор импульсов Г5-75- K3=2 шт.- W3=60 Вт
Осциллограф двухлучевой С1-103- K4=2 шт. - W4=130 Вт
Источник питания Б5-46- K5=1 шт.- W5=400 Вт
Источник питания Б5-47- K6=2 шт.- W6=150 Вт
Вольтметр универсальный В7-40- K7=3 шт.- W7=30 Вт
5. Количество работающих: n = 7.
При расчете будем исходить из требований санитарно-профилактических норм, предъявляемых к помещениям типа дисплейного класса.
Для одного человека необходимо L'=20м3/ч воздуха. Для удаления тепла выделенного аппаратурой тоже необходим воздухообмен.
Исходя из количества работающих, необходим следующий воздухообмен
L1 = n * L' = 7 * 20 = 140 м3/ч.
Для расчета воздухообмена по теплоизбыткам используется следующая формула:
Qя
р *c*( tух-tпр )
где Qя - явно выделяемое тепло в помещении в Дж/ч;
p - плотность воздуха - 1,2 кг/м3;
c - теплоемкость воздуха - 1 кДж/кг К;
tух - температура воздуха, уходящего из помещения;
tпр - температура воздуха, подаваемого в помещение.
tух обычно определяется по следующей формуле:
tух=tрз + t(H-L) ,
где tрз - температура в рабочей зоне;
H - высота от пола до центра вытяжного отверстия;
t - температурный градиент (0,5 - 1,5 °C/м);
L - высота от пола до рабочей зоны.
Избыточное тепло, выделяемое аппаратурой:
Qа = 3600*(W1*K1 + ... + W7*K7) = 3600*(2*150+2*250+2*60+2*130+1*400+2*150+3*30) = 3600*1970 Дж/ч = 7092 кДж/ч
Избыточное тепло выделяемое людьми:
Qл = 7 чел * 355 кДж/ч = 2485 кДж/ч.
Явно выделяющееся избыточное тепло:
Qя = Qа + Qл = 7092 + 2485 = 9577 кДж/ч.
Температура удаляемого воздуха:
tух = 22 C+1,5 (2,2-1 ) = 24 °C.
Пусть температура поступающего воздуха
tп=20 °C.
Тогда
L2 = = 1995 м3/ч
1,2*1*(24 - 20)
Таким образом, получаем, что система воздухообмена должна обеспечивать собственную производительность 1995 м3/ч для поддержания нормального микроклимата. Таким требованиям удовлетворяет кондиционер автономный КТА1-2-04Б с компрессорно-конденсаторным агрегатом АК-ВФ-4Х и регулятором относительной влажности В4-51ОУ, который обеспечивает производительность по воздуху 2000 м3/ч.При обеспечении кондиционером температура поступающего воздуха не более 20 °С.
Экологическая безопасность
Так как современный компьютер является устройством, практически не оказывающим вредного воздействия на состояние окружающей среды, то можно считать, что процесс работы на ЭВМ экологически безопасен.
В данном разделе проведен анализ зависимости утомляемости от условий труда применительно к труду программистов, рассмотрены основные факторы, влияющие на работоспособность и здоровье программистов и пользователей ЭВМ, а также мероприятия, направленные на уменьшение их вредного воздействия, произведен расчет воздухообмена.
Из всего выше сказанного можно сделать вывод, что правильное использование компьютера, соблюдение эргономических правил и рабочей дисциплины может исключить практически весь спектр вредных воздействий длительной работы за компьютером по отношению к нашему организму.
Заключение
В данной работе была реализована тестовая программа подбора методов фильтрации для кардиологических аппаратов и систем, основным достоинством которой является быстрота и надежность работы, а также доступность быстрого просмотра ЭКГ с использованием любых заранее доступных фильтров. Реализация детектора подачи импульса дефибрилляции была необходима для автоматического определения R – зубцов с параметрами ГОСТ для дефибрилляторов с программным распознаванием момента подачи импульса.
В первой главе был дан обзор методов математической обработки и ЭКГ – анализа.
В технологическом разделе описаны основные принципы объектно-ориентрованного программирования, так как программа строится именно на основе написания классов и объектов.
Также была описана структура разрабатываемого программного обеспечения и процессы программирования . В описание включены виды программных окон и тексты наиболее интересных функций, остальная часть написанного кода находиться в приложении.
В организационно-экономическом разделе приведен расчет затрат на создание программного продукта.
В разделе, посвященному охране труда, рассказано, как правильно организовать свой труд при работе с программным продуктом.
Список литературы
1. Водолазский Л. А. Основы техники клинической электрографии. – Москва: Медицина.-1966.-270с
2. С. Холзнер VisualC++ 6. Учебный курс. – Петербург: Питер 2000.
3. Шакин В. В. Вычислительная электрокардиография.- М.: Наука.-1981.-166с.
4. Дроздов Д. В. Персональный компьютер в качестве электрокардиографа – за и против. // М: <<Компьютерные технологии в медицине>>.-1996.-№1.-С. 18-23.
5. Alan Oppenheim and Roland Schafer, Discete-Time Signal Processing, Prentice-Hall, ISBN 0-13-216292-X, 1989.
6. ANSI-AAMI EC18-1982 American National Standart for Diagnostic electrocardiographic Devices, American Association for the Advancement of Medical Instrumentation. – Arlington, Virg.-1983.
7. Bailey J. J., Berson A. S., Garson A., et al. Recommendation for standartization and specification in automated electrocardiography: bandwidth and digital signal processing: A report for health professionals by en ad hos writing group of the commitee on electrocardiography and cardiac electrofisiology of the Council on Clinical Cardiology.-American Heart Association.-Circulation.-1990.-V. 81. – 730p.
8. Вычислительные системы и автоматическая диагностика заболеваний сердца. Под редакцией Ц. Карераса и Л. Дрейфуса. – Москва: Мир.-1974.-504с.
9. Том Сван Освоение BORLANDC++ 5. – K.:Диалектика, 1996. -576 с. ISBN 966-506-030-9.
10. Editor-in-Chief Joseph D. Bronzino, The Biomedical Engineering Handbook, IEEE PRESS, pp 801-917.
! | Как писать дипломную работу Инструкция и советы по написанию качественной дипломной работы. |
! | Структура дипломной работы Сколько глав должно быть в работе, что должен содержать каждый из разделов. |
! | Оформление дипломных работ Требования к оформлению дипломных работ по ГОСТ. Основные методические указания. |
! | Источники для написания Что можно использовать в качестве источника для дипломной работы, а от чего лучше отказаться. |
! | Скачивание бесплатных работ Подводные камни и проблемы возникающие при сдаче бесплатно скачанной и не переработанной работы. |
! | Особенности дипломных проектов Чем отличается дипломный проект от дипломной работы. Описание особенностей. |
→ | по экономике Для студентов экономических специальностей. |
→ | по праву Для студентов юридических специальностей. |
→ | по педагогике Для студентов педагогических специальностей. |
→ | по психологии Для студентов специальностей связанных с психологией. |
→ | технических дипломов Для студентов технических специальностей. |
→ | выпускная работа бакалавра Требование к выпускной работе бакалавра. Как правило сдается на 4 курсе института. |
→ | магистерская диссертация Требования к магистерским диссертациям. Как правило сдается на 5,6 курсе обучения. |
Дипломная работа | Формирование устных вычислительных навыков пятиклассников при изучении темы "Десятичные дроби" |
Дипломная работа | Технологии работы социального педагога с многодетной семьей |
Дипломная работа | Человеко-машинный интерфейс, разработка эргономичного интерфейса |
Дипломная работа | Организация туристско-экскурсионной деятельности на т/к "Русский стиль" Солонешенского района Алтайского края |
Дипломная работа | Разработка мероприятий по повышению эффективности коммерческой деятельности предприятия |
Дипломная работа | Совершенствование системы аттестации персонала предприятия на примере офиса продаж ОАО "МТС" |
Дипломная работа | Разработка системы менеджмента качества на предприятии |
Дипломная работа | Организация учета и контроля на предприятиях жилищно-коммунального хозяйства |
Дипломная работа | ЭКСПРЕСС-АНАЛИЗ ФИНАНСОВОГО СОСТОЯНИЯ ООО «АКТ «ФАРТОВ» |
Дипломная работа | Психическая коммуникация |
Дипломная работа | Пути совершенствования маркетинговой деятельности на предприятии |
Дипломная работа | Учет и анализ финансовых результатов |
Дипломная работа | Прикладное искусство "Батик" |
Дипломная работа | Бюджетирование на предприятии |
Дипломная работа | Проституция как социальное явление |
Дипломная работа | Пенсионный фонд РФ |
Дипломная работа | Республика Алтай - субъект Российской Федерации |
Дипломная работа | Учет и анализ затрат на производство |
Дипломная работа | Расчеты пластиковыми картами |
Дипломная работа | Учет и анализ оплаты труда в организации |
Дипломная работа | Управление кредитным портфелем коммерческого банка |
Дипломная работа | Бухгалтерский учет на малых предприятиях и анализ их хозяйственной деятельности |
Дипломная работа | Мотивация труда на предприятии |
Дипломная работа | Благоустройство и озеленения территории |
Дипломная работа | Организация учета оборотных материальных активов, оценка эффективности их использования |