-
Notifications
You must be signed in to change notification settings - Fork 9
/
plotIMFs.m
109 lines (88 loc) · 2.38 KB
/
plotIMFs.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
101
102
103
104
105
106
107
108
function [] = plotIMFs(stage,incompleteIMF)
% data is the first residual
x = stage(1).data;
% Look for the last IMF
i=1;
while stage(i).windowHead~=1
i=i+1;
end
nbIMF=i;
xSize = length(x);
if(nargin==1)
incompleteIMF=1;
end
% Plot the data, IMF and residual
% figure;
subplot(nbIMF+2,1,1);
c = [[0,0,0]; [0,0,1]; [0.1,0.6,1]];
seq = [1, length(x)];
if length(x)>500 && length(x)<1502
seq = [1, 500, length(x)];
elseif length(x)>1501
seq = [1, 500, 1500, length(x)];
end
for ji = 1:length(seq)-1
j = seq(ji);
jj = seq(ji+1);
plot(j:jj,x(j:jj),'-','LineWidth',2,'Color',c(ji,:)); % the original signal is in the first row of the subplot
hold on;
end
axis tight;
hold off;
% plot(x,'-b','LineWidth',2);
ylabel('Data')
set(gca,'xtick',[])
xlim([1 xSize])
for i=2:nbIMF
if i~=nbIMF
startIncomplete = length(stage(i).imf);
else
startIncomplete = length(stage(i).data);
end
% Plot the IMF
subplot(nbIMF+2,1,i);
seq = [1, startIncomplete];
if startIncomplete>500 && startIncomplete<1502
seq = [1, 500, startIncomplete];
elseif startIncomplete>1501
seq = [1, 500, 1500, startIncomplete];
end
for ji = 1:length(seq)-1
j = seq(ji);
jj = seq(ji+1);
plot(j:jj,stage(i-1).imf(j:jj),'-','LineWidth',2,'Color',c(ji,:));
hold on;
end
axis tight;
hold off
if incompleteIMF
hold on;
% Highlight the IMF part that is being processed
plot(startIncomplete:length(stage(i-1).imf),stage(i-1).imf(startIncomplete:end),'color',[1,0,0],'LineWidth',2)
axis tight;
hold off
end
ylabel (['IMF ' num2str(i-1)]);
set(gca,'xtick',[])
xlim([1 xSize])
if i==nbIMF %Plot the residual
subplot(nbIMF+2,1,i+1);
seq = [1, length(stage(i).data)];
if length(stage(i).data)>500 && length(stage(i).data)<1502
seq = [1, 500, length(stage(i).data)];
elseif length(stage(i).data)>1501
seq = [1, 500, 1500, length(stage(i).data)];
end
for ji = 1:length(seq)-1
j = seq(ji);
jj = seq(ji+1);
plot(j:jj,stage(i).data(j:jj),'-','LineWidth',2,'Color',c(ji,:));
hold on;
end
axis tight;
hold off;
ylabel ('Res.');
set(gca,'xtick',[])
xlim([1 xSize])
end
end