DGT Discrete Gabor transform
Usage: c=dgt(f,g,a,M);
c=dgt(f,g,a,M,L);
c=dgt(f,g,a,M,'lt',lt);
[c,Ls]=dgt(...);
Input parameters:
f : Input data.
g : Window function.
a : Length of time shift.
M : Number of channels.
L : Length of transform to do.
lt : Lattice type (for non-separable lattices).
Output parameters:
c : M xN array of coefficients.
Ls : Length of input signal.
DGT(f,g,a,M) computes the Gabor coefficients (also known as a windowed
Fourier transform) of the input signal f with respect to the window
g and parameters a and M. The output is a vector/matrix in a
rectangular layout.
The length of the transform will be the smallest multiple of a and M*
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 length of the transform done can be obtained by
L=size(c,2)*a;
The window g may be a vector of numerical values, a text string or a
cell array. See the help of GABWIN for more details.
DGT(f,g,a,M,L) computes the Gabor coefficients 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]=DGT(f,g,a,M) or [c,Ls]=DGT(f,g,a,M,L) additionally returns the
length of the input signal f. This is handy for reconstruction:
[c,Ls]=dgt(f,g,a,M);
fr=idgt(c,gd,a,Ls);
will reconstruct the signal f no matter what the length of f is, provided
that gd is a dual window of g.
[c,Ls,g]=DGT(...) 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.
The Discrete Gabor Transform is defined as follows: Consider a window g*
and a one-dimensional signal f of length L and define N=L/a.
The output from c=DGT(f,g,a,M) is then given by:
L-1
c(m+1,n+1) = sum f(l+1)*conj(g(l-a*n+1))*exp(-2*pi*i*m*l/M),
l=0
where m=0,...,M-1 and n=0,...,N-1 and l-an is computed
modulo L.
Non-separable lattices:
-----------------------
DGT(f,g,a,M,'lt',lt) computes the DGT for a non-separable lattice
given by the time-shift a, number of channels M and lattice type
lt. Please see the help of MATRIX2LATTICETYPE for a precise
description of the parameter lt.
The non-separable discrete Gabor transform is defined as follows:
Consider a window g and a one-dimensional signal f of length L and
define N=L/a. The output from c=DGT(f,g,a,M,L,lt) is then given
by:
L-1
c(m+1,n+1) = sum f(l+1)*conj(g(l-a*n+1))*exp(-2*pi*i*(m+w(n))*l/M),
l=0
where m=0,...,M-1 and n=0,...,N-1 and l-an are computed
modulo L. The additional offset w is given by w(n)=mod(n*lt_1,lt_2)/lt_2
in the formula above.
Additional parameters:
----------------------
DGT takes the following flags at the end of the line of input
arguments:
'freqinv' Compute a DGT using a frequency-invariant phase. This
is the default convention described above.
'timeinv' Compute a DGT using a time-invariant phase. This
convention is typically used in FIR-filter algorithms.
Examples:
---------
In the following example we create a Hermite function, which is a
complex-valued function with a circular spectrogram, and visualize
the coefficients using both imagesc and PLOTDGT:
a=10;
M=40;
L=a*M;
h=pherm(L,4); % 4th order hermite function.
c=dgt(h,'gauss',a,M);
% Simple plot: The squared modulus of the coefficients on
% a linear scale
figure(1);
imagesc(abs(c).^2);
% Better plot: zero-frequency is displayed in the middle,
% and the coefficients are show on a logarithmic scale.
figure(2);
plotdgt(c,a,'dynrange',50);
References:
K. Groechenig. Foundations of Time-Frequency Analysis. Birkhauser, 2001.
H. G. Feichtinger and T. Strohmer, editors. Gabor Analysis and
Algorithms. Birkhauser, Boston, 1998.
Url: http://ltfat.github.io/doc/gabor/dgt.html
See also: idgt, gabwin, dwilt, gabdual, phaselock, demo_dgt.
Package: ltfat