Function: dwilt
DWILT  Discrete Wilson transform
  Usage:  c=dwilt(f,g,M);
          c=dwilt(f,g,M,L);
          [c,Ls]=dwilt(...);

  Input parameters:
        f     : Input data
        g     : Window function.
        M     : Number of bands.
        L     : Length of transform to do.
  Output parameters:
        c     : 2M xN array of coefficients.
        Ls    : Length of input signal.

  DWILT(f,g,M) computes a discrete Wilson transform with M bands and
  window g.

  The length of the transform will be the smallest possible that is
  larger than the signal. f will be zero-extended to the length of the 
  transform. If f is a matrix, the transformation is applied to each column.

  The window g may be a vector of numerical values, a text string or a
  cell array. See the help of WILWIN for more details.

  DWILT(f,g,M,L) computes the Wilson transform as above, but does a
  transform of length L. f will be cut or zero-extended to length L*
  before the transform is done.

  [c,Ls]=DWILT(f,g,M) or [c,Ls]=DWILT(f,g,M,L) additionally return the
  length of the input signal f. This is handy for reconstruction:

    [c,Ls]=dwilt(f,g,M);
    fr=idwilt(c,gd,M,Ls);

  will reconstruct the signal f no matter what the length of f is, provided
  that gd is a dual Wilson window of g.

  [c,Ls,g]=DWILT(...) additionally outputs the window used in the
  transform. This is useful if the window was generated from a description
  in a string or cell array.

  A Wilson transform is also known as a maximally decimated, even-stacked
  cosine modulated filter bank.

  Use the function WIL2RECT to visualize the coefficients or to work
  with the coefficients in the TF-plane.

  Assume that the following code has been executed for a column vector f*:

    c=dwilt(f,g,M);  % Compute a Wilson transform of f.
    N=size(c,2)*2;   % Number of translation coefficients.

  The following holds for m=0,...,M-1 and n=0,...,N/2-1:

  If m=0:

                   L-1 
    c(m+1,n+1)   = sum f(l+1)*g(l-2*n*M+1)
                   l=0  


  If m is odd and less than M

                   L-1 
    c(m+1,n+1)   = sum f(l+1)*sqrt(2)*sin(pi*m/M*l)*g(k-2*n*M+1)
                   l=0  

                   L-1 
    c(m+M+1,n+1) = sum f(l+1)*sqrt(2)*cos(pi*m/M*l)*g(k-(2*n+1)*M+1)
                   l=0  

  If m is even and less than M

                   L-1 
    c(m+1,n+1)   = sum f(l+1)*sqrt(2)*cos(pi*m/M*l)*g(l-2*n*M+1)
                   l=0  

                   L-1 
    c(m+M+1,n+1) = sum f(l+1)*sqrt(2)*sin(pi*m/M*l)*g(l-(2*n+1)*M+1)
                   l=0  

  if m=M and M is even:

                   L-1 
    c(m+1,n+1)   = sum f(l+1)*(-1)^(l)*g(l-2*n*M+1)
                   l=0

  else if m=M and M is odd

                   L-1 
    c(m+1,n+1)   = sum f(l+1)*(-1)^l*g(l-(2*n+1)*M+1)
                   l=0


  References:
    H. Boelcskei, H. G. Feichtinger, K. Groechenig, and F. Hlawatsch.
    Discrete-time Wilson expansions. In Proc. IEEE-SP 1996 Int. Sympos.
    Time-Frequency Time-Scale Analysis, june 1996.
    
    I. Daubechies, S. Jaffard, and J. Journe. A simple Wilson orthonormal
    basis with exponential decay. SIAM J. Math. Anal., 22:554--573, 1991.
    
    Y.-P. Lin and P. Vaidyanathan. Linear phase cosine modulated maximally
    decimated filter banks with perfectreconstruction. IEEE Trans. Signal
    Process., 43(11):2525--2539, 1995.
    

Url: http://ltfat.github.io/doc/gabor/dwilt.html

See also: idwilt, wilwin, wil2rect, dgt, wmdct, wilorth.

Package: ltfat