IPB

Welcome Guest ( Log In | Register )

 
Reply to this topicStart new topic
Tremor's mdct backward function
antrox87
post Jun 6 2009, 14:49
Post #1





Group: Members
Posts: 5
Joined: 28-May 09
Member No.: 70211



Hi to all,
I'm trying to understand the Tremor's code that implements the iMDCT.
First of all.. Does it implement iMDCT throught a mechanism of rotation and FFT? I'm not sure of it..
If it's true.. where does implement the presorting?
Then.. the parameter "n" defines the dimension on witch the iMDCT is calculated (I know that the range on witch n is defined could be only between 64 and 8192 , multiples of 2). Is it the input's array dimension?

Thanks for answers

Go to the top of the page
+Quote Post
saratoga
post Jun 6 2009, 15:50
Post #2





Group: Members
Posts: 4718
Joined: 2-September 02
Member No.: 3264



QUOTE (antrox87 @ Jun 6 2009, 09:49) *
First of all.. Does it implement iMDCT throught a mechanism of rotation and FFT? I'm not sure of it..


It does not. FFT based iMDCTs are very easy to spot since they nearly all look the same. See mdct.c in ffmpeg (or the unrelated but nearly identically written mdct.c in libfaad) for good examples of these.

QUOTE (antrox87 @ Jun 6 2009, 09:49) *
Then.. the parameter "n" defines the dimension on witch the iMDCT is calculated (I know that the range on witch n is defined could be only between 64 and 8192 , multiples of 2). Is it the input's array dimension?


Correct. Its the input array's dimension (number of frequency domain samples), typically 256 or 2048 for vorbis.



Go to the top of the page
+Quote Post
antrox87
post Jun 6 2009, 17:40
Post #3





Group: Members
Posts: 5
Joined: 28-May 09
Member No.: 70211



QUOTE (Mike Giacomelli @ Jun 6 2009, 16:50) *
It does not. FFT based iMDCTs are very easy to spot since they nearly all look the same. See mdct.c in ffmpeg (or the unrelated but nearly identically written mdct.c in libfaad) for good examples of these.


So.. what does implement?? How is it implemented?
I thought that it was following the algorithm to implement a MDCT thorugh an FFT in the reverse way...
Go to the top of the page
+Quote Post
saratoga
post Jun 7 2009, 00:43
Post #4





Group: Members
Posts: 4718
Joined: 2-September 02
Member No.: 3264



QUOTE (antrox87 @ Jun 6 2009, 12:40) *
QUOTE (Mike Giacomelli @ Jun 6 2009, 16:50) *
It does not. FFT based iMDCTs are very easy to spot since they nearly all look the same. See mdct.c in ffmpeg (or the unrelated but nearly identically written mdct.c in libfaad) for good examples of these.


So.. what does implement?? How is it implemented?


Check the comments in the code. The author gives a reference for his particular MDCT. Unfortunately, its a book which I've never bothered to track down so I can't say anything specific about it. However, if you search for IMDCTs, you'll see that theres quite a few different algorithms out there for computing them (though the FFT method is most popular).

QUOTE (antrox87 @ Jun 6 2009, 12:40) *
I thought that it was following the algorithm to implement a MDCT thorugh an FFT in the reverse way...


The forward and backward MDCTs are nearly identical, and are extremely simple. Most are just a few lines of code for rotations, then an FFT, then a few more lines of code for post rotations. The algorithm in Tremor is clearly quite different since its both very long and has no FFT smile.gif
Go to the top of the page
+Quote Post
OggY68
post Jul 8 2009, 09:24
Post #5





Group: Members
Posts: 8
Joined: 8-July 09
From: Brussels
Member No.: 71300



QUOTE (Mike Giacomelli @ Jun 7 2009, 00:43) *
QUOTE (antrox87 @ Jun 6 2009, 12:40) *
QUOTE (Mike Giacomelli @ Jun 6 2009, 16:50) *
It does not. FFT based iMDCTs are very easy to spot since they nearly all look the same. See mdct.c in ffmpeg (or the unrelated but nearly identically written mdct.c in libfaad) for good examples of these.


So.. what does implement?? How is it implemented?


Check the comments in the code. The author gives a reference for his particular MDCT. Unfortunately, its a book which I've never bothered to track down so I can't say anything specific about it. However, if you search for IMDCTs, you'll see that theres quite a few different algorithms out there for computing them (though the FFT method is most popular).

QUOTE (antrox87 @ Jun 6 2009, 12:40) *
I thought that it was following the algorithm to implement a MDCT thorugh an FFT in the reverse way...


The forward and backward MDCTs are nearly identical, and are extremely simple. Most are just a few lines of code for rotations, then an FFT, then a few more lines of code for post rotations. The algorithm in Tremor is clearly quite different since its both very long and has no FFT smile.gif


Hmmm, dry.gif , actually the mdct_backward function in Tremor's mdct.c file does implement an FFT. I see bitreverse, butterfly etc methods, all the building blocks of a good old Fast Fourier Transform:
http://www.dspguide.com/ch12/2.htm
Go to the top of the page
+Quote Post
saratoga
post Jul 8 2009, 16:06
Post #6





Group: Members
Posts: 4718
Joined: 2-September 02
Member No.: 3264



QUOTE (OggY68 @ Jul 8 2009, 04:24) *
Hmmm, dry.gif , actually the mdct_backward function in Tremor's mdct.c file does implement an FFT. I see bitreverse, butterfly etc methods, all the building blocks of a good old Fast Fourier Transform:
http://www.dspguide.com/ch12/2.htm


If you can pick out a DFT in there, then good work! But don't assume that just because theres butterflies and bit reversal that its an FFT. The MDCT is itself a discretized Fourier transform, so it can be computed using much the same decomposition methods.
Go to the top of the page
+Quote Post
ruchi sharma
post Oct 14 2009, 11:43
Post #7





Group: Members
Posts: 10
Joined: 9-May 06
From: Mumbai
Member No.: 30588



QUOTE (antrox87 @ Jun 6 2009, 07:49) *
Hi to all,
I'm trying to understand the Tremor's code that implements the iMDCT.
First of all.. Does it implement iMDCT throught a mechanism of rotation and FFT? I'm not sure of it..
If it's true.. where does implement the presorting?
Then.. the parameter "n" defines the dimension on witch the iMDCT is calculated (I know that the range on witch n is defined could be only between 64 and 8192 , multiples of 2). Is it the input's array dimension?

Thanks for answers



Hi,
i am working on MDCT Backward of tremor's code.
i need to replace this to Duhamels algorithim.
can u plz help me out by any suggesstions or inputs??
i need to replace existing MDCT to duhamels FFT so as to increase the performance.
Thanks a lot.

Regards,
Ruchi
Go to the top of the page
+Quote Post
saratoga
post Oct 14 2009, 14:26
Post #8





Group: Members
Posts: 4718
Joined: 2-September 02
Member No.: 3264



QUOTE (ruchi sharma @ Oct 14 2009, 06:43) *
Hi,
i am working on MDCT Backward of tremor's code.
i need to replace this to Duhamels algorithim.
can u plz help me out by any suggesstions or inputs??
i need to replace existing MDCT to duhamels FFT so as to increase the performance.
Thanks a lot.


I tried several FFT based IMDCTs in place of tremor's and all were slower. You will need a very fast FFT algorithm to beat Tremor. Lately I've been working on a slit radix version, but I have no idea if its going to be any faster smile.gif

If you want to try, take a look at one of the mdct.c files mentioned above and use your own FFT.

This post has been edited by Mike Giacomelli: Oct 14 2009, 14:26
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: 19th April 2014 - 03:55