Скачиваний:
3
Добавлен:
01.12.2022
Размер:
10.69 Кб
Скачать
clc
clear all
close all

ECG=load('W4_04.txt');
Fs=250;
tmax=4;
T=1/Fs;
t=0:T:tmax-T;
Norma=ECG(:,1);
VTach=ECG(:,2);
VFibr=ECG(:,3);

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))
plot(t,Norma)
title('Нормальный ритм: сигнал в исходном виде и сигнал после удаления среднего и умножения на окно')
grid on % Нанесение координатной сетки на график

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

axes(hAxes(3,2))

df=Fs/N; % Шаг по оси частот
for j=1:(N/2)
f(j)=df*(j-1); % Расчет аргумента для построения графика
end
set (hAxes(3,2),'XLim',[0 20])
stem(f,as(1:N/2),'.') % График амплитудного спектра
title('График амплитудного спектра Нормы')
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
set (hAxes(3,3),'XLim',[0 20])
plot (f,psd(1:(N/2)))% График СПМ
title('График СПМ Нормы')

m=mean(Norma);
Norma0=Norma-m;

w=hamming(N);
for j=1:N
Normaw(j)=Norma0(j)*w(j);
end
hold on
axes(hAxes(3,1))
hold on
plot(t,Normaw)
grid on % Нанесение координатной сетки на график

ft=fft(Normaw); %Расчет БПФ для сигнала
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
hold on
set (hAxes(3,2),'XLim',[0 20])
stem(f,as(1:N/2),'.') % График амплитудного спектра


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
hold on
set (hAxes(3,3),'XLim',[0 20])
plot (f,psd(1:(N/2)))% График СПМ




axes(hAxes(2,1))
plot(t,VTach)
title('Желудочковая тахикардия: сигнал в исходном виде и сигнал после удаления среднего и умножения на окно')
grid on % Нанесение координатной сетки на график

ft=fft(VTach); %Расчет БПФ для сигнала
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('График амплитудного спектра Тахикардия')
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
set (hAxes(2,2),'XLim',[0 20])
plot (f,psd(1:(N/2)))% График СПМ
title('График СПМ Тахикардия')

m=mean(VTach);
VTach0=VTach-m;

w=hamming(N);
for j=1:N
VTachw(j)=VTach0(j)*w(j);
end
hold on
axes(hAxes(2,1))
hold on
plot(t,VTachw)
grid on % Нанесение координатной сетки на график

ft=fft(VTachw); %Расчет БПФ для сигнала
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
hold on
stem(f,as(1:N/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
hold on
set (hAxes(2,3),'XLim',[0 20])
plot (f,psd(1:(N/2)))% График СПМ




axes(hAxes(1,1))
plot(t,VFibr)
title('Фибрилляция желудочков: сигнал в исходном виде и сигнал после удаления среднего и умножения на окно')
grid on % Нанесение координатной сетки на график

ft=fft(VFibr); %Расчет БПФ для сигнала
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
set (hAxes(1,2),'XLim',[0 20])
stem(f,as(1:N/2),'.') % График амплитудного спектра
title('График амплитудного спектра Фибрилляция желудочков')
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
set (hAxes(1,3),'XLim',[0 20])
plot (f,psd(1:(N/2)))% График СПМ
title('График СПМ Фибрилляция желудочков')

m=mean(VFibr);
VFibr0=VFibr-m;

w=hamming(N);
for j=1:N
VFibrw(j)=VFibr0(j)*w(j);
end
hold on
axes(hAxes(1,1))
hold on
plot(t,VFibrw)
grid on % Нанесение координатной сетки на график

ft=fft(VFibrw); %Расчет БПФ для сигнала
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
hold on
set (hAxes(1,2),'XLim',[0 20])
stem(f,as(1:N/2),'.') % График амплитудного спектра


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
hold on
set (hAxes(1,3),'XLim',[0 20])
plot (f,psd(1:(N/2)))% График СПМ
Соседние файлы в папке ЛР_4