overlap add in window swiching |
![]() ![]() |
overlap add in window swiching |
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 |
|
|
|
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 |
|
|
|
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? |
|
|
|
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.. |
|
|
|
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 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 |
|
|
|
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 |
|
|
|
![]() ![]() |
|
Lo-Fi Version | Time is now: 25th May 2013 - 11:50 |