оформление (1017078), страница 2
Текст из файла (страница 2)
1.3 Формальное описание программы
Данные сигналов и информация о пациенте располагается в типизированных *.dat файлах (тип запись).
Поля записи
RegNumber: smallint - регистрационный номер;
Da_ta, Name: shortstring - дата записи, ФИО;
Distance, Perimetr: smallint – расстояние между электродами, обхват грудной
клетки;
Leng_s, Weight: smallint – рост, вес;
Sist_BP, Diast_BP: smallint – систолическое давление, диастолическое давление;
B: array[1..4,1..Predel] of smallint – массивы сигналов ЭКГ, реограммы, ФКГ,
опорный сигнал;
Kalibr_Z0, Kalibr_DZ: Real48 – значения калибровки;
Константа
Predel=7000 (количество точек в массиве).
Процедуры и функции:
procedure Action1Execute(Sender: TObject); - процедура при нажатии на кнопке Открыть
(п.1.4)
procedure Action2Execute(Sender: TObject); - процедура при нажатии на кнопке Данные -
ввод информации в поля TEdit и
построение графика (п.1.8)
procedure Action3Execute(Sender: TObject); - процедура при нажатии на кнопке Разместить
(п.1.9, 1.10)
procedure Action4Execute(Sender: TObject); - процедура при нажатии на кнопке Печать
(п.1.11)
procedure MaxR; - процедура поиска R-зубцов (п.1.9)
procedure MaxM; - процедура поиска максимумов дифференцированной реограммы
(п.1.9)
procedure GelZ; - процедура поиска точек выброса крови из левого желудочка сердца
(п.1.10)
procedure PrintGrafik; - печать графиков (ФКГ, Рео, ЭКГ) (п.1.11)
procedure PrintZ; - обозначение точек выброса крови из левого желудочка сердца при
печати (п.1.10, 1.11)
procedure PrintR; - обозначение R-зубцов при печати (п.1.9, 1.11)
procedure PrintM; - обозначение максимумов дифференцированной реограммы при печати
(п.1.9, 1.11)
function WidthX: Integer; - получение ширины страницы в пикселях для перевода координат при печати (п.1.7, 1.11)
function HeightY: Integer; - получение высоты страницы в пикселях для перевода координат при печати (п.1.7, 1.11)
function II(x: smallint):integer; - функция пересчёта координат по оси Х (п.1.7)
function JJ(y,y1,y2: smallint):integer; - функция пересчёта координат по оси Y (п.1.7)
function MinEKG: smallint; - нахождение минимального значения ЭКГ (п.1.6)
function MaxEKG: smallint; - нахождение максимального значения ЭКГ (п.1.6)
function MinReo: smallint; - нахождение минимального значения дифференцированной
реограммы (п.1.6)
function MaxReo: smallint; - нахождение максимального значения
дифференцированной реограммы (п.1.6)
function MinFKG: smallint; - нахождение минимального значения ФКГ (п.1.6)
function MaxFKG: smallint; - нахождение максимального значения ФКГ (п.1.6)
function PorogR: smallint; - нахождение порогового значения (для поиска R-зубцов) (п.1.9)
function PorogM: smallint; - нахождение порогового значения (для поиска максимумов
дифференцированной реограммы) (п.1.9)
Тип:
TReo=record
RegNumber: smallint - регистрационный номер;
Da_ta, Name: shortstring - дата записи, ФИО;
Distance, Perimetr: smallint – расстояние между электродами, обхват грудной
клетки;
Leng_s, Weight: smallint – рост, вес;
Sist_BP, Diast_BP: smallint – систолическое давление, диастолическое давление;
B: array[1..4,1..Predel] of smallint – массивы сигналов ЭКГ, реограммы, ФКГ,
опорный сигнал;
Kalibr_Z0, Kalibr_DZ: Real48 – значения калибровки;
Глобальные переменные:
Reo1: TReo; – переменная, в которую заносятся данные из файла
F: file of TReo; – файловая переменная (п.1.4.)
I1, I2: integer – размеры изображения по горизонтальной оси. Эти параметры необходимы для пересчёта координат. |I2-I1| - ширина изображения. (п.1.6.)
J1, J2: integer – размеры изображения по вертикальной оси. Эти параметры необходимы для пересчёта координат. |J2-J1| - высота изображения. (п.1.6.)
ARR: array[1..80] of smallint; - массив, в который вносятся абсциссы максимумов
дифференцированной реограммы (п.1.10.)
h
Необходимы для правильного расположения графиков по вертикали (п.1.7.)
1: smallint; - сумма модулей глобального максимума и минимума графиков ЭКГ, РЕО и ФКГh2: smallint; - сумма модулей глобальных минимумов графиков ЭКГ, РЕО и глобального максимума ЭКГ
h2: smallint; - сумма модулей глобальных минимумов графиков ЭКГ, РЕО, ФКГ и глобальных максимумов РЕО и ЭКГ
Константа:
Predel=7000 - количество точек в массиве.
-
Работа с файлами
В типизированных файлах данные хранятся в виде структуры, представляющие какой-либо тип. В данном случае - запись. Для начала работы с файлом необходимо инициализировать файловую переменную этого типа (в данной программе она обозначается как F). Файловая переменная задаётся c помощью структуры file of.
F:=file of TReo.
Связывание файловой переменной с именем файла происходит при помощи процедуры AssignFile(<файловая переменная>,<название файла>). Файл открывается с помощью процедуры Reset(<файловая переменная>).
Считывание данных из файла переменной в переменную для сохранения прочитанных данных происходит с помощью переменной Read(<файловая переменная>,<переменная для сохранения непрочитанных данных>).
После считывания данных из файла в независимую переменную файл нужно закрыть с помощью метода CloseFile(<файловая переменная>).
-
Обработка исключительных ситуаций при открытии файла
Исключительные ситуации в среде программирования Delphi управляются с помощью нескольких операторов. В данной программе использовался оператор try…except.
Так как при открытии файла могут возникать различные исключительные ситуации, то был применён базовый класс исключений Exception.
try
AssignFile(F,OpenDialog1.FileName); ////Открытие файла
Reset(F);
Read(F,Reo1); ////Чтение данных из файла в переменную
CloseFile(F); ////Закрытие файла
except
on E:Exception do ShowMessage(E.Message); /// вызов сообщения об ошибке
end;
end;
Сообщение об ошибке изображено на рис.3
Рис.3. Уведомление об ошибке
При нажатии на кнопку ОК, окошко ошибки закрывается и основная программа снова становится доступна.
-
Функции нахождения глобального максимума и минимума сигналов
Глобальные максимумы понадобятся для пересчёта координат графиков в файле в координаты компонента Изображение (TImage).
Алгоритм работает по принципу последовательного сравнивания каждого значения из массива с некоторым максимальным (минимальным) значением. Если текущее значение больше(меньше) максимального(минимального), то это значение становится максимальным(минимальным).
нет да
Рис.4 Блок-схема (для нахождения максимума):
A[i] – массив, в котором находится максимальное значение.
-
Функция пересчёта координат.
II и JJ – функция пересчёта координат (абсциссу и ординату, соответственно) к координатам на экране. Формула для преобразования координат получается с помощью свойства подобия. Необходимо также учитывать, что на экране ось ординат направлена вниз. На нижерасположенных рисунках показано, как необходимо делать преобразование координат для построения графиков зоне изображения Image1.
I1:=0; I2:=Image1.Width (ширина) – размеры изображения по горизонтальной оси
J1:=0; J2:=Image1.Height (высота) – размеры изображения по вертикальной оси.
Рис.5. Координатные оси компонента TImage
x1:=0; x2:=Predel – количество элементов массива
y1:=0; y2:=|Max(Reo)|+|Min(Reo)|+|Max(FKG)|+|Min(FKG)|+|Max(EKG)|+|Min(EKG)| - сумма модулей глобальных максимумов и минимумов трёх графиков.
Рис.6. Координаты графиков в массиве
Из формулы подобия получаются следующие преобразования координат:
-
Построение графиков по данным из массива
Если функция для построения графика задана в массиве (т.е. поточечно), то необходимо соединять последовательно пары точек i и i+1. Каждая точка имеет координаты: по оси абсцисс – порядковый номер точки в массиве, а по оси ординат – значение в массиве этой точки.
Рис.7. Принцип построения графика по точкам
В программе это можно сделать с помощью методов MoveTo(X,Y:integer) и LineTo(X,Y:integer). Метод MoveTo(X,Y:integer) устанавливает курсор на канву компонента TImage в точку с координатами X,Y. Метод LineTo(X,Y:integer) проводит линию от исходной точки к точке с координатами, указанными в LineTo.
Рис.8. Блок-схема для алгоритма построения графика.
-
Нахождение R-зубцов на ЭКГ
Определить R-зубцы на ЭКГ или соответствующие им зубцы на дифференцированной ЭКГ можно с помощью следующего алгоритма. Вычисляется некий порог, и среди значений, которые его превышают, ищется локальный максимум.
Порог может вычисляться, например, как сумма среднего значения ЭКГ и половины максимального значения ЭКГ. Далее ищется первое значение, которое больше порога. От этого значения до первого значения меньшего, чем порог, ищется максимальное значение, которое и определяется как R-зубец (рис. 9, 10, 11). [1]
Рис. 9. Блок-схема для алгоритма нахождения порога
нет да
нет да
нет да
нет да
Рис. 10. Блок-схема для алгоритма нахождения R-зубцов
Рис.11 . Иллюстрация к алгоритму нахождения R-зубца.
Нахождение максимумов дифференцированной реограммы происходит аналогичным образом.
1.10 Определение точек начала изгнания крови из левого желудочка сердца
К кривой дифференцированной реограммы в точке максимума второй производной реограммы проводится касательная до пересечения ее с нулевым уровнем. Эта точка является абсциссой точки начала изгнания крови из левого желудочка сердца.
Для нахождения этих точек на графике необходимо рассматривать каждый период в отдельности. Поэтому предварительно необходимо разбить график на периодичные части. Точками разделения этих периодов могут служить максимумы дифференцированной реограммы. Их координаты абсцисс заносятся в статический массив на стадии нахождения максимумов дифференцированной реограммы. После нахождения координат происходит анализ реограммы на каждом отдельном периоде (рис. 12).
Рис. 12. Периодичность реограммы