c=dgt(f,g,a,M); c=dgt(f,g,a,M,L); c=dgt(f,g,a,M,'lt',lt); [c,Ls]=dgt(...);
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). |
c | \(M \times N\) 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:
where \(m=0,\ldots,M-1\) and \(n=0,\ldots,N-1\) and \(l-an\) is computed modulo L.
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:
where \(m=0,\ldots,M-1\) and \(n=0,\ldots,N-1\) and \(l-an\) are computed modulo L. The additional offset \(w\) is given by \(w(n)=\mod(n\cdot lt_1,lt_2)/lt_2\) in the formula above.
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. |
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);
K. Gröchenig. Foundations of Time-Frequency Analysis. Birkhäuser, 2001.
H. G. Feichtinger and T. Strohmer, editors. Gabor Analysis and Algorithms. Birkhäuser, Boston, 1998.