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

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

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

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

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

Кафедра биотехнических систем

отчет

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

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

Тема: СПЕКТРАЛЬНЫЙ АНАЛИЗ ЭЭГ

Вариант 1

Студенты гр. 7501

Басалай К.А.

Фалевская А.А.

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

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

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

2019

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

И сходные данные:

Обработка результатов работы:

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

Код программы:

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):

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

Код программы:

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])

Г рафическое окно:

Выводы:

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

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