This is machine translation

Translated by Microsoft
Mouseover text to see original. Click the button below to return to the English version of the page.

Note: This page has been translated by MathWorks. Please click here
To view all translated materials including this page, select Japan from the country navigator on the bottom of this page.


Time-frequency ridges from wavelet synchrosqueezing


fridge = wsstridge(sst)
[fridge,iridge] = wsstridge(sst)
[___] = wsstridge(sst,penalty)
[___] = wsstridge(___,f)
[___]= wsstridge(___,Name,Value)


fridge = wsstridge(sst) extracts the maximum energy time-frequency ridge in cycles per sample from the wavelet synchrosqueezed transform, sst. The sst input is the output of wsst. Each ridge is a separate signal mode.


[fridge,iridge] = wsstridge(sst) returns in iridge the row indices of sst. The row indices are the maximum time-frequency ridge at each sample. Use iridge to reconstruct the signal mode along a time-frequency ridge using iwsst.

[___] = wsstridge(sst,penalty) multiplies the squared distance between frequency bins by the penalty value. You can include any of the ouitput arguments from previous syntaxes.

[___] = wsstridge(___,f) returns the maximum energy time-frequency ridge in cycles per unit time based on the f input frequency vector. f is the frequency output of wsst. The f input and fridge output have the same units.


[___]= wsstridge(___,Name,Value) returns the time-frequency ridge with additional options specified by one or more Name,Value pair arguments.


collapse all

Obtain the wavelet synchrosqueezed transform of a quadratic chirp and extract the maximum time-frequency ridge, in fridge, and the associated row indices, in iridge.

Load the chirp signal and obtain its synchrosqueezed transform.

load quadchirp;
[sst,f] = wsst(quadchirp);

Extract the maximum time-frequency ridge.

[fridge,iridge] = wsstridge(sst);

Plot the synchrosqueezed transform.

shading interp
title('Synchrosqueezed Transform')

Overlay the plot of the maximum energy frequency ridge.

hold on
title('Synchrosqueezed Transform with Overlaid Ridge')

Extract the two highest energy modes from a multicomponent signal.

Obtain and plot the wavelet synchrosqueezed transform.

load multicompsig;
sig = sig1+sig2;
[sst,F] = wsst(sig,sampfreq);
xlabel('Time'); ylabel('Hz');
grid on;
title('Synchrosqueezed Transform of Two-Component Signal');

Using a penalty of 10, extract the two highest energy modes and plot the result.

[fridge,iridge] = wsstridge(sst,10,F,'NumRidges',2);
hold on;

Input Arguments

collapse all

Synchrosqueezed transform, specified as a matrix.

Frequency bins scaling penalty, specified as a nonnegative scalar. This input penalizes changes in frequency by multiplying the penalty value by the squared distance between frequency bins. Use a penalty term when you extract multiple ridges, or when you have a single modulated component in additive noise. The penalty term prevents jumps in frequency that occur when the region of highest energy in the time-frequency plane changes abruptly.

Synchrosqueezed transform frequencies corresponding to the rows of the synchrosqueezed transform, which is the vector output of wsst. The number of elements in the frequency vector is equal to the number of rows in the sst input.

Name-Value Pair Arguments

Specify optional comma-separated pairs of Name,Value arguments. Name is the argument name and Value is the corresponding value. Name must appear inside single quotes (' '). You can specify several name and value pair arguments in any order as Name1,Value1,...,NameN,ValueN.

Example: 'NumRidges',3

collapse all

Number of highest energy time-frequency ridges to extract, specified as the comma-separated pair consisting of 'NumRidges' and a positive integer. If this integer is greater than 1, wsstridge iteratively determines the maximum energy time-frequency ridge by removing the previously computed ridges and the default or specified 'NumFrequencyBins' on either side of each ridge bin.

Number of frequency bins to remove from synchrosqueezed transform sst when extracting multiple ridges, specified as the comma-separated pair consisting of 'NumFrequencyBins' and a positive integer. This integer must be less than or equal to round(size(sst,1)/4). You can specify the nunber of frequency bins to remove only if you extract more than one ridge. After extracting the highest energy time-frequency ridge, wsstridge removes the sst values corresponding to the iridge indices at each time step. The energy is removed along the time-frequency ridge extended on both sides of the iridge index by the specified number of frequency bins. If the index of the extended time-frequency ridge exceeds the number of frequency bins at any time step, wsstridge truncates the removal region at the first or last frequency bin. To specify 'NumFrequencyBins', you must specify 'NumRidges'.

