You are on page 1of 7

МІНІСТЕРСТВО ОСВІТИ I НАУКИ УКРАЇНИ

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ


УКРАЇНИ
«КИЇВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ
ІМЕНІ ІГОРЯ СІКОРСЬКОГО»
ФАКУЛЬТЕТ БІОМЕДИЧНОЇ ІНЖЕНЕРІЇ
КАФЕДРА БІОМЕДИЧНОЇ КІБЕРНЕТИКИ

Комп’ютерний практикум №6
з дисципліни «Методи та системи штучного інтелекту»
на тему: «Побудова фазових портретів циклічного сигналу»

Варіант №14

Виконав:
студент гр. БС-11
Косачевський А. О.
Перевірив:
Піднебесна Г.А.

Зараховано від ___.___._______

___________________________
(підпис викладача)

Київ-2023
Мета роботи: програмно реалізувати два метода відображення циклічного
сигналу на фазовій площині.

Основні задачі роботи:


1. Освоїти технологію переходу від скалярного сигналу в часовій області до
фазового портрету.
2. Реалізувати процедуру відображення фазового портрету сигналу z(t ) на
площині z(t ) , z(t−τ ) .
3. Реалізувати процедуру відображення фазового портрету сигналу z(t ) на
площині z(t ) , dz /dt .

Завдання для комп’ютерного практикуму

 Реалізувати процедуру вводу інформації з файлу ECG.txt. Файл містить  дискретні


значення ЕКГ, які записані в текстовому вигляді (послідовності чисел) з кроком
квантування 500 Гц. Дані розміщено в 7 колонках (зліва направо та  зверху
донизу). Фрагмент запису у файлі наведена на рис. 1. 

Рис. 1. Фрагмент запису у файлі ECG.txt. 

2. Оцінювання першої похідної dz/dtза масивом даних введених з


файлу.

3. Відобразити фазовий портрет на площині z(t), dz/dt . 


4. Відобразити псевдо фазовий портрет на площині z(t), z(t − τ), де τ - затримка  в
часі (натуральне число точок), яке задається користувачем. За  замовчуванням
τ=8 точок.
5. Робоче вікно програми має виглядати так, як показано на рис. 2. При зміні
значення параметру τ , на екрані мають відображатися відповідні  зміни псевдо
фазового портрету на площині z(t), z(t − τ). 
Рис. 1. Результати оброблення даних з файлу ECG.txt:
ЕКГ - початковий сигнал;
ФП-1 – фазовий портрет на площині z(t ) , dz /dt .;
ФП-1 – фазовий портрет на площині z(t ) , z(t−τ ) ;

Рис. 2. Результати оброблення даних з файлу ECG.txt

Лістинг програми
import matplotlib.pyplot as plt
from scipy import signal
import numpy

def show_graphics(a,ecg1,ecg2,t1,t2,TAU):
new_ecg1 = ecg1[0:len(ecg1)-TAU]
new_ecg2 = ecg1[TAU:len(ecg1)]
new_ecg3 = ecg2[0:len(ecg2)-TAU]
new_ecg4 = ecg2[TAU:len(ecg2)]
new_ecg5 = numpy.gradient(ecg1,t1)
new_ecg6 = numpy.gradient(ecg2,t2)
if(a == 1):
plt.figure(1,figsize=(16,2))
plt.plot(t1,ecg1), plt.grid
plt.title('ЕКГ')
plt.figure(2,figsize=(16,2))
plt.plot(new_ecg1,new_ecg2,), plt.grid
plt.title('ФП 1')
plt.figure(3,figsize=(16,2))
plt.plot(new_ecg5,ecg1), plt.grid
plt.title('ФП 2')
else:
plt.figure(1,figsize=(16,2))
plt.plot(t2,ecg2,'r'), plt.grid
plt.title('ЕКГ')
plt.figure(2,figsize=(16,2))
plt.plot(new_ecg3,new_ecg4,'r'), plt.grid
plt.title('ФП 1')
plt.figure(3,figsize=(16,2))
plt.plot(new_ecg6,ecg2,'r'), plt.grid
plt.title('ФП 2')

plt.show()
ecg1 = []
with open('ECG1.txt') as f:
for line in f:
inner_list = [elt.strip() for elt in line.split(' ')]
inner_list.remove('')
for a in inner_list:
ecg1.append(float(a))
ecg2 = []
with open('ECG2.txt') as f:
for line in f:
inner_list = [elt.strip() for elt in line.split(' ')]
inner_list.remove('')
for a in inner_list:
ecg2.append(float(a))
f.close()
i = 0
tt = 0.01
t1 = []
while i < len(ecg1):
t1.append(tt)
tt+=0.05
i+=1
i = 0
tt = 0.01
t2 = []
while i < len(ecg2):
t2.append(tt)
tt+=0.05
i+=1
print('Шановний користувач, вас вітає програма шостої лабораторної
роботи.')
print('Для того щоб розпочати роботу, введіть номер ЕКГ, яку ви
хочете побачити (1 або 2).')
a = int(input('Введіть цифру: '))
while((a < 1) or (a > 2)):
print('1 або 2!')
a = int(input('Введіть цифру: '))

TAU = int(input('Введіть ТАУ (мінімум 1): '))


while(TAU < 1):
print('Як мінімум 1!')
TAU = int(input('Введіть ТАУ: '))
i = 0
while(i == 0):
show_graphics(a,ecg1,ecg2,t1,t2,TAU)
print('Хочете побачити іншу ЕКГ?')
print('1 - так')
print('2 - ні')
t = int(input('Введіть цифру: '))
if(t == 2):
break
else:
if(a == 1):
a = 2
else:
a = 1
TAU = int(input('Введіть ТАУ (мінімум 1): '))
while(TAU < 1):
print('Як мінімум 1!')
TAU = int(input('Введіть ТАУ: '))

Результати роботи
Висновки
В результаті виконання комп’ютерного практикуму було програмно
реалізовано процедуру побудови фазових портретів циклічного сигналу за
допомогою двох двох способів: методом затримки, в основу якого покладено
перехід від одномірної послідовності дискретних значень сигналу до
послідовності N-мірних векторів, та оцінюванням першої похідної. Для цього
було використане мову програмування Python 3, оскільки воно підходить для
вивчення даних і машинного навчання. Результат наведений на скріншотах.

You might also like