希尔伯特谱(Hilbert Spectrum)详解

希尔伯特谱(Hilbert Spectrum)详解

目录

  1. 背景简介
  2. 希尔伯特变换与解析信号
  3. 瞬时幅值、瞬时相位和瞬时频率
  4. 本征模态分解(EMD)步骤与数学推导
  5. 希尔伯特变换在EMD中的应用
  6. 希尔伯特谱的定义与构建
  7. 希尔伯特边际谱
  8. 希尔伯特谱的特征与优势
  9. 实际应用举例
  10. 数学公式补充与整理
  11. 代码示例
  12. 代码简要说明

1. 背景简介

对于很多在实际生活、工业生产、医学检测中遇到的非平稳、非线性信号,传统的时频分析方法(如傅里叶变换、短时傅里叶变换STFT、小波变换等)有一定局限:往往需要事先假设或选择某种基函数,或者频率分辨率与时间分辨率无法同时兼顾。

希尔伯特-黄变换(Hilbert-Huang Transform, HHT) 是由NASA的黄锷(N. E. Huang)等人提出,主要包括两大步骤:

  1. 本征模态分解(EMD, Empirical Mode Decomposition):将原信号分解为若干个自适应的、本征模态函数(IMF)。
  2. 希尔伯特谱(Hilbert Spectrum):对每个IMF做希尔伯特变换,提取瞬时幅值和瞬时频率,并将它们在时频平面中以幅值或能量的形式可视化。

核心目标:更好地分析和可视化信号在时间和频率上的局部细节,且不需要先验的基函数。


2. 希尔伯特变换与解析信号

2.1 希尔伯特变换的定义

给定一个实值信号 x ( t ) x(t) x(t),它的希尔伯特变换(Hilbert Transform)记作:
y ( t ) = H { x ( t ) } = 1 π P.V. ∫ − ∞ + ∞ x ( τ ) t − τ   d τ , y(t) = \mathcal{H}\{x(t)\} = \frac{1}{\pi} \text{P.V.} \int_{-\infty}^{+\infty} \frac{x(\tau)}{t - \tau} \, d\tau, y(t)=H{x(t)}=π1P.V.+tτx(τ)dτ,
其中,“ P.V. \text{P.V.} P.V.”表示
柯西主值积分
(Principal Value)。

例如,当我们在离散或数值计算时,往往使用基于卷积或快速傅里叶变换(FFT)的方式来实现希尔伯特变换。而在理论层面,这个积分揭示了一个与原信号相位差为 ± π 2 \pm \frac{\pi}{2} ±2π 的正交分量。

2.2 解析信号

将原信号 x ( t ) x(t) x(t) 与其希尔伯特变换 y ( t ) y(t) y(t) 组合起来,可以得到解析信号(analytic signal) z ( t ) z(t) z(t):
z ( t ) = x ( t ) + j   y ( t ) . z(t) = x(t) + j \, y(t). z(t)=x(t)+jy(t).
此时 x ( t ) x(t) x(t) 为实部, y ( t ) y(t) y(t) 为虚部,使得 z ( t ) z(t) z(t) 成为一个在正频域具有能量分布的复信号。


3. 瞬时幅值、瞬时相位和瞬时频率

解析信号 z ( t ) z(t) z(t) 的极坐标形式可以写作:
z ( t ) = A ( t ) e j θ ( t ) , z(t) = A(t) e^{j\theta(t)}, z(t)=A(t)ejθ(t),
其中:

  • 瞬时幅值(Instantaneous Amplitude):
    A ( t ) = ∣ z ( t ) ∣ = x 2 ( t ) + y 2 ( t ) , A(t) = |z(t)| = \sqrt{x^2(t) + y^2(t)}, A(t)=z(t)=x2(t)+y2(t) ,
  • 瞬时相位(Instantaneous Phase):
    θ ( t ) = arctan ⁡  ⁣ ( y ( t ) x ( t ) ) ( 通常实际计算中做相位展开 ) . \theta(t) = \arctan\!\Big(\frac{y(t)}{x(t)}\Big) \quad (\text{通常实际计算中做相位展开}). θ(t)=arctan(x(t)y(t))(通常实际计算中做相位展开).
  • 瞬时频率(Instantaneous Frequency):
    ω ( t ) = d θ ( t ) d t , \omega(t) = \frac{d \theta(t)}{d t}, ω(t)=dtdθ(t),
    或者以赫兹表示则为 f ( t ) = ω ( t ) 2 π f(t) = \frac{\omega(t)}{2\pi} f(t)=2πω(t)

