This is where navigation should be.

WMDCT - Windowed MDCT transform

Usage

c=wmdct(f,g,M);
c=wmdct(f,g,M,L);
[c,Ls]=wmdct(...);

Input parameters

f Input data
g Window function.
M Number of bands.
L Length of transform to do.

Output parameters

c \(M \times N\) array of coefficients.
Ls Length of input signal.

Description

wmdct(f,g,M) computes a Windowed Modified Discrete Cosine 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. g must be whole-point even.

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.

wmdct(f,g,M,L) computes the MDCT 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]=wmdct(f,g,M) or [c,Ls]=wmdct(f,g,M,L)` additionally returns the length of the input signal f. This is handy for reconstruction:

[c,Ls]=wmdct(f,g,M);
fr=iwmdct(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]=wmdct(...) 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 WMDCT is sometimes known as an odd-stacked cosine modulated filter bank. The WMDCT defined by this routine is slightly different from the most common definition of the WMDCT, in order to be able to use the same window functions as the Wilson transform.

Assume that the following code has been executed for a column vector f of length L:

c=wmdct(f,g,M);  % Compute the WMDCT of f.
N=size(c,2);     % Number of translation coefficients.

The following holds for \(m=0,\ldots,M-1\) and \(n=0,\ldots,N-1\):

If \(m+n\) is even:

\begin{equation*} c\left(m+1,n+1\right) = \sqrt{2}\sum_{l=0}^{L-1}f(l+1)\cos\left(\frac{\pi}{M}\left(m+\frac{1}{2}\right)l+\frac{\pi}{4}\right)g(l-nM+1) \end{equation*}

If \(m+n\) is odd:

\begin{equation*} c\left(m+1,n+1\right) = \sqrt{2}\sum_{l=0}^{L-1}f(l+1)\sin\left(\frac{\pi}{M}\left(m+\frac{1}{2}\right)l+\frac{\pi}{4}\right)g(l-nM+1) \end{equation*}

Examples:

The following example shows the WMDCT coefficients (128 channels) of the greasy test signal:

fs=16000; % Sampling rate
c=wmdct(greasy,{'hann',0.02*fs},128);
plotwmdct(c,fs,90);

Compare the visual difference with the redundant expansion of the same signal given in the example of the dgtreal function.

References:

H. Bölcskei and F. Hlawatsch. Oversampled Wilson-type cosine modulated filter banks with linear phase. In Asilomar Conf. on Signals, Systems, and Computers, pages 998--1002, nov 1996. [ http ]

H. S. Malvar. Signal Processing with Lapped Transforms. Artech House Publishers, 1992.

J. P. Princen and A. B. Bradley. Analysis/synthesis filter bank design based on time domain aliasing cancellation. IEEE Transactions on Acoustics, Speech, and Signal Processing, ASSP-34(5):1153--1161, 1986.

J. P. Princen, A. W. Johnson, and A. B. Bradley. Subband/transform coding using filter bank designs based on time domain aliasing cancellation. Proceedings - ICASSP, IEEE International Conference on Acoustics, Speech and Signal Processing, pages 2161--2164, 1987.