位置: IT常识 - 正文

浅谈VMD---变分模态分解(变分模态分解gnss)

编辑:rootadmin
浅谈VMD---变分模态分解

推荐整理分享浅谈VMD---变分模态分解(变分模态分解gnss),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vmd分解思路,变分模态分解参数优化,vmd分解思路,vmd比emd模态分解优点,变分模态分解详解,变分模态分解gnss,vmd分解思路,变分模态分解详解,内容如对您有帮助,希望把文章链接给更多的朋友!

很多场景下,我们需要将信号进行分解,为我们下一步操作提供方便,常用的分解方法可以有EMD族类,例如EMD、EEMD、FEEMD、CEEMDAN、ICEEMDAN等,当然也有小波分解、经验小波分解等,总之分解方式多种多样,根据样本的特点,选用不同的分解方式。这里简要介绍VMD分解。

     Konstantin等人在2014年提出了一个完全非递归的变分模态分解(VMD)它可以实现分解模态的同时提取。该模型寻找一组模态和它们各自的中心频率,以便这些模态共同再现输入信号,同时每个模态在解调到基带后都是平滑的。算法的本质是将经典的维纳滤波器推广到多个自适应波段,使得其具有坚实的理论基础,并且容易理解。采用交替方向乘子法对变分模型进行有效优化,使得模型对采样噪声的鲁棒性更强。

VMD分解的具体过程可以理解为变分问题的最优解,可以相应转化为变分问题的构造和求解。

 

 

浅谈VMD---变分模态分解(变分模态分解gnss)

以上就是VMD(变分模态分解)的理论部分,大家不一定全弄明白,因为本人看了原文,也不能完全弄懂里面的数学关系。大体知道分解的过程包含哪几个步骤即可,知网上面关于这类分解的文章也很多,大家可以参考浏览学习下。

下面直接上代码。

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 constraint% tau - time-step of the dual ascent ( pick 0 for noise-slack )% K - the number of modes to be recovered% DC - true if the first mode is put and kept at DC (0-freq)% 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 signalsave_T = length(signal);fs = 1/save_T;% extend the signal by mirroringT = 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 discretizationfreqs = 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 modeAlpha = alpha*ones(1,K);% Construct and center f_hatf_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 memu_hat_plus = zeros(N, length(freqs), K);% Initialization of omega_komega_plus = zeros(N, K);switch init case 1 for i = 1:K omega_plus(1,i) = (0.5/K)*(i-1); end case 2 omega_plus(1,:) = sort(exp(log(fs) + (log(0.5)-log(fs))*rand(1,K))); otherwise omega_plus(1,:) = 0;end% if DC mode imposed, set its omega to 0if DC omega_plus(1,1) = 0;end% start with empty dual variableslambda_hat = zeros(N, length(freqs));% other initsuDiff = tol+eps; % update stepn = 1; % loop countersum_uk = 0; % accumulator% ----------- Main loop for iterative updateswhile ( uDiff > tol && n < N ) % not converged and below iterations limit % update first mode accumulator k = 1; sum_uk = u_hat_plus(n,:,K) + sum_uk - u_hat_plus(n,:,1); % update spectrum of first mode through Wiener filter of residuals u_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 0 if ~DC omega_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 mode for k=2:K % accumulator sum_uk = u_hat_plus(n+1,:,k-1) + sum_uk - u_hat_plus(n,:,k); % mode spectrum u_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 frequencies omega_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 ascent lambda_hat(n+1,:) = lambda_hat(n,:) + tau*(sum(u_hat_plus(n+1,:,:),3) - f_hat_plus); % loop counter n = n+1; % converged yet? uDiff = eps; for i=1:K uDiff = 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)))'; end uDiff = abs(uDiff);end%------ Postprocessing and cleanup% discard empty space if converged earlyN = min(N,n);omega = omega_plus(1:N,:);% Signal reconstructionu_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:K u(k,:)=real(ifft(ifftshift(u_hat(:,k))));end% remove mirror partu = u(:,T/4+1:3*T/4);% recompute spectrumclear u_hat;for k = 1:K u_hat(:,k)=fftshift(fft(u(k,:)))';endend

代码很长,尽量看,能看懂多少看懂多少。这里不再讲解,因为这里都是对数学原理的复现,如果要弄懂原理,建议比照原文和代码相结合,逐行去看。如果只是利用这种分解方式,关心得出的结果,那么就没有必要大费周章了。

function [u, u_hat, omega] = VMD(signal, alpha, tau, K, DC, init, tol)

函数的输入输出,这里要解释一下。

函数的输入部分:signal代表输入信号,alpha表示数据保真度约束的平衡参数  ,tau表示时间步长,K表示分解层数,DC表示如果将第一模式置于DC(0频率),则为true。  init表示信号的初始化,tol表示收敛容错准则。通常除了K,也就是分解模态数之外,其他参数都有相应的经验值。绝大部分文献对VMD的探索也是对分解模态数的确定,顶多再加上tau的讨论。(博主后面的文章中也会进行相应的讨论。)

