熵的概念起源于热力学,1884年,玻尔兹曼定义熵,用以描述分子热运动的无序性和混乱度。1948年,Shannon在其发表的《AMathematicalTheoryofCommunication》中提出香农熵,首次将“熵”引入信息度量范畴,为信息论的开山之作。香农熵通过状态的概率分布对复杂性进行估计,给定一段时间序列,若不同状态的概率值较为接近,则难以确定下一时刻的状态,序列具有最大的熵值;相反地,若部分状态的统计概率极大,序列具有最小熵值,能较为容易地确定未来状态。信息熵后,出现了若干不同形式的香农熵,其中以rényi熵最具代表性。
在香农熵的启发下,近似熵被提出,近似熵量化信号的不规律性与自相似性,以评估序列中是否有新行为产生,当有新行为产生则近似熵值大,即信号复杂度越高,反之则小。近似熵具有一定程度的鲁棒性且熵值的估计较为稳定,但近似熵是有偏差的统计量,熵值的准确性受信号长度影响;强噪声对近似熵的影响较为明显;近似熵是自匹配的过程,违背熵最基本的定义;其计算效率并不高。
基于近似熵表现的问题,样本熵被提出,但样本熵有两个较为突出的缺点:样本熵采用了自相似函数来估计信号的复杂度,在实际应用中估计的值不够准确;其计算效率不高,尤其针对较长的序列。
为了解决样本熵上述估计值不准确的问题,模糊熵被提出,结合模糊数学理论,有效缓解了样本熵值与动力学复杂性不一致的问题。将自相似函数计算的过程用模糊隶属函数代替。模糊熵的主要缺点是计算效率不高。为了解决样本熵存在的第二个问题,排列熵被提出,引入排列的思想,提出了新的量化指标,具有很好的突变检测效率和计算效率。随着时间推移,频带熵、散布熵和气泡熵等相继被提出。
随着信息理论知识体系的不断充实和完善,熵被引入医学信号分析和故障诊断等领域。旋转机械的振动信号通常呈现出非线性和非平稳性等特点,但大部分信号处理方法都基于平稳和线性的假设;并且振动信号受到环境噪声和其他分量的影响,使得特征提取过程变得困难且效果并不理想。熵方法通过考虑时间的非线性行为,对复杂性进行量化,检测动态变化,其有着聚类能力好、不依赖先验知识和具备一定抗噪性的优点,已被广泛应用于故障诊断中,是一种有着理想效果的特征提取器。
鉴于此,采用一种改进熵方法对旋转机械进行故障诊断,并以滚动轴承公开数据集为例进行了实验验证,运行环境为MATLAB。
narginchk(2,10)
Sig = squeeze(Sig);
if size(Sig,1) == 2
Sig = Sig';
end
p = inputParser;
Chk1 = @(x) isnumeric(x) && ismatrix(x) && (min(size(x)) ==2) && numel(x)>20;
addRequired(p,'Sig',Chk1);
addRequired(p,'Mobj',@(x) isstruct(x));
addParameter(p,'Scales',3,@(x) isnumeric(x) && (length(x)==1) && (x>1));
addParameter(p,'RadNew',0,@(x) ismember(x,0:4) && ...
any(validatestring(func2str(Mobj.Func),{'XSampEn';'XApEn'})));
addParameter(p,'Refined',false,@(x) islogical(x) && ...
any(validatestring(func2str(Mobj.Func),{'XSampEn'})));
addParameter(p,'Plotx',false,@(x) islogical(x));
parse(p,Sig, Mobj, varargin{:})
MSx = zeros(1,p.Results.Scales);
RadNew = p.Results.RadNew;
Fields = fieldnames(Mobj);
Y = struct2cell(Mobj);
完整代码可通过知乎学术咨询获得:
https://www.zhihu.com/consult/people/792359672131756032?isMe=1
C = [Fields(2:end),Y(2:end)].';
- 擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。