- 10
- 10月
总算有点看懂wma2wav(ffmpeg)中的IMDCT算法了。只是有点看懂。
wma2wav,其实就是从ffmpeg中将wma解码的程序提取了出来。IMDCT是其中的一个重要部份吧。小结了一下该程序对IMDCT的计算流程。
先是将IMDCT的式子进行分段移位,利用cos函数的对称性,将2N个点的IMDCT转换成N个点的DCT-IV算法。
然后对这N个点进行处理,以偶序列为实部,奇序列的逆序列为虚部,先进行预处理,然后就转换成N/2个点的FFT。计算完后,再进行相关的后处理,即可得到。
整个算法和http://www.ee.columbia.edu/~marios/mdct/mdct_giraffe.html中提到的imdtc4差不多。
花了几天时间终于弄明白这个预处理和后处理的推导流程。其实预处理和后处理的目的就是为了把表达示转换成标准DFT,这样就可以用FFT来进行计算了。仅此而已。
在FFT计算过程中,ffmpeg用的是按时间抽取的FFT算法,也就是先按位逆序来打乱顺序,然后计算,结果就是顺序的了。
大幅度
难
我一直也在做WMA中的IMDCT,我发现它的fft顺序并不是按位取反那么简单,你知道具体的输入顺序吗?