EMD基础学习---emd例子

e1.执行经验模式分解并可视化信号的希尔伯特频谱

加载并显示由频率变化明显的正弦波组成的非平稳连续信号。手提钻的振动和烟花的声音是非平稳连续信号的示例。信号以一定速率采样 f s fs fs

load('sinusoidalSignalExampleData.mat','X','fs')
t = (0:length(X)-1)/fs;
plot(t,X)
xlabel('Time(s)')

在这里插入图片描述

混合信号包含具有不同幅度和频率值的正弦波。

要创建希尔伯特频谱图,您需要信号的本征模式函数(IMF)。执行经验模式分解,以计算信号的IMF和残差。由于信号不平滑,因此将 'pchip' 指定为插值方法。

emd(X,'Interpolation','pchip','Display',1)

Current IMF | #Sift Iter | Relative Tol | Stop Criterion Hit
1 | 2 | 0.026352 | SiftMaxRelativeTolerance
2 | 2 | 0.0039573 | SiftMaxRelativeTolerance
3 | 1 | 0.024838 | SiftMaxRelativeTolerance
4 | 2 | 0.05929 | SiftMaxRelativeTolerance
5 | 2 | 0.11317 | SiftMaxRelativeTolerance
6 | 2 | 0.12599 | SiftMaxRelativeTolerance
7 | 2 | 0.13802 | SiftMaxRelativeTolerance
8 | 3 | 0.15937 | SiftMaxRelativeTolerance


在这里插入图片描述

分解停止是因为残差信号的极值数小于’MaxNumExtrema’。

emd生成一个包含原始信号、前3个imf和残差的交互图。在命令窗口中生成的表指示每个生成的IMF的sift迭代次数、相对公差和sift停止标准。可以通过删除'Display'名称-值对或将其指定为0来隐藏表。

右键单击绘图中的空白处以打开IMF选择器窗口。使用IMF选择器有选择地查看生成的IMF、原始信号和残差。

img

从列表中选择要显示的IMF。选择是否在绘图上显示原始信号和残差。

在这里插入图片描述

选定的imf现在显示在绘图上。

img

使用绘图来可视化从原始信号分解的各个分量以及残差。注意,残差是针对IMF的总数计算的,并且不会根据IMF选择器窗口中选择的IMF而改变。

利用经验模态分解得到的imf分量,创建Hilbert谱图。

[imf,residual,info] = emd(X,'Interpolation','pchip');
hht(imf,fs)

在这里插入图片描述

频率与时间的关系图是一个稀疏的关系图,带有一个垂直的色条,指示IMF中每个点的瞬时能量。该图表示从原始混合信号分解的每个分量的瞬时频谱。三个IMF出现在图中,频率在1秒时发生明显变化。

e2.正弦函数本征模函数的过零点与极值

这个三角恒等式表示同一物理信号的两种不同观点:
5 2 c o s 2 π f 1 t + 1 4 ( c o s 2 π ( f 1 + f 2 ) t + c o s 2 π ( f 1 − f 2 ) t ) = ( 2 + c o s 2 π f 2 t ) c o s 2 π f 1 t \frac{5}{2}cos2\pi f_1t +\frac{1}{4}(cos2\pi (f_1+f_2)t+cos2\pi (f_1-f_2)t)=(2+cos^2\pi f_2t)cos2\pi f_1t 25cos2πf1t+41(cos2π(f1+f2)t+cos2π(f1f2)t)=(2+cos2πf2t)cos2πf1t
生成两个正弦波, s s s z z z,使得 s s s 是三个正弦波的总和,并且 z z z 是具有调制幅度的单个正弦波。通过计算两者之差的无穷大范数,验证两个信号是否相等。

t = 0:1e-3:10;
omega1 = 2*pi*100;
omega2 = 2*pi*20;
s = 0.25*cos((omega1-omega2)*t) + 2.5*cos(omega1*t) + 0.25*cos((omega1+omega2)*t);
z = (2+cos(omega2/2*t).^2).*cos(omega1*t);

norm(s-z,Inf)

绘制正弦曲线并选择从2秒开始的1秒间隔。

plot(t,[s' z'])
xlim([2 3])
xlabel('Time (s)')
ylabel('Signal')

在这里插入图片描述

获得信号的频谱图。频谱图显示了三个不同的正弦分量。傅里叶分析认为这些信号是正弦波的叠加。

pspectrum(s,1000,'spectrogram','TimeResolution',4)

