局部均值分解(LMD)详解

项目介绍

局部均值分解(LMD)作为近年来出现的一种新的自适应时频分析方法,能够依据信号的自身特点将复杂的多分量调幅调频信号分解为有限个的单分量调幅调频信号之和,进而求取瞬时频率和瞬时幅值并进行组合,得到原始信号完整的时频分布。与经验模态分解方法相比,在端点效应、虚假分量、过包络和欠包络等问题方面有所改善。本文旨在介绍LMD的基本原理和实现流程。

调制信号

在介绍LMD之前,有必要对调制信号的概念进行说明,因为LMD的目的是将原始信号分解为调频信号及其幅值。

滚动轴承发生故障时,其振动信号一般仪现出明显的非平稳特性,而且其中蕴含多种频率成分,又由于受滚动轴承高速转动过程中产生的周期性冲击力的影响,各个不同频率成分均会出现不同程度的调制现象。所以在实际工程领域,采集到的滚动轴承振动信号燕都为非平稳非线性的调制信号。所谓调制,是指将某个信号中携带的信息嵌入到另一个信号中,从而使被嵌入信号的特征参数发生改变。其中,作为载体被嵌入其他信号信息的信号称为载波,而所嵌入的信息一般由调制波携带。信号的调制方式包括幅值调制、频率调制和幅值频率同时调制三种方式。

调幅信号

调幅信号的频率不变,只有幅值会随时间发生变化。
在这里插入图片描述

调频信号

调幅信号的幅值不变,只有频率会随时间发生变化。
在这里插入图片描述

调幅调频信号

调幅调幅信号的幅值和频率都会随时间发生变化。
在这里插入图片描述

局部均值分解

基本原理

作为一种新的自适应的时频分析方法,局部均值分解算法能够根据信号自身的复杂程度及变化规律,将一个复杂的多分量信号通过多重循环迭代的方式逐步分解成若干个乘积函数( P F PF PF)和一个残余分量之和,而每一个乘积函数都是一个包络函数和一个纯调频函数的乘积。这种相乘得到的乘积函数分量本质上是一个单分量调制信号,理论上应与某一物理过程对应,确保了通过乘积函数分量所对应的纯调频函数求得的瞬时频率具有明确的物理意义,将每一个乘积函数的瞬时频率与瞬时幅值进行组合,得到原始信号完整的时频分布,进而可以将信号能量在空间各尺度上的分布规律清楚明确地揭示出来。

LMD方法实质上是将一个复杂的多分量信号分解成若干个 P F PF PF分量之和,从而可以在原信号的不同频带提取出特征信息。在整个分解过程中,需要不断地将原始信号中的高频成分提取出来并逐步剔除。分解开始时,首先需要找出信号的所有局部极燕值点和局部极小值点,然后采用滑动平均的方式来获得信号的局部均值函数和包络估计函数,从原始信号中去除局部均值函数并且与包络估计函数进行解调直到得到标准的纯调频函数终止循环迭代,将迭代过程中产生的所有包络估计函数的乘积作为包络函数,并与最后所得的纯调频函数相乘,即求得了第一阶 P F PF PF分量,从原始信号中分离出第一阶 P F PF PF分量后再重复以上步骤,依次分解得到各阶 P F PF PF分量及残余分量R。

