Visualize and Recreate VMD Decomposition
This example shows how to visualize a VMD decomposition using Signal Multiresolution Analyzer. You learn how to compare two different decompositions in the app, and how to recreate a decomposition in your workspace.
Generate a piecewise composite signal consisting of a quadratic trend, a chirp, and a cosine with a sharp transition between two constant frequencies at t = 0.5. Sample the signal for 1 second at 1000 Hz. Plot the signal.
fs = 1e3; t = 0:1/fs:1-1/fs; sig = 6*t.^2 + cos(4*pi*t+10*pi*t.^2) + ... [cos(60*pi*(t(t<=0.5))) cos(100*pi*(t(t>0.5)-10*pi))]; plot(t,sig) title("Signal") xlabel("Time (s)") ylabel("Amplitude")
Open Signal Multiresolution Analyzer and click Import. Select
sig and click Import. By default, a four-level MODWTMRA decomposition appears in the MODWT tab. In the Signal Multiresolution Analyzer tab, set the sample rate to 1000 Hz.
To generate a variational mode decomposition of the signal, go to the Signal Multiresolution Analyzer tab. Click Add ▼ and select VMD.
After a few moments, the VMD decomposition
sig2 appears in the VMD tab. The app obtains the decomposition using the
vmd function with default settings. The Level Selection pane shows the relative energies of the signal across the intrinsic mode functions (IMF), as well as the measured frequency ranges. With the toolstrip, you can change the VMD parameters to generate a different decomposition. You can specify:
Number of IMFs extracted
Mode convergence relative and absolute tolerances
Maximum number of optimization iterations
Initial Lagrange multiplier and update rate for the Lagrange multiplier in each iteration
Method to initialize the central frequencies
Penalty factor that determines the reconstruction fidelity
Changing a value enables the Decompose button. To learn more about the parameters, see
Set the number of extracted IMFs to
4 and click Decompose to visualize the decomposition. The app recovers four distinct components of the signal. Include the first and fourth IMFs in the reconstruction.
To recreate the decomposition in your workspace, in the Signal Multiresolution Analyzer tab click Export > Generate MATLAB Script. An untitled script opens in your editor with the following executable code. The true-false values in
levelForReconstruction correspond to the
Include boxes you selected in the Level Selection pane. You can save the script as is or modify it to apply the same decomposition settings to other signals. Run the code.
% Logical array for selecting reconstruction elements levelForReconstruction = [true,false,false,true,true]; % Perform the decomposition using VMD [imf,residual,info] = vmd(sig, ... AbsoluteTolerance=5e-06, ... RelativeTolerance=0.005, ... MaxIterations=500, ... NumIMF=4, ... InitialIMFs=zeros(1000,4), ... PenaltyFactor=1000, ... InitialLM=complex(zeros(1001,1)), ... LMUpdateRate=0.01, ... InitializeMethod='peaks'); % Construct MRA matrix by appending IMFs and residual mra = [imf residual].'; % Sum down the rows of the selected multiresolution signals sig2 = sum(mra(levelForReconstruction,:),1);
The rows in the MRA matrix
mra correspond to the IMFs and residual in the Level Selection pane. Plot the reconstruction, which consists of the residual and two IMFs, and compare with the original signal.
plot(t,sig2) hold on plot(t,sig) hold off legend("Reconstruction","Original") xlabel("Time (s)") ylabel("Amplitude")
 Dragomiretskiy, Konstantin, and Dominique Zosso. “Variational Mode Decomposition.” IEEE Transactions on Signal Processing 62, no. 3 (February 2014): 531–44. https://doi.org/10.1109/TSP.2013.2288675.