这些量能够描述信号在局部时间(“瞬时”)上的幅值和频率变化,这对于分析非平稳信号具有极大意义。


4. 本征模态分解(EMD)步骤与数学推导

本征模态分解(EMD)是希尔伯特-黄变换的第一步,用于将原信号拆分成若干本征模态函数(IMF, Intrinsic Mode Function)。每个IMF满足如下两条性质:

  1. 在全局范围内,极值点数与零交叉点数(或相差不超过1)相近或相等。
  2. 在任何时刻,IMF的上包络线与下包络线的平均值为零。

4.1 EMD算法的核心“筛选(Sifting)”过程

设原信号为 x ( t ) x(t) x(t)。EMD的“筛选”循环通常这样进行:

  1. 找极值:在 x ( t ) x(t) x(t) 中识别所有极大值点 { t i max ⁡ , x i max ⁡ } \{t_i^{\max}, x_i^{\max}\} {timax,ximax} 和极小值点 { t j min ⁡ , x j min ⁡ } \{t_j^{\min}, x_j^{\min}\} {tjmin,xjmin}
  2. 插值构造上、下包络
    • 通过这些极大值点,用三次样条或其他平滑插值法得到一个上包络函数 e max ⁡ ( t ) e_{\max}(t) emax(t)
    • 通过这些极小值点,同理得到一个下包络函数 e min ⁡ ( t ) e_{\min}(t) emin(t)
  3. 计算局部平均
    m 1 ( t ) = e max ⁡ ( t ) + e min ⁡ ( t ) 2 . m_1(t) = \frac{e_{\max}(t) + e_{\min}(t)}{2}. m1(t)=2emax(t)+emin(t).
  4. 提取候选分量
    h 1 ( t ) = x ( t ) − m 1 ( t ) . h_1(t) = x(t) - m_1(t). h1(t)=x(t)m1(t).
    这步旨在“去除”信号的低频或高频趋势,保留相对“振荡更快”的部分。
  5. 重复筛选
    • 检查 h 1 ( t ) h_1(t) h1(t) 是否满足IMF条件(极值点数与过零点数接近,且上/下包络平均值近乎零)。
    • 若不满足,则令 x ( t ) ← h 1 ( t ) x(t) \leftarrow h_1(t) x(t)h1(t),再次执行 步骤1-4,得 h 2 ( t ) h_2(t) h2(t)
    • 继续重复,直到获得一个满足IMF定义的函数 c ~ 1 ( t ) \tilde{c}_1(t) c~1(t)。把它称作第一IMF
  6. 分离并迭代
    r 1 ( t ) = x ( t ) − c ~ 1 ( t ) . r_1(t) = x(t) - \tilde{c}_1(t). r1(t)=x(t)c~1(t).
    将第一IMF从信号中移除,得到剩余信号 r 1 ( t ) r_1(t) r1(t)。然后对 r 1 ( t ) r_1(t) r1(t) 做同样的过程,依次提取 第二IMF第三IMF……直到剩余信号 r n ( t ) r_n(t) rn(t) 不再含有明显振荡或达到某个停止准则。

最后,原信号被拆分为:
x ( t ) = ∑ k = 1 n c k ( t ) + r n ( t ) , x(t) = \sum_{k=1}^{n} c_k(t) + r_n(t), x(t)=k=1nck(t)+rn(t),
其中 c k ( t ) c_k(t) ck(t) 为第 k k k 个IMF, r n ( t ) r_n(t) rn(t) 是剩余项(可以看作全局趋势或误差)。

