Скачиваний:
39
Добавлен:
08.04.2022
Размер:
410.36 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра БТС

отчет

по лабораторной работе №4

по дисциплине «Методы обработки и анализа биомедицинских сигналов и данных»

Тема: Спектральный анализ ЭКГ

Студентка гр. 7502

Екимова Н.В.

Студент гр.7502

Дегилевич А.А.

Студент гр.7502

Звягинцев Г.Р.

Преподаватель

Калиниченко А.Н.

Санкт-Петербург

2019

ЛАБОРАТОРНАЯ РАБОТА №4

«СПЕКТРАЛЬНЫЙ АНАЛИЗ ЭКГ»

Цель работы: исследование разложение сигнала по методу быстрого преобразования Фурье (БПФ), изучение спектров сигнала ЭКГ в норме и при различных патологиях.

Основные положения

При исследовании медико-биологических сигналов часто используются методы спектрального анализа, позволяющие получить численные оценки частотного состава сигнала. Наиболее распространен спектральный анализ, основанный на дискретном преобразовании Фурье:

где x (n)- отсчеты дискретного сигнала,N - число отсчетов, а k= 0, 1, ..., N-1 - номера частотных составляющих разложения. Для ускорения расчета применяют алгоритмы быстрого преобразования Фурье (БПФ).

В данной работе предлагается воспользоваться этим методом для исследования ЭКГ при трех различных видах сердечного ритма: нормальном ритме (часть a рисунка), желудочковой тахикардии (часть б) и фибрилляции желудочков (часть в).

При нормальном ритме в сигнале наблюдаются кратковременные импульсы (QRS-комплексы), при желудочковой тахикардии частота колебаний значительно выше и QRS-комплексы расширены, при фибрилляции желудочков сигнал близок по форме к синусоиде.

Задание на выполнение работы

  • Рассчитать и исследовать спектральные оценки тестового сигнала. Построить графики сигнала, а также амплитудного спектра и спектральной плотности мощности (СПМ).

  • Рассчитать спектральные оценки для фрагментов ЭКГ, соответствующих трем различным видам сердечного ритма.

РАСЧЕТ ФУНКЦИЙ И ВЫВОД ГРАФИКОВ

  1. Расчет спектральных оценок для тестового сигнала.

Создадим программу, которая будет рассчитывать спектральные оценки для тестовых сигналов.

close;

clear;

X0=250;

Y0=100;

W0=1200;

H0=800;

figure('Position',[X0,Y0,W0,H0])

x1=60;

y1=60;

dx=50;

dy=50;

w=250;

h=200;

hAxes1=axes('Units','pixels','Position',[x1,y1+2*h+2*dy,2*w,h]);

hAxes2=axes('Units','pixels','Position',[x1+dx+2*w,y1+2*h+2*dy,w,h]);

hAxes3=axes('Units','pixels','Position',[x1+2*dx+3*w,y1+2*h+2*dy,w,h]);

hAxes4=axes('Units','pixels','Position',[x1,y1+h+dy,2*w,h]);

hAxes5=axes('Units','pixels','Position',[x1+dx+2*w,y1+h+dy,w,h]);

hAxes6=axes('Units','pixels','Position',[x1+2*dx+3*w,y1+h+dy,w,h]);

hAxes7=axes('Units','pixels','Position',[x1,y1,2*w,h]);

hAxes8=axes('Units','pixels','Position',[x1+dx+2*w,y1,w,h]);

hAxes9=axes('Units','pixels','Position',[x1+2*dx+3*w,y1,w,h]);

Fs=100;

tmax=1;

A1=1.5;

F1=5;

% F1=6.969;

A2=0.8;

F2=13;

C=0.2;

T=1/Fs;

t=0:T:tmax-T;

S=C+A1*sin(2*pi*F1*t)+A2*sin(2*pi*F2*t);

Asum=A1+A2;

ft=fft(S);

N=tmax*Fs;

for j=1:N

if (j==1)

as(j)=sqrt(real(ft(j))^2+imag(ft(j))^2)/N;

else

as(j)=sqrt(real(ft(j))^2+imag(ft(j))^2)/N*2;

end;

end;

df=Fs/N;

for j=1:(N/2)

f(j)=df*(j-1);

end;

for j=1:N

if (j==1)

psd(j)=1/N*(real(ft(j))^2+imag(ft(j))^2)/Fs;

else

psd(j)=2/N*(real(ft(j))^2+imag(ft(j))^2)/Fs;

end;

end;

m=mean(S);

S0=S-m;

ft0=fft(S0);

for j=1:N

if (j==1)

as0(j)=sqrt(real(ft0(j))^2+imag(ft0(j))^2)/N;

else

as0(j)=sqrt(real(ft0(j))^2+imag(ft0(j))^2)/N*2;

end;

end;

for j=1:N

if (j==1)

psd0(j)=1/N*(real(ft0(j))^2+imag(ft0(j))^2)/Fs;

