Skip to main content

Notice

Please note that most of the software linked on this forum is likely to be safe to use. If you are unsure, feel free to ask in the relevant topics, or send a private message to an administrator or moderator. To help curb the problems of false positives, or in the event that you do find actual malware, you can contribute through the article linked here.
Topic: overlap add in window swiching (Read 3499 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

overlap add in window swiching

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

overlap add in window swiching

Reply #1
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

overlap add in window swiching

Reply #2
Quote
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?

overlap add in window swiching

Reply #3
Quote
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..

 

overlap add in window swiching

Reply #4
Quote
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
Quote
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

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

overlap add in window swiching

Reply #5
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