LMD实现步骤

  • 1、设原始信号为 x ( t ) x(t) x(t),找出其每一个局部极值点 n i n_i ni,计算 n i n_i ni n i + 1 n_{i+1} ni+1的平均值:
    m i = n i + n i + 1 2 m_i=\frac{n_i+n_{i+1}}{2} mi=2ni+ni+1
    将所有平均值 m i m_i mi在对应极值点时刻 t n i t_{n_i} tni t n i + 1 t_{n_{i+1}} tni+1之间进行直线延伸,采用滑动平均法对延伸直线进行平滑处理,得到局部均值函数 m 11 ( t ) m_{11}(t) m11(t)
  • 2、计算局部幅值 a i a_i ai
    a i = ∣ n i − n i + 1 ∣ 2 a_i=\frac{|n_i-n_{i+1}|}{2} ai=2nini+1
    将所有局部幅值 a i a_i ai在对应极值点时刻 t n i t_{n_i} tni t n i + 1 t_{n_{i+1}} tni+1 之间进行直线延伸,采用滑动平均法对延伸直线进行平滑处理,得到局部均值函数 a 11 ( t ) a_{11}(t) a11(t)
  • 3、从原始信号 x ( t ) x(t) x(t)中分离出局部均值函数 m 11 ( t ) m_{11}(t) m11(t)
    h 11 ( t ) = x ( t ) − m 11 ( t ) h_{11}(t)=x(t)-m_{11}(t) h11(t)=x(t)m11(t)
  • 4、用 a 11 ( t ) a_{11}(t) a11(t) h 11 ( t ) h_{11}(t) h11(t)进行解调,得到:
    s 11 ( t ) = h 11 ( t ) a 11 ( t ) s_{11}(t)=\frac{h_{11}(t)}{a_{11}(t)} s11(t)=a11(t)h11(t)
    此时我们需要判断 s 11 ( t ) s_{11}(t) s11(t)是否为纯调频函数(纯调频函数振幅恒为 1,且 − 1 ≤ s 11 ( t ) ≤ 1 −1≤s_{11}(t)≤1 1s11(t)1。若 a 12 ( t ) a_{12}(t) a12(t) s 11 ( t ) s_{11}(t) s11(t)函数的包络估计函数,则 a 12 ( t ) ≡ 1 a_{12}(t)\equiv1 a12(t)1),如果不是纯调频函数则返回步骤(1)对 s 11 ( t ) s_{11}(t) s11(t)重复以上迭代过程,直到得到一个纯调频信号 s 1 n ( t ) s_{1n}(t) s1n(t),则有:
    h 11 ( t ) = x ( t ) − m 11 ( t ) h 12 ( t ) = s 11 ( t ) − m 12 ( t ) ⋮ h 1 n ( t ) = s 1 ( n − 1 ) ( t ) − m 1 n ( t ) h_{11}(t)=x(t)-m_{11}(t) \\ h_{12}(t)=s_{11}(t)-m_{12}(t) \\ \vdots \\ h_{1n}(t)=s_{1(n-1)}(t)-m_{1n}(t) h11(t)=x(t)m11(t)h12(t)=s11(t)m12(t)h1n(t)=s1(n1)(t)m1n(t)
  • 5、将整个迭代过程中产生的所有局部包络函数相乘,得到包络信号 a 1 ( t ) a_1(t) a1(t)
    a 1 ( t ) = a 11 ( t ) a 12 ( t ) ⋯ a 1 n ( t ) = ∏ q = 1 n a 1 q ( t ) a_1(t)=a_{11}(t)a_{12}(t) \cdots a_{1n}(t)=\prod_{q=1}^n a_{1q}(t) a1(t)=a11(t)a12(t)a1n(t)=q=1na1q(t)
  • 6、原始信号的第一个 P F PF PF分量即为包络信号 a 1 ( t ) a_1(t) a1(t)和纯调频信号 s 1 n ( t ) s_{1n}(t) s1n(t)的乘积:
    P F 1 ( t ) = a 1 ( t ) s 1 n ( t ) PF_1(t)=a_1(t)s_{1n}(t) PF1(t)=a1(t)s1n(t)
  • 7、从原始信号 x ( t ) x(t) x(t)中将 P F 1 ( t ) PF_1(t) PF1(t)分量分离出来,并且得到的新信号 u 1 ( t ) u_1(t) u1(t)作为一个新的原始信号,重复步骤(1)~(6)并且进行 k k k次循环,直至 u k ( t ) u_k(t) uk(t)为一个单调函数为止。
    u 1 ( t ) = x ( t ) − P F 1 ( t ) u 2 ( t ) = u 1 ( t ) − P F 2 ( t ) ⋮ u k ( t ) = u k − 1 ( t ) − P F k ( t ) u_{1}(t)=x(t)-PF_{1}(t) \\ u_{2}(t)=u_{1}(t)-PF_{2}(t) \\ \vdots \\ u_{k}(t)=u_{k-1}(t)-PF_{k}(t) u1(t)=x(t)PF1(t)u2(t)=u1(t)PF2(t)uk(t)=uk1(t)PFk(t)
    经过多次循环迭代的分解之后,原始信号最终被分解成 k k k P F PF PF分量和一个余量 u k ( t ) u_k(t) uk(t)之和的形式,即:
    x ( t ) = ∑ p = 1 k P F p ( t ) + u k ( t ) x(t)=\sum_{p=1}^kPF_p(t)+u_k(t) x(t)=p=1kPFp(t)+uk(t)
  • 14
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
LMD(Local Mean Decomposition,局部均值分解)是一种信号分解方法,用于将信号分解为多个局部均值局部振幅成分。下面是一个基本的LMD自适应分解的Python代码示例: ```python import numpy as np import matplotlib.pyplot as plt def lmd_decomposition(signal, num_iterations=10, stopping_criteria=0.01): components = [] residue = signal.copy() for iteration in range(num_iterations): local_mean = np.mean(residue) detail = residue - local_mean components.append(local_mean) if np.max(np.abs(detail)) < stopping_criteria: break residue = detail.copy() components.append(residue) return components # 示例使用 # 生成一个示例信号 t = np.arange(0, 1, 0.01) signal = np.sin(2 * np.pi * 5 * t) + np.sin(2 * np.pi * 10 * t) + np.sin(2 * np.pi * 15 * t) # 进行LMD分解 components = lmd_decomposition(signal) # 绘制分解结果 plt.figure(figsize=(10, 6)) plt.subplot(len(components), 1, 1) plt.plot(signal) plt.title("Original Signal") for i in range(len(components)): plt.subplot(len(components), 1, i+2) plt.plot(components[i]) plt.title("Component {}".format(i+1)) plt.tight_layout() plt.show() ``` 这段代码中的`lmd_decomposition`函数接受一个信号作为输入,并使用LMD算法将信号分解为多个局部均值成分和一个残差成分。在每个迭代步骤中,计算信号的局部均值,并将其与原始信号相减得到细节成分。重复这个过程直到细节成分的振幅低于指定的停止条件。最后,返回所有的局部均值成分和残差成分。 在示例中,我们生成一个包含三个正弦波的示例信号,并使用LMD分解将其分解为三个局部均值成分和一个残差成分。然后,我们绘制原始信号和分解后的各个成分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

cofisher

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

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

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

打赏作者

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

抵扣说明:

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

余额充值