else

psd0(j)=2/N*(real(ft0(j))^2+imag(ft0(j))^2)/Fs;

end;

end;

w=hamming(N);

for j=1:N

Sw(j)=S0(j)*w(j);

end;

ftw=fft(Sw);

for j=1:N

if (j==1)

asw(j)=sqrt(real(ftw(j))^2+imag(ftw(j))^2)/N;

else

asw(j)=sqrt(real(ftw(j))^2+imag(ftw(j))^2)/N*2;

end;

end;

for j=1:N

if (j==1)

psdw(j)=1/N*(real(ftw(j))^2+imag(ftw(j))^2)/Fs;

else

psdw(j)=2/N*(real(ftw(j))^2+imag(ftw(j))^2)/Fs;

end;

end;

axes(hAxes1)

plot(t,S)

grid on

set(hAxes1,'Ylim',[C-Asum C+Asum])

axes(hAxes2)

stem(f,as(1:N/2),'.')

axes(hAxes3)

plot(f,psd(1:(N/2)))

axes(hAxes4)

plot(t,S0)

grid on

set(hAxes4,'Ylim',[-Asum Asum])

axes(hAxes5)

stem(f,as0(1:N/2),'.')

axes(hAxes6)

plot(f,psd0(1:(N/2)))

axes(hAxes7)

plot(t,Sw)

hold on

plot(t,w)

grid on

set(hAxes1,'Ylim',[-Asum Asum])

axes(hAxes8)

stem(f,asw(1:N/2),'.')

axes(hAxes9)

plot(f,psdw(1:(N/2)))

Вид программы отображен на Рисунке 1.

Рис.1 Графическое окно тестовой программы

  1. Рассчет спектральных оценок для спектров ЭКГ.

Создадим программу, которая будет читать заданный файл и отображать в графических полях 3 исходных сигнала ЭКГ и рассчитывать их спектральные оценки.

close;

clear;

X0=250;

Y0=100;

W0=1200;

H0=800;

figure('Position',[X0,Y0,W0,H0])

x1=60;

y1=60;

dx=50;

dy=50;

w=250;

h=200;

hAxes1=axes('Units','pixels','Position',[x1,y1+2*h+2*dy,2*w,h]);

hAxes2=axes('Units','pixels','Position',[x1+dx+2*w,y1+2*h+2*dy,w,h]);

hAxes3=axes('Units','pixels','Position',[x1+2*dx+3*w,y1+2*h+2*dy,w,h]);

hAxes4=axes('Units','pixels','Position',[x1,y1+h+dy,2*w,h]);

hAxes5=axes('Units','pixels','Position',[x1+dx+2*w,y1+h+dy,w,h]);

hAxes6=axes('Units','pixels','Position',[x1+2*dx+3*w,y1+h+dy,w,h]);

hAxes7=axes('Units','pixels','Position',[x1,y1,2*w,h]);

hAxes8=axes('Units','pixels','Position',[x1+dx+2*w,y1,w,h]);

hAxes9=axes('Units','pixels','Position',[x1+2*dx+3*w,y1,w,h]);

ECG=load('R4_01.txt');

Fs=250;

tmax=4;

T=1/Fs;

t=0:T:tmax-T;

Norma=ECG(:,1);

VTach=ECG(:,2);

VFibr=ECG(:,3);

ft=fft(Norma);

N=tmax*Fs;

for j=1:N

if (j==1)

as(j)=sqrt(real(ft(j))^2+imag(ft(j))^2)/N;

else

as(j)=sqrt(real(ft(j))^2+imag(ft(j))^2)/N*2;

end;

end;

df=Fs/N;

for j=1:(N/2)

f(j)=df*(j-1);

end;

for j=1:N

if (j==1)

psd(j)=1/N*(real(ft(j))^2+imag(ft(j))^2)/Fs;

else

psd(j)=2/N*(real(ft(j))^2+imag(ft(j))^2)/Fs;

end;

end;

m=mean(Norma);

Norma0=Norma-m;

ft0=fft(Norma0);

for j=1:N

if (j==1)

as0(j)=sqrt(real(ft0(j))^2+imag(ft0(j))^2)/N;

else

as0(j)=sqrt(real(ft0(j))^2+imag(ft0(j))^2)/N*2;

end;

end;

for j=1:N

if (j==1)

psd0(j)=1/N*(real(ft0(j))^2+imag(ft0(j))^2)/Fs;

else

psd0(j)=2/N*(real(ft0(j))^2+imag(ft0(j))^2)/Fs;

end;

end;

w=hamming(N);

for j=1:N

Normaw(j)=Norma0(j)*w(j);

end;

ftw=fft(Normaw);

for j=1:N

if (j==1)

asw(j)=sqrt(real(ftw(j))^2+imag(ftw(j))^2)/N;

else

asw(j)=sqrt(real(ftw(j))^2+imag(ftw(j))^2)/N*2;

end;

end;

