Какой метод обработки биомедицинских сигналов и данных иллюстрирует данная работа?
Происходит цифровая фильтрация дискретного сигнала, что математически можно реализовать с помощью разностного уравнения.
По заданному фрагменту ЭКГ строятся график сигнала после фильтрации.
Опишите алгоритм реализации используемого метода (последовательность действий, формулы)
Фильтрованный сигнал был получен с помощью постановки значений из файла фрагмента ЭКГ в разностное уравнение (по АЧХ фильтра)
Что показано на каждом из полученных графиков, какие величины отложены по осям координат, в каком масштабе и в каких единицах измерения?
Тот же 1 вопрос из 10
Какие биомедицинские сигналы используются в данной работе, каково их происхождение, какой у них диапазон возможных значений и частотный состав, в каких единицах они измеряются?
ЭКГ – электрокардиограмма - является электрическим проявлением сократительной активности сердца и может быть достаточно легко записана с помощью поверхностных электродов, помещенных на конечности или грудь.
Происхождение ЭКГ:
Чему равняется частота дискретизации и интервал дискретизации сигналов, используемых в работе?
Программа 2: Fs=500 Гц ; Т=2 мс
Что означает каждая из команд программы, какие действия она выполняет, что является входными и выходными данными команды?
clc;
clear;
close all;
%Алгоритм обнаружения QRS-комплексов ЭКГ
S=load('W6_04.txt'); % сигнал ЭКГ и 2 пульсоксиметрических сигнала
N=length(S);
ECG=S(1:N,1);
Puls_R=S(1:N,2); %массив красного сигнала
Puls_IR=S(1:N,3); % массив инфракрасного сигнала
X0=0; % Координата “x” (на экране) нижнего левого угла окна
Y0=0; % Координата “y” (на экране) нижнего левого угла окна
W0=1800; % Ширина окна
H0=800; % Высота окна
figure('Position',[X0,Y0,W0,H0]) % Создание окна
x1=50; % Координата "x" (в окне) нижнего левого угла 1-го поля
y1=100; % Координата "y" (в окне) нижнего левого угла 1-го поля
dy=50;
w=1200; % Ширина
h=100; % Высота
hAxes1=axes('Units','pixels','Position',[x1,y1,w,2*h]);
hAxes2=axes('Units','pixels','Position',[x1,y1+2*h+dy,w,h]);
hAxes3=axes('Units','pixels','Position',[x1,y1+3*h+2*dy,w,h]);
hAxes4=axes('Units','pixels','Position',[x1,y1+4*h+3*dy,w,h]);
%Вывод пульсоксиметрических сигналов
axes(hAxes1)
Fs=500;
T=1/Fs;
tmax=length(S)*T;
t=0:T:tmax-T;
plot (t,Puls_R+50) %красный сигнал
hold on
plot (t,Puls_IR-450) % инфракрасный сигнал
ylim([-800 400])
xlim([0 tmax])
title ('Пульсоксиметрические сигналы')
%Вывод графика ЭКГ
axes(hAxes4)
plot (t,ECG)
xlim([0 tmax])
title ('Сигнал ЭКГ')
%Дифференцирование сигнала ЭКГ
axes(hAxes3)
X=zeros(1,N);
Y=zeros(1,N);
for n=1:N
X(n)=ECG(n);
end
for n=3:N
Y(n)=X(n)-X(n-2); % дифференцирование сигнала
end
hold on
plot (t,Y,'k')
ylim([-150 100])
xlim([0 tmax])
title ('Дифференцированный сигнал ЭКГ')
%Рассчет массива модулей отсчетов диф. сигнала
axes(hAxes2)
ECG_Dif=abs(Y); %массив модулей отсчетов диф. сигнала
Limit=35; % только QRS комплекс превышает данный порог, остальной сигнал - нет
XLimit(1)=0; % первая точка линии х
XLimit(2)=tmax-T; % последняя точка линии х
YLimit(1:2)=Limit; % координаты по y для линии
line(XLimit, YLimit) % построение линии
Jmax=100; % ищем QRS комплексы
k=0;
j=Jmax;
for i=1:N
j=j+1;
if (ECG_Dif(i)>Limit)&&(j>Jmax)
k=k+1;
QRS (k)=i;
j=0;
end
end
hold on
plot (t,ECG_Dif)
xlim([0 tmax])
title ('Массив модулей отсчетов диф-го и взятого по модулю сигнала ЭКГ')
%Расчет уровня насыщения крови кислородом
axes(hAxes1)
YLimits=get(hAxes1,'YLim');
for i=1:k
XLimits(1:2)=QRS(i)*T;
HLine=line(XLimits,YLimits);
set (HLine,'LineStyle','--')
end
%Средний размах пульсоксиметрических сигналов
D1=0;
for i=1:(k-1)
clear m1
m1=Puls_R(QRS(i):QRS(i+1));
D1=D1+(max(m1)-min(m1));
end
D1=D1/(k-1);% средний размах 1го сигнала
D2=0;
for i=1:(k-1)
clear m2
m2=Puls_IR(QRS(i):QRS(i+1));
D2=D2+(max(m2)-min(m2));
end
D2=D2/(k-1);
a=D2/D1;
SaO2=(0.872-0.16*a)*100/(0.14*a+0.754);
hTxt1=uicontrol('Style','text','String','SaO2=',...
'Position',[2*x1+w,2*h,x1,x1/2],'BackgroundColor',[1 1 1]);
hEd=uicontrol('Style','edit','Position', [3*x1+w,2*h,x1,x1/2],...
'BackgroundColor',[1 1 1],'HorizontalAlignment','left');
set(hEd,'String',num2str(SaO2))