Output Arguments

collapse all

Time-frequency ridge frequencies, returned as a vector or matrix. The frequencies correspond to the time-frequency ridge at each time step. fridge is an N-by-nr matrix where N is the number of time samples (columns) in sst and nr is the number of ridges. The first column of the matrix contains the frequencies for the maximum energy time-frequency ridge in sst. Subsequent columns contain the frequencies for the time-frequency ridges in decreasing energy order. By default, fridge contains frequencies in cycles per sample.

Time-frequency ridge row indices of sst, returned as a vector or matrix. The row indices in iridge correspond to the row index of the maximum time-frequency ridge for each sst column. iridge is an N-by-nr matrix where N is the number of time samples (columns) in sst, and nr is the number of ridges. The first column of the matrix contains the indices for the maximum energy time-frequency ridge in sst. Subsequent columns contain the indices for the time-frequency ridges in decreasing energy order.


wsstridge uses a penalized forward-backward greedy algorithm to extract the maximum energy time-frequency ridges from the wavelet synchrosqueezed transform matrix. The algorithm finds the maximum time-frequency ridge by minimizing -ln(E) at each time point, where E is the absolute value of the synchrosqueezed transform. The is equivalent to maximizing the value of E. The algorithm optionally constrains jumps in frequency with a penalty that is proportional to the square of the distance between frequency bins.

The following example illustrates the time-frequency ridge algorithm using a penalty that is 2 times the squared distance between frequency bins. This simple synchrosqueezed transform matrix has three frequency bins and three time steps. The second row represents a sine wave.

  1. Obtain the complex matrix output, y, of the wavelet synchroqueezed transform using wsst. Compute the (-ln(|y|)). Suppose you have this (-ln(|y|)) matrix output,

    1   4   4
    2   2   2
    5   5   4

  2. Update the value for the (1,2) element.

    1. Leave the values the at the first time point unaltered. Begin the algorithm with the (1,2) element of the matrix, which presents the first frequency bin at the 2nd time point. Penalize the values in the first column based on their distance from the (1,2) element. Applying the penalty to the first column produces

      original value + penalty(distance squared)
      1 + 2(0*0) =  1
      2 + 2(1*1) =  4
      5 + 2(2*2)=  13
       1   4
       4   2
      13   5

      The minimum value of the first column is 1, which is in bin 1.

    2. Add the minimum value in column 1 to the current bin value, 4. The updated value for (1,2) becomes 5, which came from bin 1.

  3. Update the values for the remaining elements in column 2.

    Recompute the original column 1 values with the penalty factor using the same process as in Step 2a. Obtain the remaining second column values using the same process as in Step 2b. Repeat Step 2 for the third column. The final matrix is

    1   5(1)   9(1)
    2   4(2)   6(2)
    5   7(2)   8(2)

    The subscripts indicate the index of the bin in the previous column from which a value came.

  4. Starting at the last column of the matrix, find the minimum value. Walk back in time through the matrix by going from the current bin to the origin of that bin at the previous time point. Keep track of the bin indices, which form the path composing the ridge. The algorithm smooths the transition by using the origin bin instead of the bin with the minimum value. For this example, the ridge indices are 2, 2, 2, which matches the energy path of the sine wave in row 2 of the matrix shown in Step 1.

  5. If you are extracting multiple ridges, the algorithm removes the first ridge from the synchrosqueezed transform and repeats the process.


[1] I. Daubechies, I., J. Lu, and H. T. Wu. "Synchrosqueezed Wavelet Transforms: an Empricial Mode Decomposition-like Tool", Applied and Computational Harmonic Analysis. Vol. 30(2), pp. 243–261.

[2] Thakur, G., E. Brevdo, N. S. Fučkar, and H. T. Wu. "The Synchrosqueezing algorithm for time-varying spectral analysis: robustness properties and new paleoclimate applications." Signal Processing. Vol. 93, pp. 1079–1094.

Introduced in R2016a

Was this topic helpful?