上篇博文已经讲述了VMD的分解机制,关于其中的参数,特别是分解层数如何确定的问题,这篇文章给出一个解决方法:最优变分模态分解(OVMD),利用中心频率法确定分解层数K,利用残差指数指标确定更新步长tau。
关于利用中心频率法确定分解层数的文章,无论国内还是国外都有较多的讲述。这里直接上代码。
tic
clc
clear all
load('IMF1_1.mat')
x=IMF1_1;
t=1:length(IMF1_1);
%--------- some sample parameters forVMD:对于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-7 ;
%--------------- 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的行数;s