👨🎓个人主页:研学社的博客
💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
旋转机械故障诊断中的频带选择(FBS)旨在识别频带位置,包括全频带外的故障瞬变,因此故障诊断可以抑制来自其他频率分量的噪声影响。冲动性和循环平稳性最近被认为是瞬态的两个独特特征。因此,许多研究都集中在开发两种特征的量化指标上,并将它们用作指导FBS的指标。然而,大多数以前的研究几乎忽略了FBS的另一个方面,即健康参考,这显着影响FBS的性能。为了解决这个问题,本文调查了鲁棒参考的重要性,并将其视为FBS的第三个关键方面。借助健康参考,
可以定位故障瞬变存在的频段。提出了一种基于分类的新方法,将FBS的所有三个方面(冲动性、循环平稳性和健康参考)整合在一起。分类精度被开发为一种新的指标,用于选择最敏感的频段进行旋转机械故障诊断。所提出的方法(由accugram创造)已在基准和实验数据集上得到验证。比较结果表明,与传统包络分析、库尔图和信息图相比,其有效性和鲁棒性性。
📚2 运行结果
部分代码:
% Inputs:
% [1] x : [healthy; test]
% [2] xLabel : 2-by-1 vector, where 0 = healthy; 1 = test
% [3] N : the number of segments
% [4] overlap : overlap for two neighbor segments
% [5] Fs : sampling frequency
% [6] nlevel : the number of level
% [7] isPLot : 1 = accugram plot; otherwise, 0.
%
% Outputs:
% [1] fc : center frequency
% [2] bw : bandwidth
% [3] level : level index
% [4] acc : classificaiton accuracy
% [5] accMatrix : all values in an accugram
%
% References:
% [1] Zhiliang Liu, Yaqiang Jin, Ming J. Zuo, and Dandan Peng. ACCUGRAM: a machine learning approach to frequency band selection for rotating machinery fault diagnosis. ISA Transactions, Submitted May 18, 2018, Under Review.
if nargin ~= 7 error('nargin does not match!'); end
[xSegment,label] = slidingSegmentation(x,xLabel,N,overlap);
% Freqeuncy band partition
% m = size(xSegment,1);
m = 2*N; % number of samples for accuracy representation
lev = 2.^[0:nlevel];
temp = [3*lev(2)/2 3*lev(2:end-2);lev(3:end)];
lev = [lev(1) lev(2) temp(:)']; % number of bands in each level
row = length(lev); % row number of accugram
col = 3*2^nlevel; % column number of accugram
accMatrix = zeros(row,col); % accugram matrix
bandNum = sum(lev); % number of frequency band candidates
xMatrix = zeros(bandNum,2*m); % feature matrix for each band candidate, 2 means two features
for i = 1:m
iMatrix = featureExtraction(xSegment(i,:),nlevel);% feature extraction for the ith frequency band
xMatrix(:,(i-1)*2+1:2*i) = iMatrix;
end
% n = size(xMatrix,1);
acc = zeros(1,bandNum);
for i = 1:bandNum
temp = (reshape(xMatrix(i,:),size(iMatrix,2),m))';
acc(i) = getAccuracy(temp,label); % compute classification accuracy for the ith frequency band
end
index = 0;
for i = 1:row % row number of accugram
iRate = acc((index+1):(index+lev(i)));
temp = repmat(iRate,col/lev(i),1);
accMatrix(i,:) = reshape(temp,1,col);
index = index+lev(i);
end
num = log2(lev);
Ntick = length(num);
freq = Fs/2*(0:3*2^nlevel-1)/(3*2^(nlevel));
% freq_stft = Fs*(0:Nfft(end)/2-1)/Nfft(end);
[I,J,M] = max_IJ(accMatrix);
bw = Fs/2/lev(max(I)); % compute bandwidth
numfre = col/lev(max(I)); % 录脝脣茫脙驴赂枚麓酶驴铆脣霉脮录碌脛赂帽脢媒?
% sum(lev(1:max(I)-1))+length(J)/numfre;
dist = zeros(1,length(J)/numfre);
for i = 1:length(dist)
temp = sum(lev(1:max(I)-1))+ J(i*numfre)/numfre;
target = xMatrix(temp,:);
target = reshape(target,size(iMatrix,2),m);
dist(i) = sum(mean(target,2).^2);
% fc(i)=(temp-1)*bw+bw/2; % compute center frequency
end
[a,b] = max(dist); % a represent the maximum dist and b represent the location.
fc = ( J(b*numfre)/numfre-1)*bw+bw/2;
if isPlot
figure
imagesc(freq,1:Ntick,accMatrix),colorbar
xlabel('frequency [Hz]'),set(gca,'ytick',1:Ntick,'yticklabel',round(num*10)/10),ylabel('level: log2(lev)')
title(['Accu_{max}=',num2str(M),' @ level ',num2str(round(10*num(max(I)))/10),', Bw= ',num2str(bw),'Hz, f_c=',num2str(fc),'Hz, Dist=',num2str(a)])
end
acc = M;
level = round(10*num(max(I)))/10;
Find_wav_accugram(x(2,:),nlevel,level,fc,M,Fs);
end
function acc = getAccuracy(x,label)
🎉3 参考文献
部分理论来源于网络,如有侵权请联系删除。
[1]Zhiliang Liu, Yaqiang Jin, Ming J. Zuo, and Dandan Peng. ACCUGRAM: a novel approach based on classification to frequency band selection for rotating machinery fault diagnosis. ISA Transactions, Available online 15 May 2019.