# Visualize and Recreate VMD Decomposition

This example shows how to visualize the intrinsic mode functions and residual of a variational mode decomposition (VMD) 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.

`$x\left(t\right)=6{t}^{2}+\mathrm{cos}\left(4\pi t+10\pi {t}^{2}\right)+\left\{\begin{array}{ll}\mathrm{cos}\left(60\pi t\right),& t\le 0.5,\\ \mathrm{cos}\left(100\pi t-10\pi \right),& t>0.5.\end{array}$`

```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")``` ### Visualize VMD

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 IMFs

• 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 `vmd`. 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. ### Export Script

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.