Uploaded by Александр Сумароков

Сумароков ЛР №4 Отчет v2

advertisement
МИНОБРНАУКИ РОССИИ
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ
ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
«ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)
Кафедра БТС
ОТЧЕТ
по лабораторной работе №4
по дисциплине «Методы обработки биомедицинских сигналов и данных»
Тема: СПЕКТРАЛЬНЫЙ АНАЛИЗ ЭКГ
ВАРИАНТ 5
Студент гр. 8503
Сумароков А.А.
Преподаватель
Калиниченко А.Н.
Санкт-Петербург
2020
1. Цель работы:
Исследование разложения сигнала по методу быстрого преобразования
Фурье (БПФ), изучение спектров сигналов ЭКГ в норме и при
различных патологиях;
2. Задание на выполнение работы:
- Рассчитать и исследовать спектральные оценки тестового сигнала;
- Построить графики сигнала, а также амплитудного спектра и
спектральной плотности мощности (СПМ);
- Рассчитать спектральные оценки для фрагментов ЭКГ,
соответствующих трем различным видам сердечного ритма;
3. Основные теоретические положения:
При исследовании медико-биологических сигналов часто
используются методы спектрального анализа, позволяющие получить
численные оценки частотного состава сигнала. Наиболее
распространен спектральный анализ, основанный на дискретном
преобразовании Фурье:
𝑁−1
2𝜋
𝑋(𝑘 ) = ∑ 𝑥 (𝑛) ∗ 𝑒 −𝑗 𝑁 𝑛𝐾
𝑛=0
где x(n) – отсчёты дискретного сигнала, N – число отсчётов, k = 0,1,..
N-1 – номера частотных составляющих разложения. В данной работе
предлагается воспользоваться методом быстрого преобразования
Фурье (БПФ).
При нормальном ритме в сигнале наблюдаются кратковременные
импульсы (QRS-комплексы), при желудочковой тахикардии частота
колебаний значительно выше и QRS-комплексы расширены, при
фибрилляции желудочков сигнал близок по форме к синусоиде.
4. Данные варианта:
Fs, Гц
A1
F1, Гц
A2
F2, Гц
C
tmax, с
200
0,7
5
0,9
10
0,35
1,2
5. Код программы:
close all
clear all
Fs=200;
A1=0.7;
F1=5;
A2=0.9;
F2=10;
C=0.35;
tmax=1.2;
X0=80;
Y0=40;
W0=1250;
H0=640;x1=50;
y1=430;
dx=30;
dy=30;
w1=270;
w2=40;
h1=150;
h2=15;
figure('Position',[X0,Y0,W0,H0])
hAxes1=axes('Units','pixels','Position',[x1,y1,2*w1,h1]);
hAxes2=axes('Units','pixels','Position',[x1+2*w1+dx,y1,w1,h
1]);
hAxes3=axes('Units','pixels','Position',[x1+3*w1+2*dx,y1,w1
,h1]);
hAxes4=axes('Units','pixels','Position',[x1,y1-h1dy,2*w1,h1]);
hAxes5=axes('Units','pixels','Position',[x1+2*w1+dx,y1-h1dy,w1,h1]);
hAxes6=axes('Units','pixels','Position',[x1+3*w1+2*dx,y1h1-dy,w1,h1]);
hAxes7=axes('Units','pixels','Position',[x1,y1-2*h12*dy,2*w1,h1]);
hAxes8=axes('Units','pixels','Position',[x1+2*w1+dx,y12*h1-2*dy,w1,h1]);
hAxes9=axes('Units','pixels','Position',[x1+3*w1+2*dx,y12*h1-2*dy,w1,h1]);
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)))
Программа, отвечающая за анализ ЭКГ:
clear all;
close all;
X0=80;
Y0=40;
W0=1250;
H0=640;
figure('Position',[X0,Y0,W0,H0])
x1=50;
y1=430;
dx=30;
dy=30;
w1=270;
w2=40;
h1=150;
h2=15;
hAxes1=axes('Units','pixels','Position',[x1,y1,2*w1,h1]);
hAxes4=axes('Units','pixels','Position',[x1,y1-h1dy,2*w1,h1]);
hAxes7=axes('Units','pixels','Position',[x1,y1-2*h12*dy,2*w1,h1]);
hAxes2=axes('Units','pixels','Position',[x1+2*w1+dx,y1,w1,h
1]);
hAxes5=axes('Units','pixels','Position',[x1+2*w1+dx,y1-h1dy,w1,h1]);
hAxes8=axes('Units','pixels','Position',[x1+2*w1+dx,y12*h1-2*dy,w1,h1]);
hAxes3=axes('Units','pixels','Position',[x1+3*w1+2*dx,y1,w1
,h1]);
hAxes6=axes('Units','pixels','Position',[x1+3*w1+2*dx,y1h1-dy,w1,h1]);
hAxes9=axes('Units','pixels','Position',[x1+3*w1+2*dx,y12*h1-2*dy,w1,h1]);
ECG=load('W4_05.txt');
Fs=250;
tmax=4;
T=1/Fs;
t=0:T:tmax-T;
Norma=ECG(:,1);
VTach=ECG(:,2);
VFibr=ECG(:,3);
%Расчеты для Норм
N=tmax*Fs;
m=mean(Norma);
Norma0=Norma-m;
w=hamming(N);
for j=1:N
Normaw(j)=Norma0(j)*w(j);
end
ft=fft(Normaw);
for j=1:N
if (j==1)
asN(j)=sqrt(real(ft(j))^2+imag(ft(j))^2)/N;
else
asN(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)
psdN(j)=1/N*(real(ft(j))^2+imag(ft(j))^2)/Fs;
else
psdN(j)=2/N*(real(ft(j))^2+imag(ft(j))^2)/Fs;
end
end
m=mean(Norma);
Norma0=Norma-m;
w=hamming(N);
for j=1:N
Normaw(j)=Norma0(j)*w(j);
end
%Расчеты для тахикардии
ftT=fft(VTach);
N=tmax*Fs;
mT=mean(VTach);
VTach0=VTach-mT;
for j=1:N
VTachw(j)=VTach0(j)*w(j);
end
ftT=fft(VTachw);
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;
for j=1:N
VTachw(j)=VTach0(j)*w(j);
end
%Расчеты для фибрилляции
mF=mean(VFibr);
VFibr0=VFibr-mF;
for j=1:N
VFibrw(j)=VFibr0(j)*w(j);
end
ftF=fft(VFibrw);
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
for j=1:N
VFibrw(j)=VFibr0(j)*w(j);
end
%Графики
axes(hAxes1)
plot(t,Norma)
hold on
plot(t,Normaw)
grid on
axes(hAxes2)
stem(f,asN(1:N/2),'.')
grid on
set(hAxes2,'Xlim',[0 20])
axes(hAxes3)
plot(f,psdN(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),'.')
grid on
set(hAxes5,'Xlim',[0 20])
axes(hAxes6)
plot(f,psdT(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),'.')
grid on
set(hAxes8,'Xlim',[0 20])
axes(hAxes9)
plot(f,psdF(1:(N/2)))
grid on
set(hAxes9,'Xlim',[0 20])
6.
Графические данные:
Рис.1 – тестовые сигналы, их амплитудные спектры и СПМ;
Рис.2 – сигналы ЭКГ, их амплитудные спектры и СПМ;
7. Выводы по работе:
В ходе данной работы мы изучили спектральный анализ и применили
его к ЭКГ, построив амплитудные спектры и графики спектральной
плотности мощности.
Была проверена действенность метода вычитания среднего для
избавления от составляющей сигнала на нулевой частоте.
Также была изучена работа оконной функции Хэмминга, ее влияние на
спектр сигнала. Результатом его работы является снижение
спектральной утечки, но в то же время происходит и ухудшение
спектрального разрешения.
Download