МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра биотехнических систем
отчет
по лабораторной работе №4
по дисциплине «Методы обработки и анализа биомедицинских сигналов и данных»
Тема: СПЕКТРАЛЬНЫЙ АНАЛИЗ ЭЭГ
Вариант 1
Студенты гр. 7501 |
|
Басалай К.А. |
|
Фалевская А.А. |
|
Преподаватель |
|
Калиниченко А. Н. |
Санкт-Петербург
2019
Цель работы: исследование разложения сигнала по методу быстрого преобразования Фурье (БПФ), изучение спектров сигналов ЭКГ в норме и при различных патологиях.
И сходные данные:
Обработка результатов работы:
Расчет спектральных оценок тестового сигнала
Код программы:
clc
clear all
close all
%Cоздание графического окна с 9 графиками
x0=200;
y0=150;
w0=1150;
h0=600;
figure('Color',[1 1 1],'Position',[x0,y0,w0,h0])
x1=50;
y1=50;
dy=30;
dx=30;
w=500;
w2=250;
h=160;
hAxes3=axes('Units','pixels','Position',[x1,y1,w,h]);
hAxes2=axes('Units','pixels','Position',[x1,y1+h+dy,w,h]);
hAxes1=axes('Units','pixels','Position',[x1,y1+2*h+2*dy,w,h]);
hAxes6=axes('Units','pixels','Position',[x1+w+dx,y1,w2,h]);
hAxes5=axes('Units','pixels','Position',[x1+w+dx,y1+h+dy,w2,h]);
hAxes4=axes('Units','pixels','Position',[x1+w+dx,y1+2*h+2*dy,w2,h]);
hAxes9=axes('Units','pixels','Position',[x1+w+w2+2*dx,y1,w2,h]);
hAxes8=axes('Units','pixels','Position',[x1+w+w2+2*dx,y1+h+dy,w2,h]);
hAxes7=axes('Units','pixels','Position',[x1+w+w2+2*dx,y1+2*h+2*dy,w2,h]);
%Расчет тестового сигнала
Fs=100;
A1=1.5;
f1=5;
A2=0.8;
f2=13;
C=0.2;
tmax=1;
T=1/Fs;
t=0:T:tmax-T;
s=C+A1*sin(2*pi*f1*t)+A2*sin(2*pi*f2*t);
axes(hAxes1)
plot(t,s)
grid on
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
axes(hAxes4)
stem(f,as(1:N/2),'.')
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
axes(hAxes7)
plot(f,psd(1:N/2))
%Расчет сигнала с удаленным средним
m=mean(s);
s0=s-m;
axes(hAxes2);
plot(t,s0)
grid on
ft=fft(s0);
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
axes(hAxes5)
stem(f,as(1:N/2),'.')
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
axes(hAxes8)
plot(f,psd(1:N/2))
%Расчет сигнала с удаленным средним на оконную функцию
w=hamming(N);
for j=1:N
sw(j)=s0(j)*w(j);
end
axes(hAxes3);
plot(t,sw)
grid on
hold on
plot(t,w,'r')
ft=fft(sw);
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
axes(hAxes6)
stem(f,as(1:N/2),'.')
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
axes(hAxes9)
plot(f,psd(1:N/2))
Графическое окно:
Г рафическое окно, которое было получено в результате изменения частоты одной из синусоид на нецелое число (f1=5 -> f1=4.3):
Расчет спектральных оценок для фрагментов ЭКГ.
Код программы:
clc
clear all
close all
% Cоздание графического окна с 9 графиками
x0=200;
y0=150;
w0=1150;
h0=600;
figure('Color',[1 1 1],'Position',[x0,y0,w0,h0])
x1=50;
y1=50;
dy=30;
dx=30;
w=500;
w2=250;
h=160;
hAxes3=axes('Units','pixels','Position',[x1,y1,w,h]);
hAxes2=axes('Units','pixels','Position',[x1,y1+h+dy,w,h]);
hAxes1=axes('Units','pixels','Position',[x1,y1+2*h+2*dy,w,h]);
hAxes6=axes('Units','pixels','Position',[x1+w+dx,y1,w2,h]);
hAxes5=axes('Units','pixels','Position',[x1+w+dx,y1+h+dy,w2,h]);
hAxes4=axes('Units','pixels','Position',[x1+w+dx,y1+2*h+2*dy,w2,h]);
hAxes9=axes('Units','pixels','Position',[x1+w+w2+2*dx,y1,w2,h]);
hAxes8=axes('Units','pixels','Position',[x1+w+w2+2*dx,y1+h+dy,w2,h]);
hAxes7=axes('Units','pixels','Position',[x1+w+w2+2*dx,y1+2*h+2*dy,w2,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);
m1=mean(Norma);
Norma0=Norma-m1;
N=tmax*Fs;
w1=hamming(N);
for j=1:N
sw1(j)=Norma0(j)*w1(j);
end
m2=mean(VTach);
VTach0=VTach-m2;
w2=hamming(N);
for j=1:N
sw2(j)=VTach0(j)*w2(j);
end
m3=mean(VFibr);
VFibr0=VFibr-m3;
w3=hamming(N);
for j=1:N
sw3(j)=VFibr0(j)*w3(j);
end
axes(hAxes1)
plot(t,Norma)
grid on
hold on
plot(t,sw1)
axes(hAxes2)
plot(t,VTach)
grid on
hold on
plot(t,sw2)
axes(hAxes3)
plot(t,VFibr)
grid on
hold on
plot(t,sw3)
%Расчет по массиву с нормальный ритмом
ft=fft(sw1);
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
axes(hAxes4)
stem(f,as(1:N/2),'.')
xlim([0,20])
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
axes(hAxes7)
plot(f,psd(1:N/2))
xlim([0,20])
%Расчет по массиву желудочковой тахикардии
ft=fft(sw2);
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
axes(hAxes5)
stem(f,as(1:N/2),'.')
xlim([0,20])
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
axes(hAxes8)
plot(f,psd(1:N/2))
xlim([0,20])
% Расчет по массиву с фибрилляцией желудочков
ft=fft(sw3);
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
axes(hAxes6)
stem(f,as(1:N/2),'.')
xlim([0,20])
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
axes(hAxes9)
plot(f,psd(1:N/2))
xlim([0,20])
Г рафическое окно:
Выводы:
В ходе данной работы было исследовано разложение сигнала по методу БПФ. При этом для получения адекватных результатов необходимо выполнить последовательность процедур: удалить из сигнала среднее значение, умножить полученный сигнал на сглаживающее окно. Алгоритм заметно снижает спектральные утечки, вызванные ограниченностью сигнала.