函数的输出部分:u表示分解模式的集合,u_hat表示模式的光谱范围,omega 表示估计模态的中心频率。

下面是调用VMD分解的主程序。主要步骤就是输入信号值,确定VMD的分解参数,画图。

ticclcclear allload('IMF1_7.mat')x=IMF1_7;t=1:length(IMF1_7);%--------- 对于VMD参数进行设置---------------alpha = 2000; % moderate bandwidth constraint:适度的带宽约束/惩罚因子tau = 0.0244; % noise-tolerance (no strict fidelity enforcement):噪声容限(没有严格的保真度执行)K = 7; % modes:分解的模态数DC = 0; % no DC part imposed:无直流部分init = 1; % initialize omegas uniformly :omegas的均匀初始化tol = 1e-6 ; %--------------- Run actual VMD code:数据进行vmd分解---------------------------[u, u_hat, omega] = VMD(x, alpha, tau, K, DC, init, tol);figure;imfn=u;n=size(imfn,1); %size(X,1),返回矩阵X的行数;size(X,2),返回矩阵X的列数;N=size(X,2),就是把矩阵X的列数赋值给Nfor n1=1:n subplot(n,1,n1); plot(t,u(n1,:));%输出IMF分量,a(:,n)则表示矩阵a的第n列元素,u(n1,:)表示矩阵u的n1行元素 ylabel(['IMF' ,int2str(n1)],'fontsize',11);%int2str(i)是将数值i四舍五入后转变成字符,y轴命名end xlabel('样本序列','fontsize',14,'fontname','宋体');%时间\itt/s toc;

下图记为分解的结果。

 以上就是对VMD分解的简单描述,下面的博文中将探讨如何对分解层数进行相应固定。

本文链接地址:https://www.jiuchutong.com/zhishi/288805.html 转载请保留说明!

上一篇:武侯祠内红墙和竹林掩映下的小巷,中国成都 (© Eastimages/Getty Images)(武侯祠红墙在哪个门)