4.2 数学层面的简要说明

  • (极值-包络插值) 让我们在每一层级分离时,充分利用信号自身的极值结构去定义局部振荡成分;
  • (上/下包络平均) 使得提取出的分量保证“振荡对称性”;
  • (多次筛选迭代) 则是自适应地“逼近”一个符合IMF定义的分量。

这个过程十分自适应,不需要任何先验基函数(比如傅里叶基或小波基),它直接利用数据本身的局部特征完成分解。


5. 希尔伯特变换在EMD中的应用

当我们利用EMD得到了一系列IMF之后,每个IMF往往被视为一个“近似单分量”或“本征振荡”,具有更明确的瞬时频率意义。

对每个IMF(记作 c k ( t ) c_k(t) ck(t))进行希尔伯特变换,可得到其对应的瞬时幅值、瞬时相位和瞬时频率:

  1. 解析信号:
    z k ( t ) = c k ( t ) + j   H { c k ( t ) } . z_k(t) = c_k(t) + j\, \mathcal{H}\{c_k(t)\}. zk(t)=ck(t)+jH{ck(t)}.
  2. 瞬时幅值:
    A k ( t ) = c k 2 ( t ) + H { c k ( t ) } 2 . A_k(t) = \sqrt{ c_k^2(t) + \mathcal{H}\{c_k(t)\}^2 }. Ak(t)=ck2(t)+H{ck(t)}2 .
  3. 瞬时相位:
    θ k ( t ) = arctan ⁡  ⁣ ( H { c k ( t ) } c k ( t ) ) . \theta_k(t) = \arctan\!\Big(\frac{\mathcal{H}\{c_k(t)\}}{c_k(t)}\Big). θk(t)=arctan(ck(t)H{ck(t)}).
  4. 瞬时角频率:
    ω k ( t ) = d θ k ( t ) d t . \omega_k(t) = \frac{d\theta_k(t)}{dt}. ωk(t)=dtdθk(t).

这样,我们就能得到不同时间点上每个本征模态分量的瞬时频率幅值


6. 希尔伯特谱的定义与构建

希尔伯特谱(Hilbert Spectrum) 是将所有IMF的瞬时幅值及瞬时频率信息集中可视化的三维表示(时间-频率-幅值)。在理论上,我们可以定义一个时频分布函数 H ( ω , t ) H(\omega, t) H(ω,t)
H ( ω , t ) = ∑ k = 1 n A k ( t )   δ ( ω − ω k ( t ) ) , H(\omega, t) = \sum_{k=1}^{n} A_k(t)\,\delta\bigl(\omega - \omega_k(t)\bigr), H(ω,t)=k=1nAk(t)δ(ωωk(t)),
其中 ω k ( t ) \omega_k(t) ωk(t) 是第 k k k 个IMF在时刻 t t t 的瞬时角频率, A k ( t ) A_k(t) Ak(t) 为对应的瞬时幅值, δ ( ⋅ ) \delta(\cdot) δ() 为狄拉克 δ \delta δ-函数。

离散或数值计算中,我们通常会将每个IMF在每个采样时间点对应的瞬时频率 ω k ( t i ) \omega_k(t_i) ωk(ti) 映射到频率轴,并用幅值 A k ( t i ) A_k(t_i) Ak(ti) 做加权。然后通过插值或散点绘图的方式,构建时间-频率二维坐标,再用颜色深浅/亮度等方式表达幅值或能量:

  • 横轴: 时间 t t t
  • 纵轴: 频率 f = ω / ( 2 π ) f = \omega / (2\pi) f=ω/(2π)
  • 颜色/亮度: 幅值 A k ( t ) A_k(t) Ak(t) 或能量 A k 2 ( t ) A_k^2(t) Ak2(t)

这种时频图就是希尔伯特谱,可以清晰显示信号在不同时刻的频率成分及其强度。


7. 希尔伯特边际谱

