IDGT Inverse discrete Gabor transform
Usage: f=idgt(c,g,a);
f=idgt(c,g,a,Ls);
f=idgt(c,g,a,Ls,lt);
Input parameters:
c : Array of coefficients.
g : Window function.
a : Length of time shift.
Ls : Length of signal.
lt : Lattice type (for non-separable lattices)
Output parameters:
f : Signal.
IDGT(c,g,a) computes the Gabor expansion of the input coefficients
c with respect to the window g and time shift a. The number of
channels is deduced from the size of the coefficients c.
IDGT(c,g,a,Ls) does as above but cuts or extends f to length Ls.
[f,g]=IDGT(...) 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.
For perfect reconstruction, the window used must be a dual window of the
one used to generate the coefficients.
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.
If g is a row vector, then the output will also be a row vector. If c is
3-dimensional, then IDGT will return a matrix consisting of one column
vector for each of the TF-planes in c.
Assume that f=IDGT(c,g,a,L) for an array c of size M xN.
Then the following holds for k=0,...,L-1:
N-1 M-1
f(l+1) = sum sum c(m+1,n+1)*exp(2*pi*i*m*l/M)*g(l-a*n+1)
n=0 m=0
Non-separable lattices:
-----------------------
IDGT(c,g,a,'lt',lt) computes the Gabor expansion of the input
coefficients c with respect to the window g, time shift a and
lattice type lt. Please see the help of MATRIX2LATTICETYPE for a
precise description of the parameter lt.
Assume that f=dgt(c,g,a,L,lt) for an array c of size MxN.
Then the following holds for k=0,...,L-1:
N-1 M-1
f(l+1) = sum sum c(m+1,n+1)*exp(2*pi*i*m*l/M)*g(l-a*n+1)
n=0 m=0
Additional parameters:
----------------------
IDGT takes the following flags at the end of the line of input
arguments:
'freqinv' Compute an IDGT using a frequency-invariant phase. This
is the default convention described above.
'timeinv' Compute an IDGT using a time-invariant phase. This
convention is typically used in FIR-filter algorithms.
Examples:
---------
The following example demostrates the basic pricinples for getting
perfect reconstruction (short version):
f=greasy; % test signal
a=32; % time shift
M=64; % frequency shift
gs={'blackman',128}; % synthesis window
ga={'dual',gs}; % analysis window
[c,Ls]=dgt(f,ga,a,M); % analysis
% ... do interesting stuff to c at this point ...
r=idgt(c,gs,a,Ls); % synthesis
norm(f-r) % test
The following example does the same as the previous one, with an
explicit construction of the analysis and synthesis windows:
f=greasy; % test signal
a=32; % time shift
M=64; % frequency shift
Ls=length(f); % signal length
% Length of transform to do
L=dgtlength(Ls,a,M);
% Analysis and synthesis window
gs=firwin('blackman',128);
ga=gabdual(gs,a,M,L);
c=dgt(f,ga,a,M); % analysis
% ... do interesting stuff to c at this point ...
r=idgt(c,gs,a,Ls); % synthesis
norm(f-r) % test
Url: http://ltfat.github.io/doc/gabor/idgt.html
See also: dgt, gabwin, dwilt, gabtight.
Package: ltfat