bonjours, svp qui peux m'aider à expliquer de code EMD suivant. j'ai besoin d'un tournage à la main. merci bcp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 function imf = emd(y); c = x; % copy of the input signal (as a row vector) N = length(x); %------------------------------------------------------------------------ % loop to decompose the input signal into successive IMF imf = []; % Matrix which will contain the successive IMF, and the residue while (1) % the stop criterion is tested at the end of the loop %------------------------------------------------------------------------ % inner loop to find each imf h = c; % at the beginning of the sifting process, h is the signal SD = 1; % Standard deviation which will be used to stop the sifting process while SD > 0.3 % while the standard deviation is higher than 0.3 (typical value) % find local max/min points d = diff(h); % approximate derivative maxmin = []; % to store the optima (min and max without distinction so far) for i=1:N-2 if d(i)==0 % we are on a zero maxmin = [maxmin, i]; elseif sign(d(i))~=sign(d(i+1)) % we are straddling a zero so maxmin = [maxmin, i+1]; % define zero as at i+1 (not i) end end if size(maxmin,2) < 2 % then it is the residue break end % divide maxmin into maxes and mins if maxmin(1)>maxmin(2) % first one is a max not a min maxes = maxmin(1:2:length(maxmin)); mins = maxmin(2:2:length(maxmin)); else % is the other way around maxes = maxmin(2:2:length(maxmin)); mins = maxmin(1:2:length(maxmin)); end % make endpoints both maxes and mins maxes = [1 maxes N]; mins = [1 mins N]; %-------------------------------------------------------------------- % spline interpolate to get max and min envelopes; form imf maxenv = spline(maxes,h(maxes),1:N); minenv = spline(mins, h(mins),1:N); m =(maxenv + minenv)/2; % mean of max and min enveloppes prevh = h; % copy of the previous value of h before modifying it h = h - m; % substract mean to h % calculate standard deviation eps = 0.0000001; % to avoid zero values SD = sum (((prevh - h).^2) ./ (prevh.^2 + eps)); end imf = [imf; h]; % store the extracted IMF in the matrix imf % if size(maxmin,2)<2, then h is the residue % stop criterion of the algo. if size(maxmin,2) < 2 figure(3); plot(h); break; end c = c - h; % substract the extracted IMF from the signal end return
Partager