1 VMD算法原理

VMD的思想认为待分解信号是由不同IMF的子信号组成的。VMD为避免信号分解过程中出现模态混叠,在计算IMF时舍弃了传统信号分解算法所使用的递归求解的思想,VMD采用的是完全非递归的模态分解。与传统信号分解算法相比,VMD拥有非递归求解和自主选择模态个数的优点。该算法可将第j条线路的暂态零序电流信号分解为K个中心角频率为的本征模态函数,其中K为人为指定的模态分量个数。不同于EMD,VMD将每个IMF定义为调幅调频函数,可表示为:

                              (1)

VMD算法可分为变分问题的构造和求解两部分:

(1)变分问题的构造:

                                                    (2)

①对暂态零序电流信号进行Hilbert变换,获得K个模态分量的解析信号,并得到单边频谱:

                       (3)

式中为冲激函数。

②将各模态的频谱调制到基频带上,得到:

③计算式(3)梯度的平方范数,并估计每个模态信号的带宽,构造变分问题如下:

            (4)

(2)变分问题的求解

将上述约束性转化为非约束性变分问题,在式(4)中引入二次惩罚因子和拉格朗日乘法算子,扩展的拉格朗日表达式为:

           (5)

采用乘法算子交替方向法(Alternate Direction Method of Multipliers,ADMM)求解

