Function: filterbanksynchrosqueeze
FILTERBANKSYNCHROSQUEEZE  Synchrosqueeze filterbank spectrogram
  Usage:  cr = filterbanksynchrosqueeze(c,tgrad,cfreq);
          cr = filterbanksynchrosqueeze(c,tgrad,g);
          [cr,repos,Lc] = filterbanksynchrosqueeze(...);

  Input parameters:
     c     : Coefficients to be synchrosqueezed.
     tgrad : Instantaneous frequency relative to original position.
     cfreq : Vector of relative center frequencies in ]-1,1].
     g     : Set of filters.
  Output parameters:
     cr    : Synchrosqueezed filterbank coefficients.
     repos : Reassigned positions.
     Lc    : Subband lengths.

  FILTERBANKSYNCHROSQUEEZE(c,tgrad,cfreq) will reassign the values of 
  the filterbank coefficients c according to instantaneous frequency
  tgrad. The frequency center frequencies of filters are given by cfreq.
  The filterbank coefficients c are assumed to be obtained from a
  non-subsampled filterbank (a=1).

  FILTERBANKSYNCHROSQUEEZE(s,tgrad,g) will do the same thing except
  the center frequencies are estimated from a set of filters g.

  [sr,repos,Lc]=FILTERBANKSYNCHROSQUEEZE(...) does the same thing, but 
  in addition returns a vector of subband lengths Lc (Lc = cellfun(@numel,s))
  and cell array repos with sum(Lc) elements. Each element corresponds 
  to a single coefficient obtained by cell2mat(sr) and it is a vector 
  of indices identifying coefficients from cell2mat(s) assigned to 
  the particular time-frequency position.

  The arguments s, tgrad must be cell-arrays of vectors
  of the same lengths. Arguments cfreq or g must have the
  same number of elements as the cell arrays with coefficients.

  Examples:
  ---------

  This example shows how to synchrosqueeze a ERB filterbank spectrogram:

    % Genrate 3 chirps half a second long
    L = 22050; fs = 44100; l = 0:L-1;

    f = sin(2*pi*(l/35+(l/300).^2)) + ...
        sin(2*pi*(l/10+(l/300).^2)) + ...
        sin(2*pi*(l/5-(l/450).^2));
    f = 0.7*f';
    
    % Create ERB filterbank
    [g,~,fc]=erbfilters(fs,L,'uniform','spacing',1/12,'warped');
    
    % Compute phase gradient
    [tgrad,~,~,c]=filterbankphasegrad(f,g,1);
    % Do the reassignment
    sr=filterbanksynchrosqueeze(c,tgrad,cent_freqs(fs,fc));
    figure(1); subplot(211);
    plotfilterbank(c,1,fc,fs,60);
    title('ERBlet spectrogram of 3 chirps');
    subplot(212);  
    plotfilterbank(sr,1,fc,fs,60);
    title('Synchrosqueezed ERBlet spectrogram of 3 chirps');


  References:
    N. Holighaus, Z. Průša, and P. L. Soendergaard. Reassignment and
    synchrosqueezing for general time-frequency filter banks, subsampling
    and processing. Signal Processing, 125:1--8, 2016. [1]http ]
    
    References
    
    1. http://www.sciencedirect.com/science/article/pii/S0165168416000141
    

Url: http://ltfat.github.io/doc/filterbank/filterbanksynchrosqueeze.html

See also: filterbankphasegrad, gabreassign.

Package: ltfat