close all; clear all; clc; % sledece dve linije se koriste za rad u GNU Octave % nisu potrebne za rad u Matlabu pkg load statistics; pkg load signal; %% prvi zadatak dat = load('ekgIspit.txt'); ecgSig = dat(:, 1); % duzina ecgSig length(ecgSig) % duzina signala u sekundama fs = 1000; length(ecgSig) / fs % koliko ima odbiraka koji su veci od 0.2 sum(ecgSig > 0.2) % koliko ima odbiraka koji su veci od 0.2, a manji od 0.25 sum(ecgSig > 0.2 & ecgSig > 0.25) % kolika je maksimalna amplituda i na kom odbirku se ona javlja [ecgMax, ecgInd] = max(ecgSig) % vremenski trenutak u kome je doslo do pojave maksimuma ecgInd/fs %% drugi zadatak vreme = 0:1/fs:(length(ecgSig)/fs - 1/fs); ecgSig = (ecgSig / 800) * 1000; % mnozi se sa 1000 da bi bio u mV figure plot(vreme, ecgSig, 'LineWidth', 2, 'Color', [0 0 0]); xlabel('vreme [s]'); ylabel('napon [mV]'); title('EKG signal u vremenskom domenu'); grid on; %% racunanje maksimuma se mora ponoviti, jer je ranije uracunato pojacanje [ecgMax, ecgInd] = max(ecgSig); figure plot(vreme, ecgSig, 'LineWidth', 2, 'Color', [0 0 0]); hold on; stem(ecgInd/fs, ecgMax, 'MarkerFaceColor', [0 0 1], 'LineStyle', 'none'); xlabel('vreme [s]'); ylabel('napon [mV]'); title('EKG signal u vremenskom domenu'); grid on; legend('EKG signal', 'maksimum', 'Location', 'southeast'); figure plot(vreme, ecgSig, 'LineWidth', 2, 'Color', [0 0 0]); hold on; stem(ecgInd/fs, ecgMax, 'MarkerFaceColor', [0 0 1], 'LineStyle', 'none'); xlabel('vreme [s]'); ylabel('napon [mV]'); title('EKG signal u vremenskom domenu'); grid on; legend('EKG signal', 'maksimum', 'Location', 'southeast'); xlim([0 max(vreme)]); %% treci zadatak [pks, locs] = findpeaks(ecgSig, 'MinPeakHeight', 0.2, 'MinPeakDistance', 400,'DoubleSided'); figure plot(vreme, ecgSig, 'LineWidth', 2, 'Color', [0 0 0]); hold on; stem(locs/fs, pks, 'MarkerFaceColor', [0 0 1], 'LineStyle', 'none'); xlabel('vreme [s]'); ylabel('napon [mV]'); title('EKG signal u vremenskom domenu'); grid on; legend('EKG signal', 'R pikovi', 'Location', 'southeast'); xlim([0 max(vreme)]); figure plot(vreme, ecgSig, 'LineWidth', 2, 'Color', [0 0 0]); hold on; stem(locs/fs, pks, 'MarkerFaceColor', [0 0 1], 'LineStyle', 'none'); xlabel('vreme [s]'); ylabel('napon [mV]'); title('Prvih 5 sekundi EKG signala'); grid on; legend('EKG signal', 'R pikovi', 'Location', 'southeast'); xlim([0 5]); ylim([-0.4 0.4]); % broj R pikova tokom prvih 5 sekundi sum(locs < 5*fs) % srednja vrednost amplitude tih R pikova mean(pks(locs < 5*fs)) RR = []; for ind = 2:length(locs) RR(ind-1) = locs(ind) - locs(ind-1); RR(ind-1) = RR(ind-1)/fs; end figure plot(RR, 'MarkerFaceColor', [0 0 1], 'Marker', 'o') grid on; ylabel('vreme [s]'); xlabel('redni broj RR intervala'); title('Heart Rate Variability'); %% zadatak 4 % srednja vrednost mean(RR) % standardna devijacija std(RR) % varijansa std(RR)^2 figure histfit(RR); ylabel('broj izracunatih RR intervala'); xlabel('RR interval u sekundama'); title('Histogram RR intervala'); legend('histogram', 'idealna fgv'); grid on; % broj otkucaja u minuti (na 2 nacina) 60 * length(pks) / max(vreme) 60 / mean(RR) %% peti zadatak niz = zeros(1, 12); niz(7) = 1; niz(8) = 5; niz niz2 = ones(1, 12); niz2(7) = 0; niz2(8) = 5; niz2 niz3 = zeros(1, 12); niz3(1:5) = 1:5; niz3