IPB

Welcome Guest ( Log In | Register )

 
Reply to this topicStart new topic
overlap add in window swiching
leen
post Mar 10 2004, 12:00
Post #1





Group: Members
Posts: 1
Joined: 10-March 04
Member No.: 12628



Hello ~~

I know how overlap and add afer IMDCT helps is zeroing the aliasing in equal size winodw .
But I am not able to find it mathematically when it is winodw switching . Can anyone explain me that


regards

leen
Go to the top of the page
+Quote Post
SebastianG
post Apr 2 2004, 13:01
Post #2





Group: Developer
Posts: 1317
Joined: 20-March 04
From: Göttingen (DE)
Member No.: 12875



I prefer to view the (i)MDCT as 2 seperate orthogonal transforms. It eases the implementation and reduces the probability of using a false window sequence.

MDCT (forward)
a) butterflies (rotations) between blocks (dependant on the window function)
b) MDCT-core transform on blocks (involutional orthonormal matrix)

iMDCT (inverse)
a) MDCT-core transform (because this transform is its own inverse)
b) inverse butterflies to "cancel the blocking"

the n*n "MDCT-core" matrix A is given by
A_{i,j} = \sqrt{\frac{2}{n}} \cos \frac{(i+0.5)*(j+0.5)*PI}{n}
(for i,j = 0...n-1, n being the number of subbands)

If you look at this matrix and at the "official" MDCT definition, you'll able to figure out, what I meant by the butterflies-rotations. (I don't know how to explain it well right now)

With this perspective it's IMHO easy to realize how the whole thing is a perfect reconstruction filterbank - even with different windows and transform block lengths.

Unfortunately Vorbis's MDCT is a flipped version of this. You have to reverse the time signal *or* have to code a forward-core and inverse-core (not involutional core anymore)

BTW: It's possible to reduce the MDCT-core transform to a n/2-point complex FFT with some pre/post rotations.

HTH,
Sebastian

This post has been edited by SebastianG: Apr 2 2004, 13:15
Go to the top of the page
+Quote Post
wkwai
post Apr 2 2004, 14:34
Post #3


MPEG4 AAC developer


Group: Developer
Posts: 398
Joined: 1-June 03
Member No.: 6943



QUOTE (SebastianG @ Apr 2 2004, 04:01 AM)
I prefer to view the (i)MDCT as 2 seperate orthogonal transforms. It eases the implementation and reduces the probability of using a false window sequence.


Can you clarify this statement? Do you mean there is a better way to detect block size changes?
Go to the top of the page
+Quote Post
wkwai
post Apr 2 2004, 14:43
Post #4


MPEG4 AAC developer


Group: Developer
Posts: 398
Joined: 1-June 03
Member No.: 6943



QUOTE (leen @ Mar 10 2004, 03:00 AM)
Hello ~~

  But I am not able to find it mathematically when it is winodw switching . Can anyone explain me that


regards

leen

Do you mean window switching by block size switching ? Because in AAC there is another window shape switching between sin window and KB window !!!

As for block size switching.. I am afraid (as far as I know) it is very much an "ART"... Not one single technique is sufficient to correctly switch 100%.. In AAC, there is even additional tools to aid block switching just in case it fails.. the TNS tool & Gain Control tool..
Go to the top of the page
+Quote Post
SebastianG
post Apr 2 2004, 18:13
Post #5





Group: Developer
Posts: 1317
Joined: 20-March 04
From: Göttingen (DE)
Member No.: 12875



QUOTE (wkwai @ Apr 2 2004, 05:23 AM)
Can you clarify this statement? Do you mean there is a better way to detect block size changes?

What do you mean by "detect a blocksize" ?
I just said to that the whole MDCT stuff is equivalent to the procedure I described above and that it's IMHO easy to realize the correctness of it this way because the whole thing is a concatenation of 2 orthonormal transforms.
Consider you've already chosen what packet-modes you want to use for encoding (short or long transform).
...|xxxxxxxxxxxxxxxx|xx|xx|xxxxxxxxxxxxxxxx|xxxxxxxxxxxxxxxx|... (time signal)
The remaining thing is: apply a bunch of rotation butterfliess across each | dependant on the transition function (window-half) and do the "MDCT-CORE" transforms by applying its square orthonormal matrix to all the blocks.

QUOTE (wkwai @ Apr 2 2004, 05:43 AM)
QUOTE (leen @ Mar 10 2004, 03:00 AM)
Hello ~~
But I am not able to find it mathematically when it is winodw switching . Can anyone explain me that

Do you mean window switching by block size switching ? Because in AAC there is another window shape switching between sin window and KB window !!!

AAC != Vorbis wink.gif

QUOTE
As for block size switching.. I am afraid (as far as I know) it is very much an "ART"... Not one single technique is sufficient to correctly switch 100%.. In AAC, there is even additional tools to aid block switching just in case it fails.. the TNS tool & Gain Control tool..

You're obviously referring to an encoder's job to chose the "best" transform, right ?
I don't know if the OP cares about this. (?)

bye,
Sebastian
Go to the top of the page
+Quote Post
SebastianG
post Apr 5 2004, 16:10
Post #6





Group: Developer
Posts: 1317
Joined: 20-March 04
From: Göttingen (DE)
Member No.: 12875



Maybe this view of the (i)MDCT is usefull.
see here

If you want to join a short transform and a long transform just use the "short-butterfly-set" for the block boundaries.

bye,
Sebastian
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

 



RSS Lo-Fi Version Time is now: 29th July 2014 - 10:54