VMD方法的细分种类与扩展
目录
前言
自从 Dragomiretskiy & Zosso 在 2014 年提出变分模态分解 (Variational Mode Decomposition, VMD) 后,围绕该框架已出现许多改进与扩展。传统 VMD 对单通道时间序列进行带宽最小化分解,在实际应用中,研究者们为满足多样的信号类型(多通道、图像、复数信号等)和不同的分析需求(自适应参数、加权策略、集成算法等),提出了各种细分与衍生方法。这些方法在工程、医学、生物、经济等领域均有应用价值。
下面将详细介绍常见的 VMD 细分种类,并结合其主要特点、公式或思路。希望读者能在了解“原始 VMD”基本思想的基础上,根据不同需求选择合适的扩展版本。
VMD的基础回顾
1. 原始VMD目标
假设有信号
f
(
t
)
f(t)
f(t),希望将其分解为
K
K
K 个模态
u
k
(
t
)
u_k(t)
uk(t),每个模态在频域上集中于中心频率
ω
k
\omega_k
ωk。VMD 通过构造一个变分优化,令所有模态的带宽总和最小化,并满足
∑
k
=
1
K
u
k
(
t
)
=
f
(
t
)
.
\sum_{k=1}^K u_k(t) = f(t).
k=1∑Kuk(t)=f(t).
最常见的频域迭代形式为(略去详细推导):
u
^
k
n
+
1
(
ω
)
=
f
^
(
ω
)
−
∑
i
≠
k
u
^
i
n
(
ω
)
+
1
2
λ
^
n
(
ω
)
1
+
2
α
(
ω
−
ω
k
n
)
2
,
\hat{u}_k^{n+1}(\omega) = \frac{\hat{f}(\omega) - \sum_{i \neq k}\hat{u}_i^n(\omega) + \tfrac{1}{2}\hat{\lambda}^n(\omega)} {1 + 2\alpha (\omega - \omega_k^n)^2},
u^kn+1(ω)=1+2α(ω−ωkn)2f^(ω)−∑i=ku^in(ω)+21λ^n(ω),
再根据
u
^
k
n
+
1
(
ω
)
\hat{u}_k^{n+1}(\omega)
u^kn+1(ω) 更新中心频率
ω
k
n
+
1
\omega_k^{n+1}
ωkn+1,以及拉格朗日乘子
λ
^
n
+
1
(
ω
)
\hat{\lambda}^{n+1}(\omega)
λ^n+1(ω)。
通过反复迭代直至收敛,可得到各模态及对应中心频率。
2. 参数影响
- K K K:模态数,需要先验或通过经验/搜索选定;
- α \alpha α:带宽惩罚系数,平滑程度的控制;
- 初始 ω k \omega_k ωk:可从信号频谱选取或随机;
- λ \lambda λ、步长等控制拉格朗日更新。
3. 原始VMD局限
- 仅针对单通道实值信号;
- 需要手动给定 K K K 等参数;
- 对噪声、不同采样维度或图像数据等可能需要更灵活的改造;
- 对多次分解迭代仍可能依赖初始化。
这些也正是后续各种扩展方法出现的原因。
常见细分与扩展框架
1. 标准VMD (Vanilla VMD)
- 提出者:Dragomiretskiy & Zosso, 2014
- 适用场景:单通道实值信号;如振动信号、音频、经济时间序列等。
- 优势:带宽约束明晰,可抑制模态混叠,效果比 EMD 更稳健。
- 不足:无法直接处理复数、多通道或图像;需用户提供模态数和惩罚系数。
这是最基础的 VMD 形式,几乎所有衍生都基于此思想。许多文献引用“VMD”时实际上指的是这一版本。
2. 复数VMD (Complex VMD)
- 背景
很多场景下信号带有复数形式,例如:- 雷达中的 IQ 信号;
- 地震数据的希尔伯特变换后得到的解析信号;
- 通信系统的基带复杂波形。
- 思路
将 u k ( t ) u_k(t) uk(t) 视为复函数,或者将原信号 f ( t ) f(t) f(t) 扩展为复数信号后,再在频域上最小化“复带宽”。 - 与标准VMD差异
- 在频域更新时,可能需要同时考虑实部与虚部;
- 计算模态中心频率时, ∣ u ^ k ( ω ) ∣ 2 |\hat{u}_k(\omega)|^2 ∣u^k(ω)∣2 的概念仍适用,只是多了相位角度。
- 应用示例
- 雷达目标检测:提取不同多普勒模态;
- 复数EEG 或脑电信号的全相位分析;
- 地球物理中的复数反射系数提取。
3. 多通道VMD (Multivariate VMD 或 MVMD)
- 动机
在工业、医疗和其他实际场合,往往有多通道同时采样。例如:- 三轴加速度振动信号 (x,y,z);
- 心电图(ECG)多导联记录;
- 多麦克风阵列捕获的音频。
如果我们分别对每个通道做单通道 VMD,可能得到分解结果缺乏跨通道的一致性。
- 思路
- 将多通道信号 f ( t ) = [ f 1 ( t ) , … , f m ( t ) ] \mathbf{f}(t)=[f_1(t),\dots,f_m(t)] f(t)=[f1(t),…,fm(t)] 一并放入变分框架;
- 同一模态在不同通道上都有一个分量 u k ( t ) = [ u k , 1 ( t ) , … , u k , m ( t ) ] \mathbf{u}_k(t)=[u_{k,1}(t),\dots,u_{k,m}(t)] uk(t)=[uk,1(t),…,uk,m(t)];
- 通过对带宽最小化 + 多通道一致性约束,得到更稳健的分解。
- 关键技术要点
- 可能需要定义一种多通道的耦合中心频率;
- 或者假设同一模态在各通道的中心频率大致相同;
- 频域迭代时需同时考虑各通道的傅里叶变换。
- 优点
- 同步分解,多通道信息共享;
- 减少单通道分解可能出现的模态错配或混叠;
- 对多维测量数据更有意义(如机械振动多传感器融合)。
4. 二维VMD (2D-VMD 或 Bidimensional VMD)
- 动机
针对图像、二维场等情况,EMD 的二维扩展已有尝试(如 BEMD)。VMD 也可做类似推广:- 图像信号 f ( x , y ) f(x,y) f(x,y) 的多频率成分分解(例如纹理分量、边缘分量等)。
- 思路
- 将一维时域 t t t 改成二维坐标 ( x , y ) (x,y) (x,y);
- 在二维傅里叶平面上定义各模态 u ^ k ( ω x , ω y ) \hat{u}_k(\omega_x, \omega_y) u^k(ωx,ωy) ;
- 依然进行带宽最小化,但带宽现在是“在 ( ω x , ω y ) (\omega_x, \omega_y) (ωx,ωy) 平面上集中”的程度。
- 应用场景
- 图像去噪:不同模态对应不同空域频率;
- 纹理分离:某些纹理成分对应高频模态,背景对应低频模态;
- 遥感图像处理:提取地表不同尺度纹理等。
- 难点
- 计算量更大:二维 FFT + 多次迭代;
- 边界效应、噪声等在 2D 中更加复杂。
5. 自适应参数VMD (Adaptive Parameter VMD)
- 痛点
标准 VMD 需要事先给出 α \alpha α、 K K K 等参数,但在实际应用中往往并不知道最佳取值是多少。 - 思路
- 通过在外层包裹一个优化算法(遗传算法、粒子群(PSO)、蚂蚁算法、贝叶斯优化等),对 α \alpha α、 K K K 等做全局或局部搜索。
- 以重构误差、模态正交度、频域分离度等综合指标作为评价函数,自动寻优。
- 流程举例
- 给定一个搜索区间 (如 α ∈ [ 100 , 2000 ] \alpha \in [100,2000] α∈[100,2000], K ∈ [ 2 , 6 ] K \in [2,6] K∈[2,6]);
- 优化算法产生一组( α \alpha α, K K K);
- 进行一次VMD分解,得到各模态并计算评价指标;
- 迭代更新,直至搜索到最优的( α \alpha α, K K K)。
- 优点
- 减少对经验的依赖;
- 分解结果更稳健、合理。
- 缺点
- 计算量加倍甚至数倍;
- 需额外实现或引入优化算法。
6. 加权VMD (Weighted VMD)
- 动机
在某些场景,需要强调或弱化信号某些片段的重要程度。例如:- 故障发生前后的数据权重更高,方便更加精细地分解;
- 对异常噪声区段权重降低,以减小对分解的干扰。
- 方法
在原始 VMD 的目标函数里引入一个权重函数 w ( t ) w(t) w(t),或者在频域中对应加权,以此影响带宽最小化过程。 - 实现方式
- 可能在时域先将 u k ( t ) u_k(t) uk(t) 的能量计算乘上 w ( t ) w(t) w(t) 再积分;
- 或者在频域对 f ^ ( ω ) \hat{f}(\omega) f^(ω) 屏蔽/衰减某段频率范围。
- 难点
- 如何设计权重函数:手动还是自动?
- 需要保证迭代更新公式可行。
- 优点
提高对局部特征的关注度、减小对杂散信息的过度拟合。
7. 集成VMD (Ensemble VMD / CE-VMD)
- 背景
类似 EEMD 将多次加噪并平均,VMD 也可能对随机初始化或噪声敏感。 - 思想
- 对信号 f f f 多次添加不同随机噪声(或随机初值);
- 每次做 VMD 分解,得到若干模态;
- 对这些模态进行某种合成(如逐点平均或“多数投票”式选择),得到最终分解结果。
- 作用
- 平滑随机性:有时 VMD 对初值依赖较大,多次随机可减少局部极小概率;
- 抵消噪声:如同 EEMD 原理,随机噪声可在多次叠加后互相抵消。
- 缺点
计算量更大,需要多次重复 VMD;
结果解释时可能需要额外考虑模态对齐问题(不同分解的模态排序如何对应?)。
8. 多目标VMD (Multi-objective VMD)
- 动机
在某些复杂应用里,可能不仅希望带宽最小,还想同时最小化其他指标(例如重构误差、正交度、稀疏度等)。 - 方法
- 将多项指标视为多目标优化问题;
- 采用 NSGA-II、MOPSO 等多目标进化算法来寻找一组“帕累托最优解”;
- 在帕累托前沿上,根据偏好挑选某个折衷方案。
- 局限
- 多目标算法本身复杂度高,计算开销更大;
- 最终可能得到一系列可行解,需要人工选取或根据领域需求决定。
9. 其他衍生方向
- F-VMD(Fast VMD)
- 利用快速 FFT 变换、GPU 并行或稀疏处理等,加速原 VMD 在大规模数据上的迭代。
- VMD + 小波/经验分解 结合
- 先做一次 VMD 分解,再对某些模态做小波去噪或二次分解;
- 或者在小波域中嵌入 VMD 更新以获取更细致的时频特征。
- VMD 与深度学习
- 将分解得到的模态输入 RNN、CNN 等模型做故障检测、预测;
- 或用深度网络来自适应调参 α \alpha α、 ω k \omega_k ωk 等。
- 随机稀疏约束的 VMD
- 在拉格朗日框架中加入稀疏先验,促使部分模态系数稀疏化,以识别稀疏激活成分。
各细分方法的适用场景与对比
方法名称 | 关键特征 | 优势 | 不足或局限 |
---|---|---|---|
标准VMD | 单通道、实值、需要给定K等参数 | 算法清晰,广泛应用,效果优于EMD系列 | 不能直接处理复数、多通道、图像;需手动调参 |
复数VMD | 针对复数信号 (IQ或解析信号) | 同时捕捉相位/幅度成分,适合雷达/通信等 | 迭代时更复杂,对噪声和初值仍敏感 |
多通道VMD (MVMD) | 多通道耦合,统一分解 | 充分利用通道间相关性,减少单通道错配 | 算法更复杂,涉及多个通道的同步更新 |
二维VMD (2D-VMD) | 针对图像或二维数据 | 能提取多尺度、多纹理的图像分量 | 计算量大,边界效应更复杂,应用场景需较高算力 |
自适应参数VMD | 外加优化/搜索机制,自动选取参数 | 减少经验依赖,分解更稳健 | 多次嵌套迭代,计算量激增 |
加权VMD (Weighted) | 时域或频域加权,关注局部特征或抑制噪声 | 可对特定区域重点分解,有利于故障点分析等 | 需设计权重函数,过度权重可能导致其他区域失真 |
集成VMD (Ensemble) | 多次随机+平均/融合,类似EEMD的思路 | 抑制随机初始化影响,结果更平滑 | 多次分解带来数倍开销,需对模态对齐做处理 |
多目标VMD | 同时最小化带宽、重构误差等多个目标 | 获取不同优化侧重的解集,灵活度高 | 多目标算法复杂度高,需人工选取最优点 |
其他衍生 (F-VMD等) | 针对速度、稀疏性、深度学习结合等做专门改进 | 各自面向大数据实时处理、稀疏先验或特征提取 | 依赖更复杂的算法或硬件环境 |
读者可根据数据类型(单通道、多通道、图像/二维、复数)、应用场景(需要自动调参、加权处理、多目标优化等)以及算力预算等选择合适的VMD变种。
完整示例:多通道VMD的Python演示
下面给出一个**简化的多通道VMD(MVMD)**示例。该示例仅演示思路,实际实现中可能需要更复杂的公式。假设我们有两通道信号(可类比多通道扩展),且希望联合分解成若干模态。
import numpy as np
import matplotlib.pyplot as plt
# -----------------------------
# 1. 构造一个简单的多通道示例信号
# -----------------------------
fs = 1000
t = np.arange(0, 1.0, 1/fs)
# 通道1:包含低频 + 噪声
f1_1 = 0.7 * np.sin(2*np.pi*30 * t) # 30Hz
noise1 = 0.2 * np.random.randn(len(t))
# 通道2:包含高频 + 噪声
f2_1 = 0.5 * np.sin(2*np.pi*120 * t) # 120Hz
noise2 = 0.2 * np.random.randn(len(t))
channel1 = f1_1 + noise1
channel2 = f2_1 + noise2
# 合并为多通道矩阵: shape = (2, N)
X = np.vstack([channel1, channel2])
# -----------------------------
# 2. 设定MVMD参数
# -----------------------------
K = 2 # 试图分解成2个模态
alpha = 2000 # 带宽惩罚系数
tol = 1e-6
max_iter = 500
# 初始中心频率可以随意,也可在频谱中分析后再赋值
omega_init = np.random.rand(K)
# -----------------------------
# 3. MVMD迭代(仅演示性代码, 非完整实现)
# -----------------------------
# 频域变换
N = X.shape[1]
freqs = np.fft.fftfreq(N, 1/fs)
Xf_ch1 = np.fft.fft(X[0,:])
Xf_ch2 = np.fft.fft(X[1,:])
# 初始化
U = np.zeros((K, 2, N), dtype=complex) # 每个模态在两个通道上的频域表示
lambda_ = np.zeros(N, dtype=complex)
omega = omega_init.copy()
def band_width(Uk, w_k, alpha):
# 仅示例,实际需更复杂
# 这里假设 Uk 已经搬移到基带(此处省略),
# alpha * (freq - w_k)^2 * ...
pass
for iteration in range(max_iter):
U_old = U.copy()
# 交替更新每个 k
for k in range(K):
# 暂时省略, 仅做伪代码
# 1) 计算 "其余模态" 总和
# 2) 根据公式, 更新 U[k,:,:] 在两个通道上的频域值
# 3) 计算该模态的中心频率 w_k
pass
# 更新拉格朗日乘子
# lambda_ = lambda_ + tau * (Xf_ch1 + Xf_ch2 - sum of all U)...
# 判断收敛
diff = np.sum(np.abs(U - U_old))
if diff < tol:
print("Converged at iteration:", iteration)
break
# -----------------------------
# 4. 逆FFT回到时域 (仅示例)
# -----------------------------
u_time = np.zeros((K, 2, N))
for k in range(K):
for ch in range(2):
u_time[k,ch,:] = np.fft.ifft(U[k,ch,:]).real
# -----------------------------
# 5. 可视化
# -----------------------------
plt.figure(figsize=(10,6))
plt.subplot(3,1,1)
plt.plot(t, X[0,:], 'b', label='Channel1')
plt.plot(t, X[1,:], 'r', label='Channel2')
plt.title("Original 2-channel signals")
plt.legend()
plt.subplot(3,1,2)
plt.plot(t, u_time[0,0,:], 'b', label='IMF1 - ch1')
plt.plot(t, u_time[0,1,:], 'r', label='IMF1 - ch2')
plt.legend()
plt.title("Mode 1 in each channel (time domain)")
plt.subplot(3,1,3)
plt.plot(t, u_time[1,0,:], 'b', label='IMF2 - ch1')
plt.plot(t, u_time[1,1,:], 'r', label='IMF2 - ch2')
plt.legend()
plt.title("Mode 2 in each channel (time domain)")
plt.tight_layout()
plt.show()
示例代码简要解读
- 信号合成:我们模拟了两个通道,各包含不同主要频率 (30Hz、120Hz) 和噪声,组合成多通道矩阵
X
。 - 参数设定:
K=2
代表分成 2 个模态;alpha=2000
控制带宽罚项;tol
和max_iter
用于控制迭代收敛和上限。 - MVMD迭代:示例中只是伪代码框架,真实实现需要更完整的拉格朗日更新公式、搬移到基带的操作等。
- 时域重建:将每个模态的频域表示
U[k,ch,:]
逆FFT 得到u_time[k,ch,:]
。 - 可视化:分别绘制原始 2 通道信号和分解后的 2 个模态,以观察它们在每个通道上的贡献。
参考文献
- Dragomiretskiy, K., & Zosso, D. (2014). Variational Mode Decomposition. IEEE Transactions on Signal Processing, 62(3), 531–544.
- Colominas, M. A., Schlotthauer, G., & Torres, M. E. (2014). Improved complete ensemble EMD: A suitable tool for biomedical signal processing. Biomedical Signal Processing and Control, 14, 19–29.
- Rehman, N., & Mandic, D. P. (2010). Multivariate empirical mode decomposition. Proceedings of the Royal Society A: Mathematical, Physical and Engineering Sciences, 466(2117), 1291–1302. (多通道 EMD 思想的参考,可类推到 MVMD)
- Zhu, Z. et al. (2016). A new method for fault detection of rotating machinery based on variational mode decomposition and manifold learning. ISA Transactions, 62, 615–628. (在工业振动信号中应用 VMD 的例子)
- Zhang, Q. et al. (2017). A novel wind power forecasting approach based on wind speed time series decomposition and echo state network. Energy Conversion and Management, 133, 409–419. (自适应参数VMD思路)
- Yue, N. et al. (2019). A new 2D-VMD algorithm for image decomposition. Measurement, 147, 106873. (二维图像分解的参考)