Выполнив преобразование Фурье, можно утверждать, что необходимость в фильтрации сигнала отсутствует, так как спектре ярко выражены основные составляющие (рис. 26).
Рисунки 23 и 26 показывают, что сигналы ЭКГ и ФПГ имеют типовую форму, в которых видны основные составляющие: «P-волна», комплекс «QRS», «T-волна» для ЭКГ, систолический и диастолический пики на ФПГ.
Для расчета ЧССвоспользуемся формулами (2.1 и 2.2). Вычислим значения ЧСС для каждого отдельного сегмента графиков ЭКГ и ФПГ.
Результаты представлены на рис. 27. Данный график представляет из себя динамику изменения времени между сердечными сокращениями - ВСР.На практике используется среднее значение ЧСС, которое составило на основании ЭКГ - 82уд./мин., вычисление ЧССпри помощи сигнала ФПГ показало схожий результат.
Рисунок 26 - Спектр сигналов ФПГ
a б
Рисунок 27 - Значение ЧСС в разные промежутки времени:
а - вычисленные из ФПГ, б - вычисленные из ЭКГ
Для расчета значения сатурации кислорода согласно формулам 5-7 необходимо знать значение амплитуды переменной и постоянной составляющих ФПГ. Учитывая форму и повторяемость сигнала имеется возможность осуществлять поиск этих параметров на определенном участке ФПГ. В результате получается массив значений минимумов и максимумов функции ФПГ (рис.28).
Рисунок 28 - Расчет значений минимумов и максимумов функции ФПГ
Алгоритм учитывает форму сигнала и игнорирует искаженные периоды осцилляций. Вычислим значение SpO2 для каждого распознанного участка. Результаты вычисления представлены на рис. 29. Среднее значение SpO2 составило 96,881% насыщенностью крови кислородом, что является нормальным значением.Скрипт программы представлен в приложении.
Рисунок 29 -Расчет SpO2
3.3Выводы к главе
В данной главе былопроведено исследование ЭКГ и ФПГсигналов, полученных с датчика MAX86150 в математической среде. На основании измеренных данныхбыли рассчитаны значения ЧСС, ВСР исатурации кислорода в крови. Для улучшения характеристик сигналов применялись методы цифровая фильтрации. Основные выводы представлены в таблице 3.
Таблица 3
|
Режим измерения |
Потенциальные возможности |
|
|
Запись ЭКГ |
Фильтрация оптимальным фильтром позволяет наблюдать «QRS» комплекс, подходит для мониторинга ЧСС и ВСР. Может быть осуществлено в самом устройстве. Применение дополнительныхФНЧ и ФВЧ фильтров позволяет наблюдать входящие составляющие в сигнал ЭКГ. |
|
|
Запись ФПГ |
Высокая точность результатов измерений, возможность наблюдения всех составляющих сигнала ФПГ, без применения фильтров. |
|
|
Расчет ЧСС и ВСР |
Высокая точность измерений на основе ФПГ, использование данных ЭКГ позволяет достичь схожие результаты. |
|
|
Расчет SpO2 |
Высокая точность измерений, возможно осуществлять круглосуточный мониторинг сатурации кислорода. |
Заключение
В ходе выполнения выпускной квалификационной работы были выполнены следующие задачи:
1. Проведен анализ литературы касательно вопросов, связанных с методами исследования состояния сердечно-сосудистой системыИсследованы методы диагностики ССС и разработаны алгоритмы их реализации.
2. В качестве методов диагностики были выбраны: анализ ЭКГи ФПГ, а также расчет ЧСС, ВСР, SpO2, а также был предложен метод расчета артериального давления неинвазивным методом.
3. Разработана структурная схема, алгоритм работы портативного устройства для мониторинга здоровья, а также выполнен выбор электронно-компонентной базы.
4. На основании рассмотренного теоретического материала проведено математическое моделирование вычисления параметров здоровья в пакете MATLAB.В качестве анализа были приведены: графики ЭКГ и ФПГ, их частотный анализ и расчет ЧСС, ВСР и SpO2. Результаты моделирования вычисления параметров ЧСС и SpO2 показывают высокую точность и качество измерений.
Список литературы
1. ВОЗ о сердечно-сосудистых заболеваниях [Электронный ресурс]. - Режим доступа: https://www.who.int/cardiovascular_diseases/about_cvd/ru/ (дата обращения 26.02.20).
2. Методы диагностики сердечно-сосудистой системы [Электронный ресурс]. - Режим доступа: https://dr-paramonov.ru/news/blog/metody-diagnostiki-serdechno-sosudistoy/(дата обращения 26.02.20).
3. Telemedicine: opportunities and developments in Member States: report on the second global survey on eHealth 2009. [Электронныйресурс]. /WHO Library Cataloguing-in-Publication Data. - Режимдоступа: https://www.who.int/goe/publications/goe_telemedicine_2010.pdf (датаобращения 05.03.20).
4. A. Aboalseoud, A. Youssry, M. El-Nozahi, A. El-Rafei, A. ElBialy, H. Ragaai and A. Wahba. Wireless ECG Monitoring System for Telemedicine Application. 2019 Ninth International Conference on Intelligent Computing and Information Systems (ICICIS). - 2019. pp. 300-305.
5. ECG interpretation: Charectiristic of normal ECG (P-wave, QRS-complex, ST-segment, T-wave). [Электронный ресурс]. - Режим доступа: https://ecgwaves.com/topic/ecg-normal-p-wave-qrs-complex-st-segment-t-wave-j-point/(дата обращения 06.03.20).
6. L. Peter, A. Proto,M. Cerny. Investigation of a Possibility of ECG and PPG Common Measurement. World Congress on Medical Physics and Biomedical Engineering. - 2018. pp. 851-855.
7. S. Bagha, L. Show. A Real Time Analysis of PPG Signal for Measurement of SpO2 and Pulse Rate. International Journal of Computer Applications (0975 - 8887). - 2011. pp. 45-50.
8. Л. Уилсон. Пульсоксиметрия (часть 1). / Уилсон Л. -№123. - 2015. - c. 1-6.
9. W. Lin, H. Wang, O. W. Samuel, G. Li. Using a New PPG Indicator to increase the Accuracy of PTT-based Continuous Cuffless Blood Pressure Estimation. - 2017 IEEE. pp. 738-741.
10. J. L. Moraes, M. X. Rocha ,G. G. Vasconcelos,J. E. Vasconcelos Filho,Victor Hugo C. De Albuquerque,A. R. Alexandria.Advances in Photoplethysmography Signal Analysisfor Biomedical Applications. ¬-2018. pp. 1-26.
11. Кишов Р. М. Неинвазивное непрерывное измерение артериального давления // Проблемы Науки. 2015. №7 (37). [Электронный ресурс].- Режим доступа: https://cyberleninka.ru/article/n/neinvazivnoe-nepreryvnoe-izmerenie-arterialnogo-davleniya.
12. H. Shin, S. D. Min. Feasibility study for the noninvasive blood pressure estimation based on ppg morphology: normotensive subject study. - 2017 IEEE.
13. X. Ding, Y. Zhang, Fellow, J. Liu, W. Dai, H. K. Tsang. Continuous Cuffless Blood Pressure Estimation Using Pulse Transit Time and Photoplethysmogram Intensity Ratio. - 2016 IEEE.
14. L. Bastos, D. Rosario, E. Cerqueira, A. Santos, M. Nogueira. Filtering Parameters Selection Method and Peaks Extraction for ECG and PPG Signals. 2019 IEEE Latin-American Conference on Communications (LATINCOM). - 2020.
15. Recommended Configurations and Operating Profiles for MAX30101/MAX30102 EV Kits. ApplicationnoteAN6409 [Электронный ресурс] / MaximIntegrated. - 2016. - Режим доступа: https://pdfserv.maximintegrated.com/en/an/AN6409.pdf (дата обращения 20.03.20).
16. Oreggia D., Guarino S., Parisi A., Pernice R., Adamo G., Mistretta L., di Buono P., Fallica G., Cino C.A., Busacca A.C. Physiological parameters measurements in a cardiac cycle via a combo PPG-ECG system; Proceedings of the AEIT International Annual Conference; Naples, Italy. 14-16 October 2015; pp. 1 6.
17. Ferdinando H., Seppдnen T., Alasaarela E. Comparing features from ECG pattern and HRV analysis for emotion recognition system; Proceedings of the IEEE Conference on Computational Intelligence in Bioinformatics and Computational Biology; Chiang Mai, Thailand. 5-7 October 2016; pp. 1-6.
18. D. Lucani, G. Cataldo, J. Cruz, G. Villegas, S. Wong. A portable ECG monitoring device with Bluetooth and Holter capabilities for telemedicine applications. Proceedings of the 28th IEEEEMBS Annual International Conference. - 2006. pp. 5244-5246.
19. B. Ramachandran,S. Bashyam. Development of real-time ECG signal monitoring system for telemedicine application. 2017 Third International Conference on Biosignals, Images and Instrumentation (ICBSII). - 2017. pp. 4.
20. Integrated Photoplethysmogram and Electrocardiogram Bio-Sensor Module For Mobile Health MAX86150.Datasheet [Электронный ресурс] / / Maximintegrated. - Режим доступа: https://datasheets.maximintegrated.com/en/ds/MAX86150.pdf(дата обращения 20.02.20).
21. 2.4-GHz Bluetooth™ low energy and Proprietary System-on-Chip. Datasheet [Электронный ресурс] / /Texasinstruments. - 2013. - Режим доступа: https://www.ti.com/lit/ds/symlink/cc2541.pdf?&ts=1589273969936 (дата обращения 17.03.2020).
22. Antenna quick quide. Datasheet DN 035 [Электронныйресурс] / /Texas instruments. - 2013. - Режим доступа: https://www.ti.com/lit/an/swra351a/swra351a.pdf?&ts=1589274009000 (дата обращения 17.03.2020).
23. Antenna selection quide. Application note AN058 [Электронныйресурс] //Texas instruments. - 2013. - Режим доступа: https://www.ti.com/lit/an/swra351a/swra351a.pdf?&ts=1589274009000 (дата обращения 17.03.2020).
24. PMIC with Ultra-Low IQ Voltage Regulators and Battery Charger for Small Lithium Ion Systems. Datasheet [Электронныйресурс] / / Maximintegrated. - 2020. - Режимдоступа: https://datasheets.maximintegrated.com/en/ds/MAX14690.pdf (датаобращения 17.03.2020).
25. Увеличение времени работы портативной электроники с помощью преобразователя на основе SIMO [Электронный ресурс]. - Режим доступа: https://www.compel.ru/lib/135395 (дата обращения 26.03.20).
26. RechargeableLI-IONBatteries. Datasheet [Электронный ресурс] / / IllinoisCapacitor. - 2019. - Режим доступа: http://products.illinoiscapacitor.com/seriesDocuments/RJD_series.pdf (дата обращения 17.03.2020).
27. Integrated Photoplethysmogram and Electrocardiogram Bio-Sensor Module For Mobile Health MAX86150. Datasheet [Электронный ресурс] / / Maximintegrated. - Режим доступа: https://datasheets.maximintegrated.com/en/ds/MAX86150.pdf (дата обращения 20.02.20).28. D.Jingwei, J.Wenwen. Design of Digital Filter on ECG Signal Processing. 2015 Fifth International Conference on Instrumentation and Measurement, Computer, Communication and Control (IMCCC). -2015.- pp. 1272-1275.
29. N. Das, M. Chakraborty, // «Performance Analysis of FIR and IIR Filters for ECG Signal Denoising based on SNR», 2017 Third International Conference on Research in Computational Intelligence and Communication Networks (ICRCICN). -2017.pp. 90-97,
Приложение
Скрипт программы для работы с ЭКГ сигналом
clc
clear all
close all
pkg load signal
maxSignals=csvread('7.csv');
%3,4 ppg
%5 not filtering ecg
ecgFullNF=real(maxSignals(2:end,5));
n1=8000;n2=15104;
Fs=200;%200 Гц
ecgFullNF_cutted=ecgFullNF(n1:n2)';
figure;
plot(ecgFullNF)
figure;
plot(ecgFullNF_cutted)
[b1,a1]=butter(5,1/100,'high');
[H,w]=freqz(b1,a1,1000);
figure;
plot(w/2/pi*1000,10*log10(abs(H)))
[ecgFullMalabFiltered20,d2]=filter(b1,a1,ecgFullNF_cutted(1:end));
figure;
plot((0:length(ecgFullNF)-1)*1/Fs,ecgFullNF*(12.247e-6)/8/9.5*1000)
xlabel('f,Гц'),ylabel('Амлитудагармоник,мB'),grid
title('ЭКГсигнал')
if 1
p=[1 0 0 0 -1];%Знаменатель
z=zeros(1,201);
z(1)=-1;z(201)=1;
z(101)=50;z(105)=-50;
k=1/50;
[ecgFullMalabFiltered]=filter(z*k,p,ecgFullNF_cutted);
ecgFullMalabFiltered=ecgFullMalabFiltered(101:end);
if 1
nOrder=4;
[b1,a1]=butter(nOrder,1/100,'high');
[b2,a2]=butter(nOrder,40/100,'low');
[b3,a3]=butter(nOrder,[49 51]/100,'stop');
[ecgFullMalabFiltered1,d1]=filter(b2,a2,ecgFullMalabFiltered);
figure
plot(ecgFullMalabFiltered1)
[ecgFullMalabFiltered,d2]=filter(b1,a1,ecgFullMalabFiltered1(3:end));
figure
plot(ecgFullMalabFiltered)
%[ecgFullMalabFiltered3]=filter(z*k,p,ecgFullMalabFiltered1);
%[ecgFullMalabFiltered2,d2]=filter(b2,a2,ecgFullMalabFiltered1(1:end));
%[ecgFullMalabFiltered3,d3]=filter(b3,a3,ecgFullMalabFiltered2(1:end));
%ecgFullMalabFiltered=ecgFullMalabFiltered3(3:end);
%ecgFullMalabFilteredFetched=ecgFullMalabFiltered(nStart:end);
end
if 1
figure;
hold on
plot((0:length(ecgFullNF_cutted)-1)*1/Fs,ecgFullNF_cutted*(12.247e-6)/8/5*1000,'-r')
plot((0:length(ecgFullMalabFiltered)-1)*1/Fs,ecgFullMalabFiltered*(12.247e-6)/8/5*1000,'-b')
xlabel('t,c'),ylabel('АмлитудаЭКГ,мB'),grid,legend('Безфильтра','Сфильтром')
title('Нефильтрованный и фильтрованный ЭКГ сигналы')
hold off
ecgFullMalabFilteredFetched=ecgFullMalabFiltered;
end
nStart=1;%
ecgV1=ecgFullNF_cutted(nStart:end)*(12.247e-6)/8/9.5*1000;
ecgV2=ecgFullMalabFilteredFetched*(12.247e-6)/8/9.5*1000;
fetchSig=ecgFullMalabFilteredFetched(1:Fs);%Находимпервыйпик
HRM_time=find(max(fetchSig)==ecgFullMalabFilteredFetched);%Находимеговремя
startInd=HRM_time+11;
while (length(ecgFullMalabFilteredFetched)-startInd>Fs)
fetchSig=ecgFullMalabFilteredFetched((startInd):(startInd+Fs));
tekMax=find(max(fetchSig)==ecgFullMalabFilteredFetched);
if ((tekMax-HRM_time(end))>Fs/2)
HRM_time=[HRM_timetekMax];
startInd=tekMax+10;
else startInd=tekMax+10;end
endwhile
%HRM_time=[2:length(HRM_time)];
HRM=[];
for m=1:length(HRM_time)-1
HRM=[HRM 60/(HRM_time(m+1)-HRM_time(m))*Fs];
endfor
HRM_mean=mean(HRM);
figure;
plot(0:length(HRM)-1,[HRM],'-ob'),grid,title('HRM')
xlabel('interval,n'),ylabel('HR, beats/min')
legend(['HRM mean=' num2str(HRM_mean)])
figure;
hold on
%tEcg=(0:length(ecgV1)-1)*1/Fs;
plot((0:length(ecgV1)-1)*1/Fs,ecgV1)%not filtered
plot((0:length(ecgV2)-1)*1/Fs,ecgV2)%filtered
legend('recorded ECG','filtered ECG')
grid,xlabel('t,c'),ylabel('ЭКГсигнал,мB')
hold off
%FFT
fftEcg1=abs(fft(ecgV1));fftEcg0=fftEcg1(1);fftEcg1(1)=0;
fftEcg2=abs(fft(ecgV2));
L=length(fftEcg1)/2;
figure;
subplot(2,1,1)
plot((0:L)/(2*L)*Fs,fftEcg1(1:L+1)/(2*L))%not filtered
xlabel('f,Гц'),ylabel('Амлитудагармоник,мB'),grid
title(['Нефильтрованный ЭКГ сигнал без постоянной составляющей(' num2str(fftEcg0/(2*L)) ' B)'])
subplot(2,1,2)
plot((0:L)/(2*L)*Fs,fftEcg2(1:L+1)/(2*L))%filtered
xlabel('f,Гц'),ylabel('Амлитудагармоник,мB'),grid
title('Фильтрованный ЭКГ сигнал')
%Записываем в файл данные
save -mat7-binary 'ecg_data.mat' 'ecgV2';
end
Скрипт программы для работы с ФПГ сигналом
clc
clear all
close all
pkg load signal
ppgAll=csvread('7.csv');
%3,4 ppg
%5 not filtering ecg
Fs=200;%Частота дискретизации
ppgRed=ppgAll(2:end,4);%4 столбец красный
ppgIRed=ppgAll(2:end,3);%3 инфракрасный
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if 1 % комментарий fft
%Plot 2000 samples
figure;
hold on
plot(ppgRed,'-b')
ppgRed1000=ppgRed(8000:10000)';
ppgIRed1000=ppgIRed(8000:10000)';
fftRed=abs(fft(ppgRed1000))/length(ppgRed1000);fftRed0=fftRed(1);fftRed(1)=0;
fftIRed=abs(fft(ppgIRed1000))/length(ppgIRed1000);fftIRed0=fftIRed(1);fftIRed(1)=0;
L=length(fftRed)/2;
figure;
subplot(2,1,1)
plot((0:L/5)/2/L*Fs,fftRed(1:(L/5+1))),legend(['Ampl(0)=' num2str(fftRed0)]),grid
title('Red light AC')
xlabel('t'),ylabel('Amplitude')
subplot(2,1,2)
plot((0:L/5)/2/L*Fs,fftIRed(1:(L/5+1))),legend(['Ampl(0)=' num2str(fftIRed0)]),grid
title('IRed light AC')
xlabel('t'),ylabel('Amplitude')
%
order=6;
wCutoff=10;
Wn=wCutoff/(Fs/2);
[b a] = butter(order,Wn,'low');
%f_filt=0:(Fs/2)/1000:Fs/2;
%[H w]=freqz(b,a,1000);
%figure;
%plot(w,10*log10(abs(H)),'-b')
[ppgRed1000Filt,delay]=filter(b,a,ppgRed1000);
figure;
hold on
plot(ppgRed1000,'-b')
plot(ppgRed1000Filt(14:end),'-r')
grid
hold off
endif
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if 1
%Фильтр
order=6;%порядок
wCutoff=10;%Частота среза
Wn=wCutoff/(Fs/2);
[b a] = butter(order,Wn,'low');
%Algorithm
nStart=8000;
nEnd=15000;
ppgRedFiltered=filter(b,a,ppgRed(nStart:nEnd+order*2));
ppgIRedFiltered=filter(b,a,ppgIRed(nStart:nEnd+order*2));
%не сдвинутые во времени, фильтрованные отсчеты с 8000 до 15000
ppgRed30s=ppgRedFiltered(2*order:end)';
ppgIRed30s=ppgIRedFiltered(2*order:end)';
%Compute SpO2
%Firstly: search for minimum value - dc value, start algorithm
%v1Red - minimum 1
%v2Red - maximum 1
%v3Red - minimum 2
%v4Red - maximum 2
v1Red=0;v2Red=0;v3Red=0;v4Red=0;
v1IRed=0;v2IRed=0;v3IRed=0;v4IRed=0;
vRed=0;errorVRed=0;
vIRed=0;errorVIRed=0;
flag=0;
RedAc=[];RedDc=[];IRedAc=[];IRedDc=[];
nakR=[];nakIR=[];
tK=[];tK1=0;tK2=0;tK3=0;tK4=0;
counter=0;
stepCheck=10;
for k=1:length(ppgIRed30s)
%Red
vNewRed=(ppgRed30s(k));
vNewIRed=(ppgIRed30s(k));
switch (flag)
case 0
if (vNewIRed>vIRed)
if(counter<stepCheck)
if (vIRed<errorVIRed)
counter=0;
errorVRed=vRed;
errorVIRed=vIRed;
tK1=k-1;
endif
else
v1IRed=errorVIRed;
v1Red=errorVRed;
flag=1;
counter=0;
endif
counter=counter+1;
endif%search minimum
%
case 1
if (vNewIRed<vIRed)
if(counter<stepCheck)
if (vIRed>errorVIRed)
counter=0;
errorVRed=vRed;
errorVIRed=vIRed;
tK2=k-1;
endif
else
v2Red=errorVRed;
v2IRed=errorVIRed;
flag=2;
counter=0;
endif
counter=counter+1;
endif%search minimum
%
case 2
if (vNewIRed>vIRed)
if(counter<stepCheck)
if (vIRed<errorVIRed)
counter=0;
errorVRed=vRed;
errorVIRed=vIRed;
tK3=k-1;
endif
else
if (v1IRed>errorVIRed)
flag=1;
tK1=tK3;
v1Red=errorVRed;
v1IRed=errorVIRed;
else
v3Red=errorVRed;
v3IRed=errorVIRed;
flag=3;
endif