将原始真实信号和生成的信号组合在一个数据矩阵中。使用辅助函数 helperExtractFeature
提取特征,包括常见信号统计信息,例如均值和方差以及频谱特征。
idxGenerated = 1:numTests;
idxReal = numTests+1:numTests+size(flow,2);
XGeneratedNew = squeeze(extractdata(gather(dlXGeneratedNew)));
x = [XGeneratedNew single(flow)];
features = zeros(size(x,2),14,'like',x);
for ii = 1:size(x,2)
features(ii,:) = helperExtractFeature(x(:,ii));
end
每行对应一个信号的特征。features
修改生成的正常和故障信号以及实际正常和故障信号的标签。
L = [squeeze(TNew)+2;labels.'];
标签现在具有以下定义:
-
1 — 生成的健康信号
-
2 — 生成的故障信号
-
3 — 真正的健康信号
-
4 — 真正的故障信号
-
对真实信号的特征执行 PCA,并将生成信号的特征投射到同一个 PCA 子空间。
-
% PCA via svd featuresReal = features(idxReal,:); mu = mean(featuresReal,1); [~,S,W] = svd(featuresReal-mu); S = diag(S); Y = (features-mu)*W;
从奇异向量来看,前三个奇异值占 中能量的 99%。您可以通过利用前三个主成分来可视化信号特征。
-
sum(S(1:3))/sum(S)
ans = single 0.9923
使用前三个主成分绘制所有信号的特征。在PCA子空间中,生成信号的分布与真实信号的分布相似。
-
idxHealthyR = L==1; idxFaultR = L==2; idxHealthyG = L==3; idxFaultG = L==4; pp = Y(:,1:3); figure scatter3(pp(idxHealthyR,1),pp(idxHealthyR,2),pp(idxHealthyR,3),'o') xlabel('1st Principal Component') ylabel('2nd Principal Component') zlabel('3rd Principal Component') hold on scatter3(pp(idxFaultR,1),pp(idxFaultR,2),pp(idxFaultR,3),'d') scatter3(pp(idxHealthyG,1),pp(idxHealthyG,2),pp(idxHealthyG,3),'s') scatter3(pp(idxFaultG,1),pp(idxFaultG,2),pp(idxFaultG,3),'+') view(-10,20) legend('Real healthy','Real faulty','Generated healthy','Generated faulty', ... 'Location','Best') hold off