下一篇:阿尔伯塔的日出,加拿大 (© Ambre Haller/Moment/Getty Images)(我想看阿尔伯塔)

  • 论坛发帖推广技巧(论坛发帖推广技巧和方法)

    论坛发帖推广技巧(论坛发帖推广技巧和方法)

  • 微信图片怎么合并成聊天记录(微信图片怎么合并一起发出)

    微信图片怎么合并成聊天记录(微信图片怎么合并一起发出)

  • 玩lol卡怎么办(玩lol很卡是什么原因)

    玩lol卡怎么办(玩lol很卡是什么原因)

  • 华为手机设置怎么没有更多设置(华为手机设置怎么没有通用功能)

    华为手机设置怎么没有更多设置(华为手机设置怎么没有通用功能)

  • 剪辑师暂停录制的快捷键是什么(剪辑师显示录制失败让关闭音频是怎么回事)

    剪辑师暂停录制的快捷键是什么(剪辑师显示录制失败让关闭音频是怎么回事)

  • iphone11的功能(苹果11功能大全介绍)

    iphone11的功能(苹果11功能大全介绍)

  • 拼多多好友代付能看见地址吗(拼多多好友代付时间限制)

    拼多多好友代付能看见地址吗(拼多多好友代付时间限制)

  • 删除页眉后为什么还有一横(删除页眉后为什么没有了)

    删除页眉后为什么还有一横(删除页眉后为什么没有了)

  • 隔空投送 无法发现对方(隔空投送无法共享 准备共享时出错)

    隔空投送 无法发现对方(隔空投送无法共享 准备共享时出错)

  • 智行火车票预约抢票可以取消吗(智行火车票预约抢票能抢到吗)

    智行火车票预约抢票可以取消吗(智行火车票预约抢票能抢到吗)

  • 华为nova65g怎么截屏(华为nova65g怎么连接电脑)

    华为nova65g怎么截屏(华为nova65g怎么连接电脑)

  • 电脑hdd是什么意思(电脑hdc是什么意思)

    电脑hdd是什么意思(电脑hdc是什么意思)

  • ipad air3支不支持快充(ipadair3支不支持系统13.1的设备)

    ipad air3支不支持快充(ipadair3支不支持系统13.1的设备)

  • wps怎么设置关键字(wps怎么进行关键词搜索)

    wps怎么设置关键字(wps怎么进行关键词搜索)

  • 电脑键盘home键在哪(电脑键盘home键是什么意思)

    电脑键盘home键在哪(电脑键盘home键是什么意思)

  • 华为屏幕上有个圈圈怎么关(华为屏幕上有个叉怎么消除)

    华为屏幕上有个圈圈怎么关(华为屏幕上有个叉怎么消除)

  • 荣耀9x录屏在哪(荣耀9x录屏在哪里)

    荣耀9x录屏在哪(荣耀9x录屏在哪里)

  • 抖音开小店的条件(抖音开小店的条件是什么)

    抖音开小店的条件(抖音开小店的条件是什么)

  • 如何设置网络打印机ip(如何设置网络打印机主机)

    如何设置网络打印机ip(如何设置网络打印机主机)

  • 华为手机怎么扫描文件(华为手机怎么扫描图片成电子版)

    华为手机怎么扫描文件(华为手机怎么扫描图片成电子版)

  • 拍萤火虫相机怎么设置(如何拍萤火虫参数)

    拍萤火虫相机怎么设置(如何拍萤火虫参数)

  • 小米8充电时怎么插耳机(小米八充电显示咋弄)

    小米8充电时怎么插耳机(小米八充电显示咋弄)

  • 怎么删除qq访问记录(怎么删除qq访问别人空间的记录)

    怎么删除qq访问记录(怎么删除qq访问别人空间的记录)

  • 京东自营店如何退款(京东自营店如何使用礼品卡)

    京东自营店如何退款(京东自营店如何使用礼品卡)

  • Markdown 使用语法(详细)(markdown语法是什么意思)

    Markdown 使用语法(详细)(markdown语法是什么意思)

  • 超详细的VSCode下载和安装教程以及解决VSCode下载速度特别慢的问题(vscode2010下载)

    超详细的VSCode下载和安装教程以及解决VSCode下载速度特别慢的问题(vscode2010下载)

  • 收取承包费如何交税
  • 小微企业减免的增值税账务处理
  • 代缴职工社保手续怎么办
  • 生育津贴到公司账上怎么发给员工
  • 利润表报错了怎么撤回修改
  • 小汽车的增值税怎么算
  • 收到赔偿款怎么做分录
  • 一般纳税人开差额票的税率
  • 法人变更注册资金降低以前的债务怎么处理
  • 分批收款收据怎么写
  • 建总账的注意事项
  • 进项与销项不符怎么办
  • 银行小额贷款是怎么还款的
  • 增值税普通发票和电子普通发票的区别
  • 化工类资质建筑企业有哪些
  • 天猫企业支付宝怎么提现
  • 加计扣除的研发费用范围
  • 季度所得税报表怎么填
  • 卖废品收入没开票怎么办
  • 成本少结转了怎么调账
  • mac dns 设置
  • 如何解决win10关机后usb还在供电
  • 客户用商品抵应收账怎么做
  • 调整上月费用科目
  • 异地预缴税款后当地还交吗
  • 赠送客户的商品怎么入账
  • 小规模纳税人的企业所得税税率
  • vscode怎么开始编程
  • modelist模型
  • 销售发票重复开,库存商品怎么处理?
  • sonar-scanner需要配置环境变量
  • 前端请求方式
  • php文件包含的4种方式
  • 深入全面剖析自己
  • PHP+Apache+Mysql环境搭建教程
  • js 字符串 中 字符位置
  • 上市公司财报中的销售费用多少合适
  • 承兑汇票兑现与贴现的区别
  • 公司基本户可以注销吗
  • java操作mongodb数据库
  • centos7自带yum吗
  • 劳务是什么单位
  • 小企业会计准则适用于哪些企业
  • 房产税征收对象和依据2021
  • 递延所得税资产和负债账务处理
  • 无形资产摊销完以后得账务处理
  • 材料暂估入库时需要考虑增值税进项税吗
  • 利息收入应该怎么记账
  • 代发的工资如何做账
  • 共同类科目性质
  • 其他应付款贷方什么意思
  • 借支单是会计算做还是出纳做
  • 工会经费计算公式的例子
  • 酒店支付模式
  • 企业利润总额计算例题及答案
  • 专项应付款余额转入资本公积的规定
  • 未开票收入怎么报税
  • mysql中一个普通ERROR 1135 (HY000)错误引发的血案
  • mysql数据库开发技术
  • macos 修改mac
  • 电脑主板bios设置图解
  • linux中的ls命令的功能是变换工作目录到目标指定目录
  • diskgenius_winpe文件夹能删吗
  • win8cp
  • windows10mode
  • win8系统设置锁屏密码
  • xp系统如何优化
  • linux切换到指定目录
  • ssh 使用代理
  • Win7系统文件损坏怎么修复
  • opengl函数
  • perl语言
  • 人走鸟不惊,出自于谁的诗句?
  • node.js使用方法
  • python开发软件教程
  • 用jquery写注册界面
  • 企业税务代码是什么号
  • 济宁税务大厅上班时间
  • 保税工厂和非保税工厂的区别
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设