
- •Реферат
- •Введение
- •Описание метода наименьших квадратов.
- •Разработка алгоритма выделения кардиоимпульсов по фотоплетизмографическому сигналу в среде Delphi Pascal.
- •Разработка прикладного по выделения кардиоимпульса (листинг программы).
- •Тестирование программного обеспечения на сигнале фпг.
- •Заключение
- •Список использованых источников
Разработка алгоритма выделения кардиоимпульсов по фотоплетизмографическому сигналу в среде Delphi Pascal.
Для обнаружения кардиоимпульсов по фотоплетизмографическому сигналу обратимся к виду фотоплетизмограммы. На рисунке 1 отчетливо видно, что периоды характеризуются вершинами. И можно было бы выделить периоды, выделяя вершины на каждом из них, но в действительности фотоплетизмограмма выглядит намного сложней и задача выделения вершин достаточно сложная. Поэтому воспользуемся тем. Что вершинам сопутствуют резкие подъемы, которые на производной выделить достаточно легко, поскольку они будут характеризоваться высокими зубцами.
На этой логике и построен алгоритм выделения периодов, и соответственно частоты кровенаполнения органа по фотоплетизмограмме в данной работе. Далее идет описание Блок-Схемы, представленной на рисунке 3.
В первую очередь после запуска программы происходит обновление переменных i и k, привязка текстового файла с записывающимися данными ФПГ к файлу plez, открытие файла plez для чтения, установка индикатора первого максимума wtf в положение “true”. Работа индикатора будет пояснена позже. Далее при помощи переменной k обнуляем массив fph[3,k], в него будут записываться значения вершин зубцов производной. После обнуления массива k обнуляется, считываются введенные значения tme, pp, okr, равные периоду дискретизации (в секундах), количеству точек для аппроксимации при нахождении производной и окрестности (в точках) для нахождения верхнего зубца в периоде соответственно (по умолчанию значения указаны в блок-схеме).
Далее начинается весь цикл программы с того что считывается строка из файла plez в строку lett, которая преобразовывается в численное значение и присваивается соответствующему элементу массива амплитуды ФПГ fph[1,i]. Вместе с тем заполняется элемент массива времени fph[0,i], соответствующий значению амплитуды.
Рисунок 3. Блок-схема алгоритма выделения частоты кровенаполнения
Далее идет блок нахождения наибольшей величины производной в области заданной окрестности okr. Начинается он с определения «пиков», которые в данной точке больше значений соседних точек, причём «пики» начинаются вычисляться для значений, отстоящих от текущего положения точки на (itr+1), поскольку это ближайшая точка, у которой есть соседние посчитанные производные. Значения пиков заносятся в массив fph[3,i-itr-1]. После значение j устанавливается в (i-okr) вводится ещё одна упрощающая запись переменная itec, равная текущему значению точки минус половина okr. Затем начинается цикл отсеивания меньших значений в массиве fph[3,i-okr .. i]. Идёт сравнение всех значений массива точек в окрестности со значением в точке, находящейся посередине этой окрестности. Если значение в исследуемой точке меньше хотя бы одного значения в окрестности, оно приравнивается нулю; если найдётся значение, равное значению в исследуемой точке, то оно становится равным нулю. Таким образом точка может сохраниться только при условии её превосходства над значениями во всех точках окрестности. На данном этапе задержка равна половине значения okr, соответствующая точка находится в массиве fph[3,itec].
Следующий этап программы выполняется в блоке расчёта и вывода частоты кровенаполнения. Он срабатывает только при положительном значении элемента fph[3,itec]. При первом срабатывании значение индикатора wtf равно true и происходит только обновление счетчика периодов prd, значение wtf становится равным false. При последующих попаданиях на положительные значения fph[3,itec] идёт запись текущего значения частоты pf[k], рассчитанной с одного периода (1/prd). Тут же идёт вывод текущего значения частоты и (при наличии данных) средней арифметической частоты по трём периодам. Обновляется счетчик prd, прибавляется единица к счётчику k.
В завершении всего цикла счётчик i прибавляет единицу, prd прибавляет значение tme. Далее проверяется курсор файла plez – если конец файла не достигнут, цикл повторяется; при положении курсора в конце файла цикл завершается, закрывается файл plez, программа завершает свою работу.