for j=1:N

if (j==1)

psdw(j)=1/N*(real(ftw(j))^2+imag(ftw(j))^2)/Fs;

else

psdw(j)=2/N*(real(ftw(j))^2+imag(ftw(j))^2)/Fs;

end;

end;

ftT=fft(VTach);

N=tmax*Fs;

for j=1:N

if (j==1)

asT(j)=sqrt(real(ftT(j))^2+imag(ftT(j))^2)/N;

else

asT(j)=sqrt(real(ftT(j))^2+imag(ftT(j))^2)/N*2;

end;

end;

for j=1:N

if (j==1)

psdT(j)=1/N*(real(ftT(j))^2+imag(ftT(j))^2)/Fs;

else

psdT(j)=2/N*(real(ftT(j))^2+imag(ftT(j))^2)/Fs;

end;

end;

mT=mean(VTach);

VTach0=VTach-mT;

ftT0=fft(VTach0);

for j=1:N

VTachw(j)=VTach0(j)*w(j);

end;

ftTw=fft(VTachw);

for j=1:N

if (j==1)

asTw(j)=sqrt(real(ftTw(j))^2+imag(ftTw(j))^2)/N;

else

asTw(j)=sqrt(real(ftTw(j))^2+imag(ftTw(j))^2)/N*2;

end;

end;

for j=1:N

if (j==1)

psdTw(j)=1/N*(real(ftTw(j))^2+imag(ftTw(j))^2)/Fs;

else

psdTw(j)=2/N*(real(ftTw(j))^2+imag(ftTw(j))^2)/Fs;

end;

end;

ftF=fft(VFibr);

for j=1:N

if (j==1)

asF(j)=sqrt(real(ftF(j))^2+imag(ftF(j))^2)/N;

else

asF(j)=sqrt(real(ftF(j))^2+imag(ftF(j))^2)/N*2;

end;

end;

for j=1:N

if (j==1)

psdF(j)=1/N*(real(ftF(j))^2+imag(ftF(j))^2)/Fs;

else

psdF(j)=2/N*(real(ftF(j))^2+imag(ftF(j))^2)/Fs;

end;

end;

mF=mean(VFibr);

VFibr0=VFibr-mF;

ftF0=fft(VFibr0);

for j=1:N

VFibrw(j)=VFibr0(j)*w(j);

end;

ftFw=fft(VFibrw);

for j=1:N

if (j==1)

asFw(j)=sqrt(real(ftFw(j))^2+imag(ftFw(j))^2)/N;

else

asFw(j)=sqrt(real(ftFw(j))^2+imag(ftFw(j))^2)/N*2;

end;

end;

for j=1:N

if (j==1)

psdFw(j)=1/N*(real(ftFw(j))^2+imag(ftFw(j))^2)/Fs;

else

psdFw(j)=2/N*(real(ftFw(j))^2+imag(ftFw(j))^2)/Fs;

end;

end;

axes(hAxes1)

plot(t,Norma)

hold on

plot(t,Normaw)

grid on

axes(hAxes2)

stem(f,as(1:N/2),'.')

hold on

stem(f,asw(1:N/2),'.')

grid on

set(hAxes2,'Xlim',[0 20])

axes(hAxes3)

plot(f,psd(1:(N/2)))

hold on

plot(f,psdw(1:(N/2)))

grid on

set(hAxes3,'Xlim',[0 20])

axes(hAxes4)

plot(t,VTach)

hold on

plot(t,VTachw)

grid on

axes(hAxes5)

stem(f,asT(1:N/2),'.')

hold on

stem(f,asTw(1:N/2),'.')

grid on

set(hAxes5,'Xlim',[0 20])

axes(hAxes6)

plot(f,psdT(1:(N/2)))

hold on

plot(f,psdTw(1:(N/2)))

grid on

set(hAxes6,'Xlim',[0 20])

axes(hAxes7)

plot(t,VFibr)

hold on

plot(t,VFibrw)

grid on

axes(hAxes8)

stem(f,asF(1:N/2),'.')

hold on

stem(f,asFw(1:N/2),'.')

grid on

set(hAxes8,'Xlim',[0 20])

axes(hAxes9)

plot(f,psdF(1:(N/2)))

hold on

plot(f,psdFw(1:(N/2)))

grid on

set(hAxes9,'Xlim',[0 20])

Вид программы отображен на Рисунке 2.

Рис.2 Графическое отображение программы для расчета спектральных оценок ЭКГ

Вывод

В ходе лабораторной работы были изучены разложения сигнала по методу быстрого преобразования Фурье (БПФ), спектры сигналов ЭКГ в норме и при различных патологиях; были исследованы спектральные оценки тестового сигнала; построены графики сигнала, а также амплитудного спектра и спектральной плотности мощности (СПМ); были рассчитаны спектральные оценки для фрагментов ЭКГ, соответствующим трем различным видам сердечного ритма.

Соседние файлы в папке Лаба 4