下面以一个实例说明hilbert边际谱的应用。其中的数据来自于美国凯斯西储大学的旋转机械故障数据的第105组,该组数据经过计算其故障频率为162.27hz,该实例中得出的是164.1hz,说明基本准确。
clc
clear
z=load('D:105.mat');
x=z.X105_DE_time(1:1024);
N=1024;
fs=12000;
n=0:N-1;
f=n*fs/N;
lag=N;
n=0:N-1;
t=n/fs;
imf=emd(x);
[m,n]=size(imf);%imf为一m*n阶矩阵,m是imf分量,n为数据点
emd_visu(x,1:length(x),imf,m); %实信号的信号重构及emd结果显示函数
[r,lags]=xcorr(x,lag,'unbiased'); %计算序列的自相关函数
for i=1:m
[R,lags]=xcorr(imf(i,:),lag,'unbiased');%计算序列的自相关函数
a=corrcoef(R(1:N/2),r(1:N/2));%相关系数矩阵【对称】,主对角元素为1
xg(i)=abs(a(1,2));%相关系数
end
[R,C]=max(xg);%R为最大值,C为最大元素在数组中的位置
figure(1);
y=hilbert(imf(C,:));
a=abs(y);%包络
b=fft(a);
mag1=abs(b);
mag=mag1*2/N;
f1=(0:N-1)*fs/N;
plot(f1(1:N/2),mag(1:N/2));%set(gca,'xlim',[0,.400]);
title('包络');
xlabel('频率');
ylabel('幅值');
![6916949b84e9c303e2cffe5d9eb52a0b.png](https://i-blog.csdnimg.cn/blog_migrate/daa98db87d17f65253fa01ec5df854d4.jpeg)
该程序首先通过HHT变换中的EMD分解算法,将原数据分解得出若干分量,再在这些分量中找出和原数据相关程度最大的那个分量,再计算这个分量的hilbert包络谱,即得出故障频率。
![7aa5a248d335f6f9229135ab1724a038.png](https://i-blog.csdnimg.cn/blog_migrate/d4aea2bb6cd7d63dd20869155773a053.jpeg)
当然也可以通过边际谱得出。