代码
:
fs = 10000;
f0 = 25;
n = 8;
d = 0.02;
p = 0.12;
t = 0:1/fs:10-1/fs;
yHealthy = [1 0.5 0.2 0.1 0.05]*sin(2*pi*f0*[1 2 3 4 5]'.*t)/5;
yHealthy = (1+1./(1+linspace(-10,10,length(yHealthy)).^4)).*yHealthy;
ca = 15;
bpfo = n*f0/2*(1-d/p*cosd(ca));
fImpact = 3000;
tImpact = 0:1/fs:5e-3-1/fs;
wImpact = flattopwin(length(tImpact))'/10;
xImpact = sin(2*pi*fImpact*tImpact).*wImpact;
tx = 0:1/bpfo:t(end);
tx = [tx; 1.3.^tx-2];
nWear = 49000;
nSamples = 100000;
yImpact = pulstran(t,tx',xImpact,fs)/5;
yImpact = [zeros(1,nWear) yImpact(1,(nWear+1):nSamples)];
yBPFO = yImpact + yHealthy;
xLimLeft = 5.0;
xLimRight = 5.3;
yMin = -0.6;
yMax = 0.6;
plot(t,yBPFO)
hold on
[limLeft,limRight] = meshgrid([xLimLeft xLimRight],[yMin yMax]);
plot(limLeft,limRight,'--')
hold off
xlim([xLimLeft xLimRight])
rn = 150;
yGood = yHealthy + randn(size(yHealthy))/rn;
yBad = yBPFO + randn(size(yHealthy))/rn;p;
plot(t,yGood,t,yBad)
xlim([xLimLeft xLimRight])
legend('Healthy','Damaged')
imfGood = emd(yGood,'MaxNumIMF',5,'Display',1);
emd(yGood,'MaxNumIMF',5)
imfBad = emd(yBad,'MaxNumIMF',5,'Display',1);
emd(yBad,'MaxNumIMF',5)
出错 Untitled3 (第 45 行)
imfGood = emd(yGood,'MaxNumIMF',5,'Display',1);
Matlab 2020b可以正常运行并出图。
imfBad = emd(yBad,'MaxNumIMF',5,'Display',1);
emd(yBad,'MaxNumIMF',5)
Current IMF | #Sift Iter | Relative Tol | Stop Criterion Hit
1 | 2 | 0.038431 | SiftMaxRelativeTolerance
2 | 4 | 0.019981 | SiftMaxRelativeTolerance
3 | 9 | 0.117 | SiftMaxRelativeTolerance
4 | 1 | 0.011745 | SiftMaxRelativeTolerance
5 | 2 | 0.020557 | SiftMaxRelativeTolerance
分解停止,因为提取的固有模态函数数目达到最大。