希尔伯特边际谱(Hilbert Marginal Spectrum)是对希尔伯特谱在时间上的积分或某种统计汇总。可写作:
h ( ω ) = ∫ 0 T H ( ω , t )   d t , h(\omega) = \int_{0}^{T} H(\omega, t) \, dt, h(ω)=0TH(ω,t)dt,
也就是把
每一时刻
上在频率 ω \omega ω 处的幅值(或能量)做积分,得到一个随频率变化的整体分布。形式上可以展开为:
h ( ω ) = ∫ 0 T ∑ k = 1 n A k ( t )   δ ( ω − ω k ( t ) )   d t = ∑ k = 1 n ∫ 0 T A k ( t )   δ ( ω − ω k ( t ) )   d t . h(\omega) = \int_{0}^{T} \sum_{k=1}^{n} A_k(t)\,\delta(\omega - \omega_k(t)) \, dt = \sum_{k=1}^{n}\int_{0}^{T} A_k(t)\,\delta(\omega - \omega_k(t)) \, dt. h(ω)=0Tk=1nAk(t)δ(ωωk(t))dt=k=1n0TAk(t)δ(ωωk(t))dt.
它类似于傅里叶幅值谱,但又是基于瞬时频率在时间上的变化进行统计得到的。它更能体现非平稳信号在整个观察区间里各频率所占的“权重”。


8. 希尔伯特谱的特征与优势

  1. 自适应性:无需先验基函数,EMD过程完全利用信号本身特征,适用于非线性、非平稳信号。
  2. 高时频分辨率:与STFT、小波相比,希尔伯特谱在某些情况下能够更清晰地展现瞬时频率。
  3. 物理意义直观:瞬时频率和瞬时幅值常能直接映射到系统或设备的真实运动、振动或活动模式中,更易解释。
  4. 可视化强:在时-频平面,用颜色/灰度显示幅值或能量,能直观看到频率成分的随时间变化轨迹。

9. 实际应用举例

  • 机械故障检测:旋转机械、齿轮箱等的振动信号通常是非平稳的,如转速不恒定时的故障特征频率会随时间变化;希尔伯特谱可帮助识别故障发生的时间和频率区间。
  • 生物医学信号分析:对脑电(EEG)、心电(ECG)等复杂信号做EMD + 希尔伯特谱,可获得不同波段的神经活动或心律变化随时间的细节。
  • 语音信号:语音往往包含多种共振峰且时变性强,利用瞬时频率可更好地捕捉说话人发音动态。
  • 金融数据:研究非平稳金融时间序列的局部波动模式,也能用EMD/HHT进行探索性分析。

10. 数学公式补充与整理

下表给出本文中涉及的主要数学公式总结,便于快速查阅:

内容公式
希尔伯特变换定义 H { x ( t ) }    =    1 π   P.V. ∫ − ∞ + ∞  ⁣ x ( τ )   t − τ     d τ \displaystyle \mathcal{H}\{x(t)\} \;=\; \frac{1}{\pi} \,\text{P.V.}\int_{-\infty}^{+\infty}\! \frac{x(\tau)}{\,t-\tau\,}\, d\tau H{x(t)}=π1P.V.+tτx(τ)dτ$
解析信号 z ( t ) = x ( t ) + j   H { x ( t ) } \displaystyle z(t) = x(t) + j\,\mathcal{H}\{x(t)\} z(t)=x(t)+jH{x(t)}
瞬时幅值$\displaystyle A(t) =
瞬时相位 θ ( t ) = arctan ⁡  ⁣ ( H { x ( t ) } x ( t ) ) \displaystyle \theta(t) = \arctan\!\Bigl(\frac{\mathcal{H}\{x(t)\}}{x(t)}\Bigr) θ(t)=arctan(x(t)H{x(t)})
瞬时角频率 ω ( t ) = d θ ( t ) d t \displaystyle \omega(t) = \frac{d \theta(t)}{d t} ω(t)=dtdθ(t)
EMD分解形式 x ( t ) = ∑ k = 1 n c k ( t ) + r n ( t ) \displaystyle x(t) = \sum_{k=1}^{n} c_k(t) + r_n(t) x(t)=k=1nck(t)+rn(t)
EMD求第 k k k个IMF1) 识别极值并插值构造包络
2) 求平均 m 1 ( t ) m_1(t) m1(t)
3) h 1 ( t ) = x ( t ) − m 1 ( t ) h_1(t) = x(t) - m_1(t) h1(t)=x(t)m1(t)
4) 反复筛选以得到 c k ( t ) c_k(t) ck(t)
对IMF的希尔伯特变换 z k ( t ) = c k ( t ) + j   H { c k ( t ) } ,      A k ( t ) ,   ω k ( t )   同理可得 \displaystyle z_k(t) = c_k(t) + j\,\mathcal{H}\{c_k(t)\},\;\; A_k(t),\,\omega_k(t)\,\text{同理可得} zk(t)=ck(t)+jH{ck(t)},Ak(t),ωk(t)同理可得
希尔伯特谱 H ( ω , t ) = ∑ k = 1 n A k ( t )   δ ( ω − ω k ( t ) ) \displaystyle H(\omega, t) = \sum_{k=1}^{n} A_k(t)\,\delta\bigl(\omega - \omega_k(t)\bigr) H(ω,t)=k=1nAk(t)δ(ωωk(t))
希尔伯特边际谱 h ( ω ) = ∫ 0 T  ⁣ H ( ω , t )   d t    =    ∑ k = 1 n  ⁣ ∫ 0 T  ⁣ A k ( t )   δ ( ω − ω k ( t ) )   d t \displaystyle h(\omega) = \int_{0}^{T}\! H(\omega, t)\,dt \;=\; \sum_{k=1}^{n}\!\int_{0}^{T}\! A_k(t)\,\delta(\omega - \omega_k(t))\, dt h(ω)=0TH(ω,t)dt=k=1n0TAk(t)δ(ωωk(t))dt