function [u, u_hat, omega] = VMD(signal, alpha, tau, K, DC, init, tol)
% Variational Mode Decomposition
% Authors: Konstantin Dragomiretskiy and Dominique Zosso
% zosso@math.ucla.edu --- http://www.math.ucla.edu/~zosso
% Initial release 2013-12-12 (c) 2013
%
% Input and Parameters:
% ---------------------
% signal  - the time domain signal (1D) to be decomposed
% alpha   - the balancing parameter of the data-fidelity constraint2000或20000
% tau     - time-step of the dual ascent ( pick 0 for noise-slack ) 0
% K       - the number of modes to be recovered
% DC      - true if the first mode is put and kept at DC (0-freq) 0
% init    - 0 = all omegas start at 0
%                    1 = all omegas start uniformly distributed
%                    2 = all omegas initialized randomly
% tol     - tolerance of convergence criterion; typically around 1e-6
%
% Output:
% -------
% u       - the collection of decomposed modes
% u_hat   - spectra of the modes
% omega   - estimated mode center-frequencies
%
% When using this code, please do cite our paper:
% -----------------------------------------------
% K. Dragomiretskiy, D. Zosso, Variational Mode Decomposition, IEEE Trans.
% on Signal Processing (in press)
% please check here for update reference:
%          http://dx.doi.org/10.1109/TSP.2013.2288675%---------- Preparations% Period and sampling frequency of input signal
save_T = length(signal);
fs = 1/save_T;% extend the signal by mirroring
T = save_T;
f_mirror(1:T/2) = signal(T/2:-1:1);
f_mirror(T/2+1:3*T/2) = signal;
f_mirror(3*T/2+1:2*T) = signal(T:-1:T/2+1);
f = f_mirror;% Time Domain 0 to T (of mirrored signal)
T = length(f);
t = (1:T)/T;% Spectral Domain discretization
freqs = t-0.5-1/T;% Maximum number of iterations (if not converged yet, then it won't anyway)
N = 500;% For future generalizations: individual alpha for each mode
Alpha = alpha*ones(1,K);% Construct and center f_hat
f_hat = fftshift((fft(f)));
f_hat_plus = f_hat;
f_hat_plus(1:T/2) = 0;% matrix keeping track of every iterant // could be discarded for mem
u_hat_plus = zeros(N, length(freqs), K);% Initialization of omega_k
omega_plus = zeros(N, K);
switch initcase 1for i = 1:Komega_plus(1,i) = (0.5/K)*(i-1);endcase 2omega_plus(1,:) = sort(exp(log(fs) + (log(0.5)-log(fs))*rand(1,K)));otherwiseomega_plus(1,:) = 0;
end% if DC mode imposed, set its omega to 0
if DComega_plus(1,1) = 0;
end% start with empty dual variables
lambda_hat = zeros(N, length(freqs));% other inits
uDiff = tol+eps; % update step
n = 1; % loop counter
sum_uk = 0; % accumulator% ----------- Main loop for iterative updateswhile ( uDiff > tol &&  n < N ) % not converged and below iterations limit% update first mode accumulatork = 1;sum_uk = u_hat_plus(n,:,K) + sum_uk - u_hat_plus(n,:,1);% update spectrum of first mode through Wiener filter of residualsu_hat_plus(n+1,:,k) = (f_hat_plus - sum_uk - lambda_hat(n,:)/2)./(1+Alpha(1,k)*(freqs - omega_plus(n,k)).^2);% update first omega if not held at 0if ~DComega_plus(n+1,k) = (freqs(T/2+1:T)*(abs(u_hat_plus(n+1, T/2+1:T, k)).^2)')/sum(abs(u_hat_plus(n+1,T/2+1:T,k)).^2);end% update of any other modefor k=2:K% accumulatorsum_uk = u_hat_plus(n+1,:,k-1) + sum_uk - u_hat_plus(n,:,k);% mode spectrumu_hat_plus(n+1,:,k) = (f_hat_plus - sum_uk - lambda_hat(n,:)/2)./(1+Alpha(1,k)*(freqs - omega_plus(n,k)).^2);% center frequenciesomega_plus(n+1,k) = (freqs(T/2+1:T)*(abs(u_hat_plus(n+1, T/2+1:T, k)).^2)')/sum(abs(u_hat_plus(n+1,T/2+1:T,k)).^2);end% Dual ascentlambda_hat(n+1,:) = lambda_hat(n,:) + tau*(sum(u_hat_plus(n+1,:,:),3) - f_hat_plus);% loop countern = n+1;% converged yet?uDiff = eps;for i=1:KuDiff = uDiff + 1/T*(u_hat_plus(n,:,i)-u_hat_plus(n-1,:,i))*conj((u_hat_plus(n,:,i)-u_hat_plus(n-1,:,i)))';enduDiff = abs(uDiff);end%------ Postprocessing and cleanup% discard empty space if converged early
N = min(N,n);
omega = omega_plus(1:N,:);% Signal reconstruction
u_hat = zeros(T, K);
u_hat((T/2+1):T,:) = squeeze(u_hat_plus(N,(T/2+1):T,:));
u_hat((T/2+1):-1:2,:) = squeeze(conj(u_hat_plus(N,(T/2+1):T,:)));
u_hat(1,:) = conj(u_hat(end,:));u = zeros(K,length(t));for k = 1:Ku(k,:)=real(ifft(ifftshift(u_hat(:,k))));
end% remove mirror part
u = u(:,T/4+1:3*T/4);% recompute spectrum
clear u_hat;
for k = 1:Ku_hat(:,k)=fftshift(fft(u(k,:)))';
endend

变分模态分解(VMD)原理-附代码相关推荐

  1. 鲸鱼算法优化变分模态分解(VMD)包络熵和参数的特征提取及MATLAB代码实现

    目录 1 简介 2 变分模态分解VMD原理 3 鲸鱼优化算法优化VMD原理 3.1. 鲸鱼优化算法优化VMD原理及流程 3.2. 特征提取流程 4 优化效果 4.1. VMD各分量信号时域图 4.2. ...

  2. vmd变分模态分解程序matlab论坛_博士兼职辅导员论坛分享会第三期

    新一期经验分享报告会又来了!本次报告满满干货,快来看看都有些什么内容吧? 报告题目 齿轮箱关键零部件复合故障特征提取方法研究 报告摘要: 基于振动信号的复合故障特征提取技术一直以来都是旋转机械故障诊断 ...

  3. 变分模态分解 python_浅谈VMD(变分模态分解)

    学号:19011210554   姓名:袁博 [嵌牛导读]:好多人看着VMD看博客最想知道的就是这东西的应用和大概步骤原理,而具体原理算法不太感兴趣,而且也不太容易看懂.本文既然是浅谈,就讲解一下VM ...

  4. 利用智能算法优化参数的自适应变分模态分解,VMD实现混合储能系统的分频

    关键词:混合储能,VMD,麻雀搜索算法,遗传算法,混合储能容量配置优化,混合储能功率分配,利用智能算法优化参数的自适应变分模态分解,VMD实现混合储能系统的分频,高频分配给超级电容器,低频分配给蓄电池 ...

  5. matlab中使用VMD(变分模态分解)

    最近我们被客户要求撰写关于VMD(变分模态分解)的研究报告,包括一些图形和统计输出. 拨号音信号的变模分解 创建一个以4 kHz采样的信号,类似于拨打数字电话的所有键.将信号另存为MATLAB®时间数 ...

  6. 分解得到的时频域特征_【推荐文章】基于变分模态分解和广义Warblet变换的齿轮故障诊断...

    <机械传动>2018年  第42卷   第7期 文章编号:1004-2539(2018)07-0157-05 DOI:10.16578/j.issn.1004.2539.2018.07.0 ...

  7. 变分模态分解_Android小部件示例中的模态对话框(弹出)

    变分模态分解 在此示例中,我们将看到如何在主屏幕中创建一个可以打开弹出对话框的Android小部件. 如您所知,Android Widgets是小型应用程序,基本上可以做两件事. 按下时启动新的活动, ...

  8. LoRa SX1278/76驱动原理 附代码

    LoRa SX1278/76驱动原理 附代码 原理解释 LoRa 关键参数说明 前导码: 报头: 显式报头模式: 隐式报头模式: LoRa 调制解调: 扩频因子: 编码率: 信号带宽: 代码说明 SP ...

  9. linux环境vmd下载,VMD Linux版下载|VMD(变分模态分解程序) V1.9.3 Linux版 下载_当下软件园_软件下载...

    VMD Linux版是款适用于Linux操作系统的分子运动绘图分析模拟软件.它可以真实的模拟分析的运动场景,提供可视化的图形界面,帮助用户更好的理解分析变化,提高研究效率,操作简单,方便快捷,非常好用 ...

  10. 【VMD-SSA-LSSVM】基于变分模态分解与麻雀优化Lssvm的负荷预测【多变量】(Matlab代码实现)

最新文章

  1. xml 和 json 序列化忽略字段
  2. 10种不要钱的护肤法则 - 生活至上,美容至尚!
  3. 由c#的值类型与引用类型说开去
  4. shiroConfig配置中要注意的事项
  5. PHP SPL使用方法和他的威力
  6. 开放下载!《一站式大数据开发治理DataWorks使用宝典》
  7. @staticmethod和@classmethod的作用与区别
  8. java使用Socket类接收和发送数据
  9. 从结构到模块!华为提出最新两步搜索的目标检测SM-NAS
  10. 事务的传播行为和隔离级别?
  11. 382 名员工遍布 47 个国家如何炼成代码托管平台 GitLab?
  12. 数据库MySQL--常见基础命令
  13. 孙鑫VC学习笔记:第十三讲 (四) 生成可串行化的类
  14. C++ 句柄类的原理以及设计
  15. python为什么胶水语言_为什么称python为胶水语言
  16. Noob 靶场渗透记录
  17. CleanMyMac4.11.1中文完整语言版本
  18. ios中嵌套h5做的app,长按图片默认会有放大效果;如何禁止
  19. 单模光电转换器怎么接_单纤光纤收发器a与b怎么放?如何使用光纤收发器的AB端?...
  20. 上午还在改bug,下午就被离职!年底大裁员寒潮来袭……

热门文章

  1. oracle 导入时出现两个,Oracle的导入及两个错误
  2. 密码学中PBC库的使用
  3. 开源推荐:表单收集系统-TDuck填鸭 v2版本!
  4. Windows程序设计:使用VS2010创建窗口程序
  5. html购物车结算代码,JavaScript购物车结算案例
  6. c可视化编程学习感悟_编程课程心得体会范文【五篇】
  7. iso硬盘安装 凤凰os_X86平台国产OS 对比评测 | 凤凰os安装教程_什么值得买
  8. 使用微信机器人实现华为OLT和中兴OLT挂测的简单功能
  9. python核心编程
  10. Android 移动应用开发模拟题