This is where navigation should be.

NSDGT - Non-stationary Discrete Gabor transform

Usage

c=nsdgt(f,g,a,M);
[c,Ls]=nsdgt(f,g,a,M);

Input parameters

f Input signal.
g Cell array of window functions.
a Vector of time shifts.
M Vector of numbers of frequency channels.

Output parameters

c Cell array of coefficients.
Ls Length of input signal.

Description

nsdgt(f,g,a,M) computes the non-stationary Gabor coefficients of the input signal f. The signal f can be a multichannel signal, given in the form of a 2D matrix of size \(Ls \times W\), with Ls the signal length and W the number of signal channels.

The non-stationary Gabor theory extends standard Gabor theory by enabling the evolution of the window over time. It is therefor necessary to specify a set of windows instead of a single window. This is done by using a cell array for g. In this cell array, the n'th element g{n} is a row vector specifying the n'th window.

The resulting coefficients also require a storage in a cell array, as the number of frequency channels is not constant over time. More precisely, the n'th cell of c, c{n}, is a 2D matrix of size \(M(n) \times W\) and containing the complex local spectra of the signal channels windowed by the n'th window g{n} shifted in time at position \(a(n)\). c{n}(m,w) is thus the value of the coefficient for time index n, frequency index m and signal channel w.

The variable a contains the distance in samples between two consequtive blocks of coefficients. The variable M contains the number of channels for each block of coefficients. Both a and M are vectors of integers.

The variables g, a and M must have the same length, and the result c will also have the same length.

The time positions of the coefficients blocks can be obtained by the following code. A value of 0 correspond to the first sample of the signal:

timepos = cumsum(a)-a(1);

[c,Ls]=nsdgt(f,g,a,M) additionally returns the length Ls of the input signal f. This is handy for reconstruction:

[c,Ls]=nsdgt(f,g,a,M);
fr=insdgt(c,gd,a,Ls);

will reconstruct the signal f no matter what the length of f is, provided that gd are dual windows of g.

Notes:

nsdgt uses circular border conditions, that is to say that the signal is considered as periodic for windows overlapping the beginning or the end of the signal.

The phaselocking convention used in nsdgt is different from the convention used in the dgt function. nsdgt results are phaselocked (a phase reference moving with the window is used), whereas dgt results are not phaselocked (a fixed phase reference corresponding to time 0 of the signal is used). See the help on phaselock for more details on phaselocking conventions.

References:

P. Balazs, M. Dörfler, F. Jaillet, N. Holighaus, and G. A. Velasco. Theory, implementation and applications of nonstationary Gabor frames. J. Comput. Appl. Math., 236(6):1481--1496, 2011. [ .pdf ]