МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра биотехнических систем и технологий
отчет
по лабораторной работе №4
по дисциплине «Методы обработки и анализа биомедицинских сигналов и данных»
Тема: Спектральный анализ ЭКГ
Вариант 4
Студентки гр. 0502 |
|
Лиоско Е.П. Потько А.А. |
Преподаватель |
|
Калиниченко А.Н. |
Санкт-Петербург
2022
Цель работы:
Исследование разложения по методу БПФ, изучение спектров сигналов ЭКГ в норме и при различных патологиях.
Задачи работы:
Рассчитать и исследовать спектральные оценки тестового сигнала. Построить графики сигнала, а также амплитудного спектра и СПМ.
Рассчитать спектральные оценки фрагментов ЭКГ, соответствующих различным видам сердечного ритма.
Часть 1. Расчет спектральных оценок для тестового сигнала
Текст программы №1:
clc;
clear all;
close all;
X0=0; % Координата “x” (на экране) нижнего левого угла окна
Y0=0; % Координата “y” (на экране) нижнего левого угла окна
W0=1800; % Ширина окна
H0=800; % Высота окна
figure('Position',[X0,Y0,W0,H0]) % Создание окна
x1=50; % Координата "x" (в окне) нижнего левого угла 1-го поля
dx=50; % Расстояние по “x” между 1-м и 2-м полями
y1=100; % Координата "y" (в окне) нижнего левого угла 1-го поля
w=335; % Ширина 1-го и 2-го полей вывода графиков
h=167; % Высота 1-го и 2-го полей вывода графиков
hAxes=zeros(3,3);
for i=[1 2 3]
% Создание 1-го поля:
hAxes(i,1)=axes('Units','pixels','Position',[x1,y1+(i-1)*(50+h),w+w,h]);
% Создание 2-го поля:
hAxes(i,2)=axes('Units','pixels','Position',[x1+dx+w+w,y1+(i-1)*(50+h),w,h]);
% Создание 3-го поля:
hAxes(i,3)=axes('Units','pixels','Position',[x1+dx+dx+w+w+w,y1+(i-1)*(50+h),w,h]);
end
axes(hAxes(3,1))
tmax=2.5;
Fs=180;
T=1/Fs;
t=0:T:tmax-T;
s=0.15+0.8*sin(2*pi*10*t)+1.5*sin(2*pi*16*t);
plot(t,s)
title('Сумма двух синусоид и константы')
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
axes(hAxes(3,2))
df=Fs/N; % Шаг по оси частот
for j=1:(N/2)
f(j)=df*(j-1); % Расчет аргумента для построения графика
end
stem(f,as(1:N/2),'.') % График амплитудного спектра
title('График амплитудного спектра 1')
axes(hAxes(3,3))
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
plot (f,psd(1:(N/2)))% График СПМ
title('График СПМ 1')
m=mean(s);
s0=s-m;
axes(hAxes(2,1))
plot(t,s0)
title('Сигнал без среднего значения')
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
axes(hAxes(2,2))
df=Fs/N; % Шаг по оси частот
for j=1:(N/2)
f(j)=df*(j-1); % Расчет аргумента для построения графика
end
stem(f,as(1:N/2),'.') % График амплитудного спектра
title('График амплитудного спектра 2')
axes(hAxes(2,3))
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
plot (f,psd(1:(N/2)))% График СПМ
title('График СПМ 2')
w=hamming(N);
for j=1:N
sw(j)=s0(j)*w(j);
end
axes(hAxes(1,1))
plot(t,sw)
hold on
plot(t,w)
title('График оконной функции и сигнала, умноженного на нее')
grid on % Нанесение координатной сетки на график
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
axes(hAxes(1,2))
df=Fs/N; % Шаг по оси частот
for j=1:(N/2)
f(j)=df*(j-1); % Расчет аргумента для построения графика
end
stem(f,as(1:N/2),'.') % График амплитудного спектра
title('График амплитудного спектра 3')
axes(hAxes(1,3))
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
plot (f,psd(1:(N/2)))% График СПМ
title('График СПМ 3')
Рисунок №1 – Спектральные оценки тестового сигнала