在这里插入图片描述

利用emd计算信号的固有模函数(imf)和附加的诊断信息。默认情况下,该函数输出一个表,该表指示每个IMF的筛选迭代次数、相对公差和筛选停止标准。经验模态分解将信号看作 z z z

[imf,~,info] = emd(s);

过零次数和局部极值最多相差一。这满足了信号成为IMF的必要条件。

info.NumZerocrossing - info.NumExtrema

绘制IMF图,选择0.5秒的间隔,从2秒开始。IMF是调幅信号,因为emd将信号视为调幅信号。

plot(t,imf)
xlim([2 2.5])
xlabel('Time (s)')
ylabel('IMF')

在这里插入图片描述

e3.计算振动信号的固有模态函数

模拟损坏轴承的振动信号。执行经验模式分解以可视化信号的imf并查找缺陷。

中径为12厘米的轴承有八个滚动元件。每个滚动体的直径为2厘米。当内圈以每秒25个循环的速度驱动时,外圈保持静止。加速计在 10 k H z 10 kHz 10kHz下对轴承振动进行采样。

fs = 10000;
f0 = 25;
n = 8;
d = 0.02;
p = 0.12;

img

健康轴承的振动信号包括几个阶的驱动频率。

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;

共振导致轴承外圈出现缺陷,导致逐渐磨损。该缺陷导致一系列冲击,这些冲击在轴承的滚珠通过频率外圈(BPFO)处再次出现:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-506qB5u0-1596946713789)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1596939073602.png)]

其中 f 0 f_0 f0为传动速率, n n n为滚动体数, d d d为滚动体直径, p p p为轴承中径, θ θ θ为轴承接触角。假设接触角为15°,并计算BPFO。

ca = 15;
bpfo = n*f0/2*(1-d/p*cosd(ca));

使用pulstran函数将撞击建模为5毫秒正弦曲线的周期序列。每个3khz正弦波由一个平顶窗口加窗。利用幂律在轴承振动信号中引入渐进磨损。

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)];

通过向健康信号添加影响来生成BPFO振动信号。绘制信号并选择0.3秒的间隔,从5.0秒开始。

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])

img

在信号中加入高斯白噪声。指定“噪波方差”为 1 / 15 0 2 1/150^2 1/1502.

rn = 150;
yGood = yHealthy + randn(size(yHealthy))/rn;
yBad = yBPFO + randn(size(yHealthy))/rn;

plot(t,yGood,t,yBad)
xlim([xLimLeft xLimRight])
legend('Healthy','Damaged')

img

利用emd对健康轴承信号进行经验模态分解。计算前五个固有模函数(imf)。使用'Display'名称-值对显示一个表,其中包含筛选迭代次数、相对公差和每个IMF的筛选停止条件。

imfGood = emd(yGood,'MaxNumIMF',5,'Display',1);

Current IMF | #Sift Iter | Relative Tol | Stop Criterion Hit
1 | 3 | 0.015551 | SiftMaxRelativeTolerance
2 | 3 | 0.078816 | SiftMaxRelativeTolerance
3 | 8 | 0.085954 | SiftMaxRelativeTolerance
4 | 1 | 0.0043681 | SiftMaxRelativeTolerance
5 | 2 | 0.010567 | SiftMaxRelativeTolerance
The decomposition stopped because ‘MaxNumIMF’ was reached.

使用没有输出参数的emd来可视化前三个IMF和residual。

emd(yGood,'MaxNumIMF',5)

img

计算并可视化缺陷方位信号的IMFs。第一个经验模式揭示了高频冲击。随着磨损的进行,这种高频模式的能量增加。第三个振型显示振动信号中的共振。

imfBad = emd(yBad,'MaxNumIMF',5,'Display',1);

Current IMF | #Sift Iter | Relative Tol | Stop Criterion Hit
1 | 2 | 0.030781 | SiftMaxRelativeTolerance
2 | 3 | 0.095804 | SiftMaxRelativeTolerance
3 | 4 | 0.15371 | SiftMaxRelativeTolerance
4 | 1 | 0.014778 | SiftMaxRelativeTolerance
5 | 2 | 0.04312 | SiftMaxRelativeTolerance
The decomposition stopped because ‘MaxNumIMF’ was reached.

emd(yBad,'MaxNumIMF',5)

img

分析的下一步是计算提取的imf的Hilbert谱。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ruoyo176

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值