-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathcalc_all_sqi.m
101 lines (78 loc) · 2.4 KB
/
calc_all_sqi.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
function [ SQI ] = calc_all_sqi ( FILE )
ECGtask = ECGtask_QRS_detection;
ECGtask.detectors = { 'wqrs' 'pantom' 'sqrs' 'gqrs' 'wavedet'} ;
wrapper = ECGwrapper ('recording_name', FILE , ...
'output_path','/tmp/signalquality/sqis/', ...
'ECGtaskHandle',ECGtask , ...
'cacheResults',true ...
);
wrapper.Run;
[ recording_path rec_name ] = fileparts(FILE);
Detection = load (['/tmp/signalquality/sqis/' rec_name '_QRS_detection.mat']);
N= wrapper.ECG_header.nsamp;
signal = wrapper.read_signal(1,N);
header = wrapper.ECG_header();
fs = header.freq;
Leads = get_lead_names(header);
fft_signal = abs(fft(signal));
P_fft_signal = (fft_signal/N).^2;
f = 0:fs/N:(N-1)*(fs/N);
t = 0: 1/fs : (N-1)/fs;
%% pSQI
pSQI = calc_pSQI(f,P_fft_signal);
%% basSQI
basSQI = calc_basSQI(f,P_fft_signal);
%% bsSQI
bsSQI = calc_bsSQI(wrapper,'wavedet');
%% eSQI
eSQI = calc_eSQI(wrapper,'wavedet');
%% hfSQI
hfSQI = calc_hfSQI(wrapper,'wavedet');
%% bSQI
bSQI1 = calc_bSQI(wrapper,'sqrs','wqrs');
bSQI2 = calc_bSQI(wrapper,'gqrs','wqrs');
bSQI3 = calc_bSQI(wrapper,'wqrs','wavedet');
bSQI4 = calc_bSQI(wrapper,'sqrs','wavedet');
bSQI5 = calc_bSQI(wrapper,'gqrs','wavedet');
bSQI6 = calc_bSQI(wrapper,'gqrs','sqrs');
%% sSQI
sSQI = skewness(signal);
%% kSQI
kSQI = kurtosis(signal);
%% rsdSQI
rsdSQI = calc_rsdSQI(wrapper,'wavedet');
%% purSQI
w2 = spectral_moment(signal, fs, 2);
w0 = spectral_moment(signal, fs, 0);
w4 = spectral_moment(signal, fs, 4);
purSQI = (w2.^2) ./ (w0.*w4) ;
%% entSQI
dim = 3;
r=0.2;
for i=1:numel(Leads)
entSQI(i) =SampEn( dim, r, signal(:,i) );
end
%% pcaSQI
pcaSQI = calc_pcaSQI (wrapper,'simple');
robpcaSQI = calc_pcaSQI (wrapper,'robust');
%% Return
SQI = struct ('bSQI1',bSQI1,... %
'bSQI2',bSQI2,... %
'bSQI3',bSQI3,... %
'bSQI4',bSQI4,... %
'bSQI5',bSQI5,... %
'bSQI6',bSQI6,... %
'sSQI',sSQI, ... %
'kSQI',kSQI, ... %
'pSQI',pSQI, ...
'basSQI',basSQI,...
'bsSQI',bsSQI, ...
'eSQI',eSQI, ...
'hfSQI',hfSQI, ...
'entSQI',entSQI, ...
'purSQI', purSQI, ...
'rsdSQI', rsdSQI, ... % Posiblemente mandarla a la mierda
'pcaSQI', pcaSQI, ...
'robpcaSQI', robpcaSQI ...
);
end