11. 代码示例

下面示例使用Python演示如何对一个简单的三频正弦叠加信号进行EMD分解并计算希尔伯特谱。这里使用第三方库 PyEMD 完成 EMD,使用 scipy.signal.hilbert 完成希尔伯特变换,并用散点方式画出希尔伯特谱的雏形。

import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import hilbert
from PyEMD import EMD

# 1. 生成测试信号(混合三个不同频率的正弦波)
fs = 1000      # 采样率
t = np.linspace(0, 1, fs, endpoint=False)

s1 = np.sin(2 * np.pi * 50 * t)        # 50Hz, 幅值1
s2 = 0.5 * np.sin(2 * np.pi * 120 * t) # 120Hz, 幅值0.5
s3 = 0.2 * np.sin(2 * np.pi * 180 * t) # 180Hz, 幅值0.2
s = s1 + s2 + s3

# 2. EMD分解
emd = EMD()
imfs = emd(s)  # imfs.shape -> (IMF个数, 信号长度)

# 3. 对每个IMF做希尔伯特变换,得到瞬时幅值与瞬时频率
num_imfs = imfs.shape[0]
instantaneous_amps = []
instantaneous_freqs = []

for i in range(num_imfs):
    # (a) 解析信号
    analytic_signal = hilbert(imfs[i])
    # (b) 瞬时幅值
    amp = np.abs(analytic_signal)
    # (c) 相位
    phase = np.unwrap(np.angle(analytic_signal))
    # (d) 瞬时频率 (rad/s -> Hz)
    inst_freq = np.diff(phase) * fs / (2.0 * np.pi)
    
    # 与 inst_freq 对齐,幅值少最后一点
    instantaneous_amps.append(amp[:-1])
    instantaneous_freqs.append(inst_freq)

# 4. 简易散点画希尔伯特谱 (time, freq, amp)
time = t[:-1]  # 配合freq长度
plt.figure(figsize=(10,6))

for i in range(num_imfs):
    # 用散点图表达:(time, freq),颜色代表瞬时幅值
    plt.scatter(time, instantaneous_freqs[i], 
                s=5, c=instantaneous_amps[i], cmap='jet', alpha=0.7)

plt.xlabel('Time (s)')
plt.ylabel('Frequency (Hz)')
plt.title('Hilbert Spectrum (scatter demo)')
plt.colorbar(label='Amplitude')
plt.ylim(0, 250)
plt.tight_layout()
plt.show()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

DuHz

喜欢就支持一下 ~ 谢谢啦!

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

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

打赏作者

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

抵扣说明:

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

余额充值