ref: 5346aad4cf31ed56208283a3984698b9cc084777
parent: 0b18a49e85abd44fc98e7fcaabc8aae7b95ee283
author: lenox <lenox>
date: Mon Feb 14 03:22:02 EST 2000
new rft (reference to fftw removed, sorry :) )
--- a/enc_tf.c
+++ b/enc_tf.c
@@ -3,7 +3,7 @@
#include <memory.h>
#include "aacenc.h"
#include "bitstream.h"
-#include "interface.h"
+#include "interface.h"
#include "enc.h"
#include "block.h"
#include "tf_main.h"
@@ -16,7 +16,7 @@
#include "aac_se_enc.h"
#include "nok_ltp_enc.h"
#include "winswitch.h"
-#include "rdft.h"
+#include "transfo.h"
#define SQRT2 C_SQRT2
@@ -91,7 +91,6 @@
for (chanNum=0;chanNum<MAX_TIME_CHANNELS+2;chanNum++) {if (DTimeSigLookAheadBuf[chanNum]) free(DTimeSigLookAheadBuf[chanNum]);
}
- fftw_destroy();
}
@@ -194,7 +193,7 @@
make_MDCT_windows();
make_FFT_order();
- fftw_init();
+ initrft();
}
/*****************************************************************************************
--- a/fastfft.c
+++ b/fastfft.c
@@ -1,8 +1,10 @@
#include "fastfft.h"
int unscambled64[64];
+int unscambled128[128];
int unscambled512[512];
-fftw_complex FFTarray[512]; /* the array for in-place FFT */
+int unscambled1024[1024];
+fftw_complex FFTarray[1024]; /* the array for in-place FFT */
fftw_real K980785280[1] =
{FFTW_KONST(+0.980785280403230449126182236134239036973933731)};@@ -117,6 +119,135 @@
{ -0.995184726672197, 0.0980171403295608 },};
+fftw_complex PFFTW(W_256)[126] = {+{ 0.999698818696204, 0.0245412285229123 },+{ 0.998795456205172, 0.049067674327418 },+{ 0.998795456205172, 0.049067674327418 },+{ 0.995184726672197, 0.0980171403295606 },+{ 0.99729045667869, 0.0735645635996674 },+{ 0.989176509964781, 0.146730474455362 },+{ 0.995184726672197, 0.0980171403295606 },+{ 0.98078528040323, 0.195090322016128 },+{ 0.99247953459871, 0.122410675199216 },+{ 0.970031253194544, 0.242980179903264 },+{ 0.989176509964781, 0.146730474455362 },+{ 0.956940335732209, 0.290284677254462 },+{ 0.985277642388941, 0.170961888760301 },+{ 0.941544065183021, 0.33688985339222 },+{ 0.98078528040323, 0.195090322016128 },+{ 0.923879532511287, 0.38268343236509 },+{ 0.975702130038529, 0.21910124015687 },+{ 0.903989293123443, 0.427555093430282 },+{ 0.970031253194544, 0.242980179903264 },+{ 0.881921264348355, 0.471396736825998 },+{ 0.96377606579544, 0.266712757474898 },+{ 0.857728610000272, 0.514102744193222 },+{ 0.956940335732209, 0.290284677254462 },+{ 0.831469612302545, 0.555570233019602 },+{ 0.949528180593037, 0.313681740398892 },+{ 0.803207531480645, 0.595699304492433 },+{ 0.941544065183021, 0.33688985339222 },+{ 0.773010453362737, 0.634393284163645 },+{ 0.932992798834739, 0.359895036534988 },+{ 0.740951125354959, 0.671558954847018 },+{ 0.923879532511287, 0.38268343236509 },+{ 0.707106781186548, 0.707106781186547 },+{ 0.914209755703531, 0.40524131400499 },+{ 0.671558954847018, 0.740951125354959 },+{ 0.903989293123443, 0.427555093430282 },+{ 0.634393284163645, 0.773010453362737 },+{ 0.893224301195515, 0.449611329654607 },+{ 0.595699304492433, 0.803207531480645 },+{ 0.881921264348355, 0.471396736825998 },+{ 0.555570233019602, 0.831469612302545 },+{ 0.870086991108711, 0.492898192229784 },+{ 0.514102744193222, 0.857728610000272 },+{ 0.857728610000272, 0.514102744193222 },+{ 0.471396736825998, 0.881921264348355 },+{ 0.844853565249707, 0.534997619887097 },+{ 0.427555093430282, 0.903989293123443 },+{ 0.831469612302545, 0.555570233019602 },+{ 0.38268343236509, 0.923879532511287 },+{ 0.817584813151584, 0.575808191417845 },+{ 0.33688985339222, 0.941544065183021 },+{ 0.803207531480645, 0.595699304492433 },+{ 0.290284677254462, 0.956940335732209 },+{ 0.788346427626606, 0.615231590580627 },+{ 0.242980179903264, 0.970031253194544 },+{ 0.773010453362737, 0.634393284163645 },+{ 0.195090322016128, 0.98078528040323 },+{ 0.757208846506485, 0.653172842953777 },+{ 0.146730474455362, 0.989176509964781 },+{ 0.740951125354959, 0.671558954847018 },+{ 0.0980171403295608, 0.995184726672197 },+{ 0.724247082951467, 0.689540544737067 },+{ 0.0490676743274181, 0.998795456205172 },+{ 0.707106781186548, 0.707106781186547 },+{ 6.12303176911189e-17, 1 },+{ 0.689540544737067, 0.724247082951467 },+{ -0.049067674327418, 0.998795456205172 },+{ 0.671558954847018, 0.740951125354959 },+{ -0.0980171403295606, 0.995184726672197 },+{ 0.653172842953777, 0.757208846506484 },+{ -0.146730474455362, 0.989176509964781 },+{ 0.634393284163645, 0.773010453362737 },+{ -0.195090322016128, 0.98078528040323 },+{ 0.615231590580627, 0.788346427626606 },+{ -0.242980179903264, 0.970031253194544 },+{ 0.595699304492433, 0.803207531480645 },+{ -0.290284677254462, 0.956940335732209 },+{ 0.575808191417845, 0.817584813151584 },+{ -0.33688985339222, 0.941544065183021 },+{ 0.555570233019602, 0.831469612302545 },+{ -0.38268343236509, 0.923879532511287 },+{ 0.534997619887097, 0.844853565249707 },+{ -0.427555093430282, 0.903989293123443 },+{ 0.514102744193222, 0.857728610000272 },+{ -0.471396736825998, 0.881921264348355 },+{ 0.492898192229784, 0.870086991108711 },+{ -0.514102744193222, 0.857728610000272 },+{ 0.471396736825998, 0.881921264348355 },+{ -0.555570233019602, 0.831469612302545 },+{ 0.449611329654607, 0.893224301195515 },+{ -0.595699304492433, 0.803207531480645 },+{ 0.427555093430282, 0.903989293123443 },+{ -0.634393284163645, 0.773010453362737 },+{ 0.40524131400499, 0.914209755703531 },+{ -0.671558954847018, 0.740951125354959 },+{ 0.38268343236509, 0.923879532511287 },+{ -0.707106781186547, 0.707106781186548 },+{ 0.359895036534988, 0.932992798834739 },+{ -0.740951125354959, 0.671558954847019 },+{ 0.33688985339222, 0.941544065183021 },+{ -0.773010453362737, 0.634393284163645 },+{ 0.313681740398892, 0.949528180593037 },+{ -0.803207531480645, 0.595699304492433 },+{ 0.290284677254462, 0.956940335732209 },+{ -0.831469612302545, 0.555570233019602 },+{ 0.266712757474898, 0.96377606579544 },+{ -0.857728610000272, 0.514102744193222 },+{ 0.242980179903264, 0.970031253194544 },+{ -0.881921264348355, 0.471396736825998 },+{ 0.21910124015687, 0.975702130038529 },+{ -0.903989293123443, 0.427555093430282 },+{ 0.195090322016128, 0.98078528040323 },+{ -0.923879532511287, 0.38268343236509 },+{ 0.170961888760301, 0.985277642388941 },+{ -0.941544065183021, 0.33688985339222 },+{ 0.146730474455362, 0.989176509964781 },+{ -0.956940335732209, 0.290284677254462 },+{ 0.122410675199216, 0.99247953459871 },+{ -0.970031253194544, 0.242980179903264 },+{ 0.0980171403295608, 0.995184726672197 },+{ -0.98078528040323, 0.195090322016129 },+{ 0.0735645635996675, 0.99729045667869 },+{ -0.989176509964781, 0.146730474455362 },+{ 0.0490676743274181, 0.998795456205172 },+{ -0.995184726672197, 0.0980171403295608 },+{ 0.0245412285229123, 0.999698818696204 },+{ -0.998795456205172, 0.049067674327418 },+};
+
fftw_complex PFFTW(W_512)[254] = { { 0.999924701839145, 0.0122715382857199 }, { 0.999698818696204, 0.0245412285229123 },@@ -373,8 +504,522 @@
{ 0.0122715382857199, 0.999924701839145 }, { -0.999698818696204, 0.0245412285229123 },};
+
+fftw_complex PFFTW(W_1024)[510] = {+{ 0.999981175282601, 0.00613588464915448 },+{ 0.999924701839145, 0.0122715382857199 },+{ 0.999924701839145, 0.0122715382857199 },+{ 0.999698818696204, 0.0245412285229123 },+{ 0.999830581795823, 0.0184067299058048 },+{ 0.99932238458835, 0.0368072229413588 },+{ 0.999698818696204, 0.0245412285229123 },+{ 0.998795456205172, 0.049067674327418 },+{ 0.999529417501093, 0.0306748031766366 },+{ 0.998118112900149, 0.0613207363022086 },+{ 0.99932238458835, 0.0368072229413588 },+{ 0.99729045667869, 0.0735645635996674 },+{ 0.999077727752645, 0.0429382569349408 },+{ 0.996312612182778, 0.0857973123444399 },+{ 0.998795456205172, 0.049067674327418 },+{ 0.995184726672197, 0.0980171403295606 },+{ 0.998475580573295, 0.0551952443496899 },+{ 0.993906970002356, 0.110222207293883 },+{ 0.998118112900149, 0.0613207363022086 },+{ 0.99247953459871, 0.122410675199216 },+{ 0.997723066644192, 0.0674439195636641 },+{ 0.99090263542778, 0.134580708507126 },+{ 0.99729045667869, 0.0735645635996674 },+{ 0.989176509964781, 0.146730474455362 },+{ 0.996820299291166, 0.0796824379714301 },+{ 0.987301418157858, 0.158858143333861 },+{ 0.996312612182778, 0.0857973123444399 },+{ 0.985277642388941, 0.170961888760301 },+{ 0.99576741446766, 0.0919089564971327 },+{ 0.983105487431216, 0.183039887955141 },+{ 0.995184726672197, 0.0980171403295606 },+{ 0.98078528040323, 0.195090322016128 },+{ 0.994564570734255, 0.104121633872055 },+{ 0.978317370719628, 0.207111376192219 },+{ 0.993906970002356, 0.110222207293883 },+{ 0.975702130038529, 0.21910124015687 },+{ 0.993211949234795, 0.116318630911905 },+{ 0.97293995220556, 0.231058108280671 },+{ 0.99247953459871, 0.122410675199216 },+{ 0.970031253194544, 0.242980179903264 },+{ 0.9917097536691, 0.128498110793793 },+{ 0.966976471044852, 0.254865659604515 },+{ 0.99090263542778, 0.134580708507126 },+{ 0.96377606579544, 0.266712757474898 },+{ 0.990058210262297, 0.140658239332849 },+{ 0.960430519415566, 0.278519689385053 },+{ 0.989176509964781, 0.146730474455362 },+{ 0.956940335732209, 0.290284677254462 },+{ 0.988257567730749, 0.152797185258443 },+{ 0.953306040354194, 0.302005949319228 },+{ 0.987301418157858, 0.158858143333861 },+{ 0.949528180593037, 0.313681740398892 },+{ 0.986308097244599, 0.16491312048997 },+{ 0.945607325380521, 0.325310292162263 },+{ 0.985277642388941, 0.170961888760301 },+{ 0.941544065183021, 0.33688985339222 },+{ 0.984210092386929, 0.177004220412149 },+{ 0.937339011912575, 0.348418680249435 },+{ 0.983105487431216, 0.183039887955141 },+{ 0.932992798834739, 0.359895036534988 },+{ 0.981963869109555, 0.189068664149806 },+{ 0.928506080473216, 0.371317193951838 },+{ 0.98078528040323, 0.195090322016128 },+{ 0.923879532511287, 0.38268343236509 },+{ 0.979569765685441, 0.201104634842092 },+{ 0.919113851690058, 0.393992040061048 },+{ 0.978317370719628, 0.207111376192219 },+{ 0.914209755703531, 0.40524131400499 },+{ 0.977028142657754, 0.213110319916091 },+{ 0.909167983090522, 0.416429560097637 },+{ 0.975702130038529, 0.21910124015687 },+{ 0.903989293123443, 0.427555093430282 },+{ 0.974339382785576, 0.225083911359793 },+{ 0.898674465693954, 0.438616238538528 },+{ 0.97293995220556, 0.231058108280671 },+{ 0.893224301195515, 0.449611329654607 },+{ 0.971503890986252, 0.237023605994367 },+{ 0.887639620402854, 0.46053871095824 },+{ 0.970031253194544, 0.242980179903264 },+{ 0.881921264348355, 0.471396736825998 },+{ 0.968522094274417, 0.24892760574572 },+{ 0.876070094195407, 0.482183772079123 },+{ 0.966976471044852, 0.254865659604515 },+{ 0.870086991108711, 0.492898192229784 },+{ 0.965394441697689, 0.260794117915276 },+{ 0.863972856121587, 0.503538383725718 },+{ 0.96377606579544, 0.266712757474898 },+{ 0.857728610000272, 0.514102744193222 },+{ 0.962121404269042, 0.272621355449949 },+{ 0.851355193105265, 0.524589682678469 },+{ 0.960430519415566, 0.278519689385053 },+{ 0.844853565249707, 0.534997619887097 },+{ 0.958703474895872, 0.284407537211272 },+{ 0.838224705554838, 0.545324988422046 },+{ 0.956940335732209, 0.290284677254462 },+{ 0.831469612302545, 0.555570233019602 },+{ 0.955141168305771, 0.296150888243624 },+{ 0.824589302785025, 0.565731810783613 },+{ 0.953306040354194, 0.302005949319228 },+{ 0.817584813151584, 0.575808191417845 },+{ 0.951435020969008, 0.307849640041535 },+{ 0.810457198252595, 0.585797857456439 },+{ 0.949528180593037, 0.313681740398892 },+{ 0.803207531480645, 0.595699304492433 },+{ 0.947585591017741, 0.319502030816016 },+{ 0.795836904608884, 0.605511041404326 },+{ 0.945607325380521, 0.325310292162263 },+{ 0.788346427626606, 0.615231590580627 },+{ 0.94359345816196, 0.331106305759876 },+{ 0.780737228572094, 0.624859488142386 },+{ 0.941544065183021, 0.33688985339222 },+{ 0.773010453362737, 0.634393284163645 },+{ 0.93945922360219, 0.342660717311994 },+{ 0.765167265622459, 0.643831542889791 },+{ 0.937339011912575, 0.348418680249435 },+{ 0.757208846506485, 0.653172842953777 },+{ 0.935183509938948, 0.35416352542049 },+{ 0.749136394523459, 0.662415777590172 },+{ 0.932992798834739, 0.359895036534988 },+{ 0.740951125354959, 0.671558954847018 },+{ 0.930766961078984, 0.365612997804774 },+{ 0.732654271672413, 0.680600997795453 },+{ 0.928506080473216, 0.371317193951838 },+{ 0.724247082951467, 0.689540544737067 },+{ 0.926210242138311, 0.377007410216418 },+{ 0.715730825283819, 0.698376249408973 },+{ 0.923879532511287, 0.38268343236509 },+{ 0.707106781186548, 0.707106781186547 },+{ 0.921514039342042, 0.388345046698826 },+{ 0.698376249408973, 0.715730825283819 },+{ 0.919113851690058, 0.393992040061048 },+{ 0.689540544737067, 0.724247082951467 },+{ 0.916679059921043, 0.399624199845647 },+{ 0.680600997795453, 0.732654271672413 },+{ 0.914209755703531, 0.40524131400499 },+{ 0.671558954847018, 0.740951125354959 },+{ 0.91170603200543, 0.410843171057904 },+{ 0.662415777590172, 0.749136394523459 },+{ 0.909167983090522, 0.416429560097637 },+{ 0.653172842953777, 0.757208846506484 },+{ 0.906595704514915, 0.4220002707998 },+{ 0.643831542889791, 0.765167265622459 },+{ 0.903989293123443, 0.427555093430282 },+{ 0.634393284163645, 0.773010453362737 },+{ 0.901348847046022, 0.433093818853152 },+{ 0.624859488142386, 0.780737228572094 },+{ 0.898674465693954, 0.438616238538528 },+{ 0.615231590580627, 0.788346427626606 },+{ 0.895966249756185, 0.444122144570429 },+{ 0.605511041404326, 0.795836904608883 },+{ 0.893224301195515, 0.449611329654607 },+{ 0.595699304492433, 0.803207531480645 },+{ 0.890448723244758, 0.455083587126344 },+{ 0.585797857456439, 0.810457198252595 },+{ 0.887639620402854, 0.46053871095824 },+{ 0.575808191417845, 0.817584813151584 },+{ 0.884797098430938, 0.465976495767966 },+{ 0.565731810783613, 0.824589302785025 },+{ 0.881921264348355, 0.471396736825998 },+{ 0.555570233019602, 0.831469612302545 },+{ 0.879012226428634, 0.476799230063322 },+{ 0.545324988422046, 0.838224705554838 },+{ 0.876070094195407, 0.482183772079123 },+{ 0.534997619887097, 0.844853565249707 },+{ 0.87309497841829, 0.487550160148436 },+{ 0.524589682678469, 0.851355193105265 },+{ 0.870086991108711, 0.492898192229784 },+{ 0.514102744193222, 0.857728610000272 },+{ 0.867046245515693, 0.498227666972782 },+{ 0.503538383725718, 0.863972856121587 },+{ 0.863972856121587, 0.503538383725718 },+{ 0.492898192229784, 0.870086991108711 },+{ 0.860866938637767, 0.508830142543107 },+{ 0.482183772079123, 0.876070094195407 },+{ 0.857728610000272, 0.514102744193222 },+{ 0.471396736825998, 0.881921264348355 },+{ 0.854557988365401, 0.51935599016559 },+{ 0.46053871095824, 0.887639620402854 },+{ 0.851355193105265, 0.524589682678469 },+{ 0.449611329654607, 0.893224301195515 },+{ 0.848120344803297, 0.529803624686295 },+{ 0.438616238538528, 0.898674465693954 },+{ 0.844853565249707, 0.534997619887097 },+{ 0.427555093430282, 0.903989293123443 },+{ 0.841554977436898, 0.540171472729893 },+{ 0.416429560097637, 0.909167983090522 },+{ 0.838224705554838, 0.545324988422046 },+{ 0.40524131400499, 0.914209755703531 },+{ 0.83486287498638, 0.550457972936605 },+{ 0.393992040061048, 0.919113851690058 },+{ 0.831469612302545, 0.555570233019602 },+{ 0.38268343236509, 0.923879532511287 },+{ 0.828045045257756, 0.560661576197336 },+{ 0.371317193951838, 0.928506080473215 },+{ 0.824589302785025, 0.565731810783613 },+{ 0.359895036534988, 0.932992798834739 },+{ 0.821102514991105, 0.570780745886967 },+{ 0.348418680249435, 0.937339011912575 },+{ 0.817584813151584, 0.575808191417845 },+{ 0.33688985339222, 0.941544065183021 },+{ 0.814036329705948, 0.580813958095765 },+{ 0.325310292162263, 0.945607325380521 },+{ 0.810457198252595, 0.585797857456439 },+{ 0.313681740398892, 0.949528180593037 },+{ 0.806847553543799, 0.590759701858874 },+{ 0.302005949319228, 0.953306040354194 },+{ 0.803207531480645, 0.595699304492433 },+{ 0.290284677254462, 0.956940335732209 },+{ 0.799537269107905, 0.600616479383869 },+{ 0.278519689385053, 0.960430519415566 },+{ 0.795836904608884, 0.605511041404326 },+{ 0.266712757474898, 0.96377606579544 },+{ 0.792106577300212, 0.610382806276309 },+{ 0.254865659604515, 0.966976471044852 },+{ 0.788346427626606, 0.615231590580627 },+{ 0.242980179903264, 0.970031253194544 },+{ 0.784556597155575, 0.620057211763289 },+{ 0.231058108280671, 0.97293995220556 },+{ 0.780737228572094, 0.624859488142386 },+{ 0.21910124015687, 0.975702130038529 },+{ 0.776888465673232, 0.629638238914927 },+{ 0.207111376192219, 0.978317370719628 },+{ 0.773010453362737, 0.634393284163645 },+{ 0.195090322016128, 0.98078528040323 },+{ 0.76910333764558, 0.639124444863776 },+{ 0.183039887955141, 0.983105487431216 },+{ 0.765167265622459, 0.643831542889791 },+{ 0.170961888760301, 0.985277642388941 },+{ 0.761202385484262, 0.648514401022112 },+{ 0.158858143333861, 0.987301418157858 },+{ 0.757208846506485, 0.653172842953777 },+{ 0.146730474455362, 0.989176509964781 },+{ 0.753186799043613, 0.657806693297079 },+{ 0.134580708507126, 0.99090263542778 },+{ 0.749136394523459, 0.662415777590172 },+{ 0.122410675199216, 0.99247953459871 },+{ 0.745057785441466, 0.666999922303637 },+{ 0.110222207293883, 0.993906970002356 },+{ 0.740951125354959, 0.671558954847018 },+{ 0.0980171403295608, 0.995184726672197 },+{ 0.73681656887737, 0.676092703575316 },+{ 0.0857973123444399, 0.996312612182778 },+{ 0.732654271672413, 0.680600997795453 },+{ 0.0735645635996675, 0.99729045667869 },+{ 0.728464390448225, 0.6850836677727 },+{ 0.0613207363022086, 0.998118112900149 },+{ 0.724247082951467, 0.689540544737067 },+{ 0.0490676743274181, 0.998795456205172 },+{ 0.720002507961382, 0.693971460889654 },+{ 0.036807222941359, 0.99932238458835 },+{ 0.715730825283819, 0.698376249408973 },+{ 0.0245412285229123, 0.999698818696204 },+{ 0.711432195745216, 0.702754744457225 },+{ 0.0122715382857199, 0.999924701839145 },+{ 0.707106781186548, 0.707106781186547 },+{ 6.12303176911189e-17, 1 },+{ 0.702754744457225, 0.711432195745216 },+{ -0.0122715382857198, 0.999924701839145 },+{ 0.698376249408973, 0.715730825283819 },+{ -0.0245412285229121, 0.999698818696204 },+{ 0.693971460889654, 0.720002507961382 },+{ -0.0368072229413589, 0.99932238458835 },+{ 0.689540544737067, 0.724247082951467 },+{ -0.049067674327418, 0.998795456205172 },+{ 0.6850836677727, 0.728464390448225 },+{ -0.0613207363022085, 0.998118112900149 },+{ 0.680600997795453, 0.732654271672413 },+{ -0.0735645635996673, 0.99729045667869 },+{ 0.676092703575316, 0.73681656887737 },+{ -0.0857973123444398, 0.996312612182778 },+{ 0.671558954847018, 0.740951125354959 },+{ -0.0980171403295606, 0.995184726672197 },+{ 0.666999922303637, 0.745057785441466 },+{ -0.110222207293883, 0.993906970002356 },+{ 0.662415777590172, 0.749136394523459 },+{ -0.122410675199216, 0.99247953459871 },+{ 0.657806693297079, 0.753186799043612 },+{ -0.134580708507126, 0.99090263542778 },+{ 0.653172842953777, 0.757208846506484 },+{ -0.146730474455362, 0.989176509964781 },+{ 0.648514401022113, 0.761202385484262 },+{ -0.158858143333861, 0.987301418157858 },+{ 0.643831542889791, 0.765167265622459 },+{ -0.170961888760301, 0.985277642388941 },+{ 0.639124444863776, 0.76910333764558 },+{ -0.183039887955141, 0.983105487431216 },+{ 0.634393284163645, 0.773010453362737 },+{ -0.195090322016128, 0.98078528040323 },+{ 0.629638238914927, 0.776888465673232 },+{ -0.207111376192218, 0.978317370719628 },+{ 0.624859488142386, 0.780737228572094 },+{ -0.21910124015687, 0.975702130038529 },+{ 0.620057211763289, 0.784556597155575 },+{ -0.231058108280671, 0.97293995220556 },+{ 0.615231590580627, 0.788346427626606 },+{ -0.242980179903264, 0.970031253194544 },+{ 0.610382806276309, 0.792106577300212 },+{ -0.254865659604515, 0.966976471044852 },+{ 0.605511041404326, 0.795836904608883 },+{ -0.266712757474898, 0.96377606579544 },+{ 0.600616479383869, 0.799537269107905 },+{ -0.278519689385053, 0.960430519415566 },+{ 0.595699304492433, 0.803207531480645 },+{ -0.290284677254462, 0.956940335732209 },+{ 0.590759701858874, 0.806847553543799 },+{ -0.302005949319228, 0.953306040354194 },+{ 0.585797857456439, 0.810457198252595 },+{ -0.313681740398891, 0.949528180593037 },+{ 0.580813958095765, 0.814036329705948 },+{ -0.325310292162263, 0.945607325380521 },+{ 0.575808191417845, 0.817584813151584 },+{ -0.33688985339222, 0.941544065183021 },+{ 0.570780745886967, 0.821102514991105 },+{ -0.348418680249434, 0.937339011912575 },+{ 0.565731810783613, 0.824589302785025 },+{ -0.359895036534988, 0.932992798834739 },+{ 0.560661576197336, 0.828045045257756 },+{ -0.371317193951837, 0.928506080473216 },+{ 0.555570233019602, 0.831469612302545 },+{ -0.38268343236509, 0.923879532511287 },+{ 0.550457972936605, 0.83486287498638 },+{ -0.393992040061048, 0.919113851690058 },+{ 0.545324988422046, 0.838224705554838 },+{ -0.40524131400499, 0.914209755703531 },+{ 0.540171472729893, 0.841554977436898 },+{ -0.416429560097637, 0.909167983090522 },+{ 0.534997619887097, 0.844853565249707 },+{ -0.427555093430282, 0.903989293123443 },+{ 0.529803624686295, 0.848120344803297 },+{ -0.438616238538527, 0.898674465693954 },+{ 0.524589682678469, 0.851355193105265 },+{ -0.449611329654607, 0.893224301195515 },+{ 0.51935599016559, 0.854557988365401 },+{ -0.46053871095824, 0.887639620402854 },+{ 0.514102744193222, 0.857728610000272 },+{ -0.471396736825998, 0.881921264348355 },+{ 0.508830142543107, 0.860866938637767 },+{ -0.482183772079123, 0.876070094195407 },+{ 0.503538383725718, 0.863972856121587 },+{ -0.492898192229784, 0.870086991108711 },+{ 0.498227666972782, 0.867046245515693 },+{ -0.503538383725717, 0.863972856121587 },+{ 0.492898192229784, 0.870086991108711 },+{ -0.514102744193222, 0.857728610000272 },+{ 0.487550160148436, 0.87309497841829 },+{ -0.524589682678469, 0.851355193105265 },+{ 0.482183772079123, 0.876070094195407 },+{ -0.534997619887097, 0.844853565249707 },+{ 0.476799230063322, 0.879012226428633 },+{ -0.545324988422046, 0.838224705554838 },+{ 0.471396736825998, 0.881921264348355 },+{ -0.555570233019602, 0.831469612302545 },+{ 0.465976495767966, 0.884797098430938 },+{ -0.565731810783613, 0.824589302785025 },+{ 0.46053871095824, 0.887639620402854 },+{ -0.575808191417845, 0.817584813151584 },+{ 0.455083587126344, 0.890448723244758 },+{ -0.585797857456439, 0.810457198252595 },+{ 0.449611329654607, 0.893224301195515 },+{ -0.595699304492433, 0.803207531480645 },+{ 0.444122144570429, 0.895966249756185 },+{ -0.605511041404325, 0.795836904608884 },+{ 0.438616238538528, 0.898674465693954 },+{ -0.615231590580627, 0.788346427626606 },+{ 0.433093818853152, 0.901348847046022 },+{ -0.624859488142386, 0.780737228572095 },+{ 0.427555093430282, 0.903989293123443 },+{ -0.634393284163645, 0.773010453362737 },+{ 0.4220002707998, 0.906595704514915 },+{ -0.643831542889791, 0.765167265622459 },+{ 0.416429560097637, 0.909167983090522 },+{ -0.653172842953777, 0.757208846506485 },+{ 0.410843171057904, 0.91170603200543 },+{ -0.662415777590172, 0.749136394523459 },+{ 0.40524131400499, 0.914209755703531 },+{ -0.671558954847018, 0.740951125354959 },+{ 0.399624199845647, 0.916679059921043 },+{ -0.680600997795453, 0.732654271672413 },+{ 0.393992040061048, 0.919113851690058 },+{ -0.689540544737067, 0.724247082951467 },+{ 0.388345046698826, 0.921514039342042 },+{ -0.698376249408973, 0.715730825283819 },+{ 0.38268343236509, 0.923879532511287 },+{ -0.707106781186547, 0.707106781186548 },+{ 0.377007410216418, 0.926210242138311 },+{ -0.715730825283819, 0.698376249408973 },+{ 0.371317193951838, 0.928506080473215 },+{ -0.724247082951467, 0.689540544737067 },+{ 0.365612997804774, 0.930766961078984 },+{ -0.732654271672413, 0.680600997795453 },+{ 0.359895036534988, 0.932992798834739 },+{ -0.740951125354959, 0.671558954847019 },+{ 0.354163525420491, 0.935183509938947 },+{ -0.749136394523459, 0.662415777590172 },+{ 0.348418680249435, 0.937339011912575 },+{ -0.757208846506485, 0.653172842953777 },+{ 0.342660717311994, 0.93945922360219 },+{ -0.765167265622459, 0.643831542889791 },+{ 0.33688985339222, 0.941544065183021 },+{ -0.773010453362737, 0.634393284163645 },+{ 0.331106305759876, 0.94359345816196 },+{ -0.780737228572094, 0.624859488142386 },+{ 0.325310292162263, 0.945607325380521 },+{ -0.788346427626606, 0.615231590580627 },+{ 0.319502030816016, 0.947585591017741 },+{ -0.795836904608883, 0.605511041404326 },+{ 0.313681740398892, 0.949528180593037 },+{ -0.803207531480645, 0.595699304492433 },+{ 0.307849640041535, 0.951435020969008 },+{ -0.810457198252595, 0.585797857456439 },+{ 0.302005949319228, 0.953306040354194 },+{ -0.817584813151584, 0.575808191417845 },+{ 0.296150888243624, 0.955141168305771 },+{ -0.824589302785025, 0.565731810783613 },+{ 0.290284677254462, 0.956940335732209 },+{ -0.831469612302545, 0.555570233019602 },+{ 0.284407537211272, 0.958703474895872 },+{ -0.838224705554838, 0.545324988422046 },+{ 0.278519689385053, 0.960430519415566 },+{ -0.844853565249707, 0.534997619887097 },+{ 0.272621355449949, 0.962121404269042 },+{ -0.851355193105265, 0.524589682678469 },+{ 0.266712757474898, 0.96377606579544 },+{ -0.857728610000272, 0.514102744193222 },+{ 0.260794117915276, 0.965394441697689 },+{ -0.863972856121587, 0.503538383725718 },+{ 0.254865659604515, 0.966976471044852 },+{ -0.870086991108711, 0.492898192229784 },+{ 0.24892760574572, 0.968522094274417 },+{ -0.876070094195406, 0.482183772079123 },+{ 0.242980179903264, 0.970031253194544 },+{ -0.881921264348355, 0.471396736825998 },+{ 0.237023605994367, 0.971503890986252 },+{ -0.887639620402854, 0.46053871095824 },+{ 0.231058108280671, 0.97293995220556 },+{ -0.893224301195515, 0.449611329654607 },+{ 0.225083911359793, 0.974339382785576 },+{ -0.898674465693954, 0.438616238538528 },+{ 0.21910124015687, 0.975702130038529 },+{ -0.903989293123443, 0.427555093430282 },+{ 0.213110319916091, 0.977028142657754 },+{ -0.909167983090522, 0.416429560097637 },+{ 0.207111376192219, 0.978317370719628 },+{ -0.914209755703531, 0.40524131400499 },+{ 0.201104634842092, 0.979569765685441 },+{ -0.919113851690058, 0.393992040061048 },+{ 0.195090322016128, 0.98078528040323 },+{ -0.923879532511287, 0.38268343236509 },+{ 0.189068664149806, 0.981963869109555 },+{ -0.928506080473215, 0.371317193951838 },+{ 0.183039887955141, 0.983105487431216 },+{ -0.932992798834739, 0.359895036534988 },+{ 0.177004220412149, 0.984210092386929 },+{ -0.937339011912575, 0.348418680249435 },+{ 0.170961888760301, 0.985277642388941 },+{ -0.941544065183021, 0.33688985339222 },+{ 0.16491312048997, 0.986308097244599 },+{ -0.945607325380521, 0.325310292162263 },+{ 0.158858143333861, 0.987301418157858 },+{ -0.949528180593037, 0.313681740398891 },+{ 0.152797185258443, 0.988257567730749 },+{ -0.953306040354194, 0.302005949319228 },+{ 0.146730474455362, 0.989176509964781 },+{ -0.956940335732209, 0.290284677254462 },+{ 0.140658239332849, 0.990058210262297 },+{ -0.960430519415566, 0.278519689385053 },+{ 0.134580708507126, 0.99090263542778 },+{ -0.96377606579544, 0.266712757474898 },+{ 0.128498110793793, 0.9917097536691 },+{ -0.966976471044852, 0.254865659604515 },+{ 0.122410675199216, 0.99247953459871 },+{ -0.970031253194544, 0.242980179903264 },+{ 0.116318630911905, 0.993211949234795 },+{ -0.97293995220556, 0.231058108280671 },+{ 0.110222207293883, 0.993906970002356 },+{ -0.975702130038528, 0.21910124015687 },+{ 0.104121633872055, 0.994564570734255 },+{ -0.978317370719628, 0.207111376192219 },+{ 0.0980171403295608, 0.995184726672197 },+{ -0.98078528040323, 0.195090322016129 },+{ 0.0919089564971327, 0.99576741446766 },+{ -0.983105487431216, 0.183039887955141 },+{ 0.0857973123444399, 0.996312612182778 },+{ -0.985277642388941, 0.170961888760301 },+{ 0.0796824379714301, 0.996820299291166 },+{ -0.987301418157858, 0.158858143333861 },+{ 0.0735645635996675, 0.99729045667869 },+{ -0.989176509964781, 0.146730474455362 },+{ 0.0674439195636641, 0.997723066644192 },+{ -0.99090263542778, 0.134580708507126 },+{ 0.0613207363022086, 0.998118112900149 },+{ -0.99247953459871, 0.122410675199216 },+{ 0.05519524434969, 0.998475580573295 },+{ -0.993906970002356, 0.110222207293883 },+{ 0.0490676743274181, 0.998795456205172 },+{ -0.995184726672197, 0.0980171403295608 },+{ 0.042938256934941, 0.999077727752645 },+{ -0.996312612182778, 0.0857973123444402 },+{ 0.036807222941359, 0.99932238458835 },+{ -0.99729045667869, 0.0735645635996677 },+{ 0.0306748031766366, 0.999529417501093 },+{ -0.998118112900149, 0.0613207363022085 },+{ 0.0245412285229123, 0.999698818696204 },+{ -0.998795456205172, 0.049067674327418 },+{ 0.0184067299058048, 0.999830581795823 },+{ -0.99932238458835, 0.0368072229413588 },+{ 0.0122715382857199, 0.999924701839145 },+{ -0.999698818696204, 0.0245412285229123 },+{ 0.00613588464915452, 0.999981175282601 },+{ -0.999924701839145, 0.01227153828572 },+};
///////////////////////////////////////////////////////////////
+
void PFFTW(16) (fftw_complex * input) {fftw_real tmp332;
fftw_real tmp331;
@@ -1483,6 +2128,15 @@
PFFTW(32)(input + 96);
}
+void PFFTW(256)(fftw_complex *input)
+{+ PFFTW(twiddle_4)(input, PFFTW(W_256), 64);
+ PFFTW(64)(input );
+ PFFTW(64)(input + 64);
+ PFFTW(64)(input + 128);
+ PFFTW(64)(input + 192);
+}
+
void PFFTW(512)(fftw_complex *input)
{PFFTW(twiddle_4)(input, PFFTW(W_512), 128);
@@ -1491,6 +2145,17 @@
PFFTW(128)(input + 256);
PFFTW(128)(input + 384);
}
+
+void PFFTW(1024)(fftw_complex *input)
+{+ extern fftw_complex PFFTW(W_1024)[];
+ PFFTW(twiddle_4)(input, PFFTW(W_1024), 256);
+ PFFTW(256)(input );
+ PFFTW(256)(input + 256);
+ PFFTW(256)(input + 512);
+ PFFTW(256)(input + 768);
+}
+
///////////////////////////////////////////////////////////////
void PFFTWI(16) (fftw_complex * input) {fftw_real tmp333;
@@ -2584,7 +3249,7 @@
c_re(input[3]) = st1;
}
-void PFFTWI(64)(fftw_complex *input)
+void PFFTWI(64)(fftw_complex *input)
{PFFTWI(16)(input );
PFFTWI(16)(input + 16);
@@ -2593,7 +3258,7 @@
PFFTWI(twiddle_4)(input, PFFTW(W_64), 16);
}
-void PFFTWI(128)(fftw_complex *input)
+void PFFTWI(128)(fftw_complex *input)
{PFFTWI(32)(input );
PFFTWI(32)(input + 32);
@@ -2602,6 +3267,15 @@
PFFTWI(twiddle_4)(input, PFFTW(W_128), 32);
}
+void PFFTWI(256)(fftw_complex *input)
+{+ PFFTWI(64)(input );
+ PFFTWI(64)(input + 64);
+ PFFTWI(64)(input + 128);
+ PFFTWI(64)(input + 192);
+ PFFTWI(twiddle_4)(input, PFFTW(W_256), 64);
+}
+
void PFFTWI(512)(fftw_complex *input)
{PFFTWI(128)(input );
@@ -2610,6 +3284,17 @@
PFFTWI(128)(input + 384);
PFFTWI(twiddle_4)(input, PFFTW(W_512), 128);
}
+
+void PFFTWI(1024)(fftw_complex *input)
+{+ extern fftw_complex PFFTW(W_1024)[];
+ PFFTWI(256)(input );
+ PFFTWI(256)(input + 256);
+ PFFTWI(256)(input + 512);
+ PFFTWI(256)(input + 768);
+ PFFTWI(twiddle_4)(input, PFFTW(W_1024), 256);
+}
+
///////////////////////////////////////////////////////////////////////////
void PFFTW(twiddle_4) (fftw_complex * A, const fftw_complex * W, int iostride) {int i;
@@ -2861,6 +3546,16 @@
return (i1 * 32 + ((i2 + 1) % 32));
}
+int PFFTW(permutation_256)(int i)
+{+ int i1 = i % 4;
+ int i2 = i / 4;
+ if (i1 <= 2)
+ return (i1 * 64 + PFFTW(permutation_64)(i2));
+ else
+ return (i1 * 64 + PFFTW(permutation_64)((i2 + 1) % 64));
+}
+
int PFFTW(permutation_512)(int i)
{int i1 = i % 4;
@@ -2871,13 +3566,25 @@
return (i1 * 128 + PFFTW(permutation_128)((i2 + 1) % 128));
}
+int PFFTW(permutation_1024)(int i)
+{+ int i1 = i % 4;
+ int i2 = i / 4;
+ if (i1 <= (4 / 2))
+ return (i1 * 256 + PFFTW(permutation_256)(i2));
+ else
+ return (i1 * 256 + PFFTW(permutation_256)((i2 + 1) % 256));
+}
+
/////////////////////////////////////////////////////////////////
void make_FFT_order(void)
{int i;
-for (i=0 ; i < 512 ; i++){+for (i=0 ; i < 1024 ; i++){if (i < 64) unscambled64[i] = PFFTW(permutation_64)(i);
- unscambled512[i] = PFFTW(permutation_512)(i);
+ if (i < 128) unscambled128[i] = PFFTW(permutation_128)(i);
+ if (i < 512) unscambled512[i] = PFFTW(permutation_512)(i);
+ unscambled1024[i] = PFFTW(permutation_1024)(i);
}
}
--- a/psych.c
+++ b/psych.c
@@ -52,9 +52,9 @@
Source file:
-$Id: psych.c,v 1.45 2000/02/08 12:12:47 oxygene2000 Exp $
-$Id: psych.c,v 1.45 2000/02/08 12:12:47 oxygene2000 Exp $
-$Id: psych.c,v 1.45 2000/02/08 12:12:47 oxygene2000 Exp $
+$Id: psych.c,v 1.46 2000/02/14 08:22:02 lenox Exp $
+$Id: psych.c,v 1.46 2000/02/14 08:22:02 lenox Exp $
+$Id: psych.c,v 1.46 2000/02/14 08:22:02 lenox Exp $
**********************************************************************/
@@ -64,10 +64,10 @@
#include <memory.h>
#include "tf_main.h"
#include "psych.h"
+#include "transfo.h"
-void complspectrum( double *f, unsigned lg2n );
+double sqrt2048, sqrt256;
-
SR_INFO sr_info_aac[MAX_SAMPLING_RATES+1] =
{ { 8000, 40, 15,@@ -218,7 +218,7 @@
/* added by T. Okada (1997.07.10) end */
/*
- * This Function calculates the Frequency in Hertz given a
+ * This Function calculates the Frequency in Hertz given a
* Bark-value. It uses the Traunmueller-formula for bark>2
* and a linear inerpolation below.
* KAF
@@ -448,6 +448,8 @@
psy_stvar_short->last7_nb[i] = 90.0;
}
/* added by T. Araki (1997.10.16) end */
+sqrt2048 = 1/sqrt(2048);
+sqrt256 = 1/sqrt(256);
}
void psy_fill_lookahead(double *p_time_signal[], int no_of_chan)
@@ -553,7 +555,7 @@
psy_var_short.c[i][b] = psy_stvar_short[1].save_cw[i][b];
}
- psy_step5(&part_tbl_long, &part_tbl_short, &psy_stvar_long[no_of_chan], &psy_stvar_short[no_of_chan],
+ psy_step5(&part_tbl_long, &part_tbl_short, &psy_stvar_long[no_of_chan], &psy_stvar_short[no_of_chan],
&psy_var_long, &psy_var_short, ch);
psy_step6(&part_tbl_long, &part_tbl_short, &psy_stvar_long[no_of_chan], &psy_stvar_short[no_of_chan],
&psy_var_long, &psy_var_short);
@@ -607,7 +609,7 @@
}
}
-void psy_step1(double* p_time_signal[],
+void psy_step1(double* p_time_signal[],
double sample[][BLOCK_LEN_LONG*2],
int ch)
{@@ -628,11 +630,8 @@
)
{int w,l;
- double sqrtN;
- double data[2048+1024]; // +1024 becuase of problems in FFT
+ double data[2048],a,b;
- memset(data, 0, (2048+1024)*sizeof(double));
-
/* FFT for long */
psy_stvar_long->p_fft += BLOCK_LEN_LONG;
@@ -639,36 +638,69 @@
if(psy_stvar_long->p_fft == BLOCK_LEN_LONG * 3)
psy_stvar_long->p_fft = 0;
- sqrtN = 1/sqrt(2048);
-
/* windowing */
- for(w = 0; w < BLOCK_LEN_LONG*2; w++){- data[w] = fft_tbl_long->hw[w] * sample[ch][w];
+ for(w = 0; w < BLOCK_LEN_LONG; w++){+ FFTarray[w].re = fft_tbl_long->hw[(w<<1)] * sample[ch][w<<1];
+ FFTarray[w].im = fft_tbl_long->hw[(w<<1)+1] * sample[ch][(w<<1)+1];
}
- complspectrum(data, 11);
+ realft2048(data);
for(w = 0; w < BLOCK_LEN_LONG; w++){- psy_stvar_long->fft_r[w+psy_stvar_long->p_fft] = data[w] * sqrtN;
- if (w < 420)
- psy_stvar_long->fft_f[w+psy_stvar_long->p_fft] = data[w+BLOCK_LEN_LONG];
- }
+ a = data[(w<<1)];
+ b = data[(w<<1)+1];
+ psy_stvar_long->fft_r[w+psy_stvar_long->p_fft] = sqrt(a*a + b*b) * sqrt2048;
- /* FFT for short */
- sqrtN = 1/sqrt(256);
+// if (w < 420)
+ if( a > 0.0 ){+ if( b >= 0.0 )
+ psy_stvar_long->fft_f[w+psy_stvar_long->p_fft] = atan2( b, a );
+ else
+ psy_stvar_long->fft_f[w+psy_stvar_long->p_fft] = atan2( b, a )+ M_PI * 2.0;
+ } else if( a < 0.0 ) {+ psy_stvar_long->fft_f[w+psy_stvar_long->p_fft] = atan2( b, a ) + M_PI;
+ } else {+ if( b > 0.0 )
+ psy_stvar_long->fft_f[w+psy_stvar_long->p_fft] = M_PI * 0.5;
+ else if( b < 0.0 )
+ psy_stvar_long->fft_f[w+psy_stvar_long->p_fft] = M_PI * 1.5;
+ else
+ psy_stvar_long->fft_f[w+psy_stvar_long->p_fft] = 0.0;
+ }
+ }
+
+ /* FFT for short */
for(l = 0; l < MAX_SHORT_WINDOWS; l++){/* windowing */
- for(w = 0; w < BLOCK_LEN_SHORT*2; w++){- data[w] = fft_tbl_short->hw[w] * sample[ch][OFFSET_FOR_SHORT + (BLOCK_LEN_SHORT * l) + w];
+ for(w = 0; w < BLOCK_LEN_SHORT; w++){+ FFTarray[w].re = fft_tbl_short->hw[w<<1] * sample[ch][OFFSET_FOR_SHORT + (BLOCK_LEN_SHORT * l) + (w<<1)];
+ FFTarray[w].im = fft_tbl_short->hw[(w<<1)+1] * sample[ch][OFFSET_FOR_SHORT + (BLOCK_LEN_SHORT * l) + (w<<1)+1];
}
- complspectrum(data, 8);
+ realft256(data);
for(w = 0; w < BLOCK_LEN_SHORT; w++){- psy_stvar_short->fft_r[l][w] = data[w] * sqrtN;
- psy_stvar_short->fft_f[l][w] = data[w+BLOCK_LEN_SHORT];
+ a = data[(w<<1)];
+ b = data[(w<<1)+1];
+ psy_stvar_short->fft_r[l][w]= sqrt(a*a + b*b) * sqrt256;
+
+ if( a > 0.0 ){+ if( b >= 0.0 )
+ psy_stvar_short->fft_f[l][w] = atan2( b, a );
+ else
+ psy_stvar_short->fft_f[l][w] = atan2( b, a )+ M_PI * 2.0;
+ } else if( a < 0.0 ) {+ psy_stvar_short->fft_f[l][w] = atan2( b, a ) + M_PI;
+ } else {+ if( b > 0.0 )
+ psy_stvar_short->fft_f[l][w] = M_PI * 0.5;
+ else if( b < 0.0 )
+ psy_stvar_short->fft_f[l][w] = M_PI * 1.5;
+ else
+ psy_stvar_short->fft_f[l][w] = 0.0;
+ }
}
}
}
--- a/transfo.c
+++ b/transfo.c
@@ -4,6 +4,8 @@
#include "transfo.h"
#include "shape_win.h"
+#define NFLAT_LS 448 // (BLOCK_LEN_LONG - BLOCK_LEN_SHORT) / 2
+
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
@@ -12,10 +14,10 @@
#define M_PI_2 1.57079632679489661923
#endif
-#define NFLAT_LS 448 // (BLOCK_LEN_LONG - BLOCK_LEN_SHORT) / 2
+int sizedouble;
+double wpi256,wpr256;
+double wpi2048,wpr2048;
-int sizedouble; // temp value
-
/*******************************************************************************
Fast MDCT & IMDCT Code
*******************************************************************************/
@@ -491,5 +493,94 @@
if( p_out != p_in ) memcpy(p_out,p_in,specLen*sizedouble);
memset(p_out+xlowpass,0,(specLen-xlowpass)*sizedouble);
+}
+
+void initrft(void)
+{+double theta,wtemp;
+
+theta = -M_PI/128.0;
+wpi256 = sin(theta);
+wtemp = sin(0.5*theta);
+wpr256 = -2.0*wtemp*wtemp;
+
+theta = -M_PI/1024.0;
+wpi2048 = sin(theta);
+wtemp = sin(0.5*theta);
+wpr2048 = -2.0*wtemp*wtemp;
+}
+
+void realft256(double *data)
+{+ int i,i1,i2,i3,i4;
+ double h1r,h1i,h2r,h2i,t1,t2,t3;
+ double wr,wi,wtemp;
+
+ pfftw_128(FFTarray);
+ for (i = 0; i < 128; i++){+ data[(i<<1)] = FFTarray[unscambled128[i]].re;
+ data[(i<<1)+1]= FFTarray[unscambled128[i]].im;
+ }
+
+ wr=1.0+wpr256;
+ wi=wpi256;
+ for (i=1;i<64;i++) {+ i4=1+(i3=257-(i2=1+(i1=i+i)));
+ h1r=0.5*(data[i1]+data[i3]);
+ h1i=0.5*(data[i2]-data[i4]);
+ h2r=0.5*(data[i2]+data[i4]);
+ h2i=-0.5*(data[i1]-data[i3]);
+ t1=wr*h2r;
+ t2=wi*h2i;
+ t3=wr*h2i+wi*h2r;
+
+ data[i1]=h1r+t1-t2;
+ data[i2]=h1i+t3;
+ data[i3]=h1r-t1+t2;
+ data[i4]=-h1i+t3;
+ wtemp=wr;
+ wr=wtemp*wpr256-wi*wpi256+wr;
+ wi=wi*wpr256+wtemp*wpi256+wi;
+ }
+ data[0] = data[0]+data[1];
+ data[1] = 0;
+ data[129] = -data[129]; // hack to emulate complex FFT
+}
+
+void realft2048(double *data)
+{+ int i,i1,i2,i3,i4;
+ double h1r,h1i,h2r,h2i,t1,t2,t3;
+ double wr,wi,wtemp;
+
+ pfftw_1024(FFTarray);
+ for (i = 0; i < 1024; i++){+ data[(i<<1)] = FFTarray[unscambled1024[i]].re;
+ data[(i<<1)+1]= FFTarray[unscambled1024[i]].im;
+ }
+
+ wr=1.0+wpr2048;
+ wi=wpi2048;
+ for (i=1;i<512;i++) {+ i4=1+(i3=2049-(i2=1+(i1=i+i)));
+ h1r=0.5*(data[i1]+data[i3]);
+ h1i=0.5*(data[i2]-data[i4]);
+ h2r=0.5*(data[i2]+data[i4]);
+ h2i=-0.5*(data[i1]-data[i3]);
+ t1=wr*h2r;
+ t2=wi*h2i;
+ t3=wr*h2i+wi*h2r;
+
+ data[i1]=h1r+t1-t2;
+ data[i2]=h1i+t3;
+ data[i3]=h1r-t1+t2;
+ data[i4]=-h1i+t3;
+ wtemp=wr;
+ wr=wtemp*wpr2048-wi*wpi2048+wr;
+ wi=wi*wpr2048+wtemp*wpi2048+wi;
+ }
+ data[0] = data[0]+data[1];
+ data[1] = 0;
+ data[1025] = -data[1025]; // hack to emulate complex FFT
}
--- a/transfo.h
+++ b/transfo.h
@@ -23,15 +23,22 @@
DEFINE_PFFTW(32)
DEFINE_PFFTW(64)
DEFINE_PFFTW(128)
+DEFINE_PFFTW(256)
DEFINE_PFFTW(512)
+DEFINE_PFFTW(1024)
void make_FFT_order(void);
void make_MDCT_windows(void);
void IMDCT(fftw_real *data, int N);
void MDCT(fftw_real *data, int N);
+void realft2048(double *data);
+void realft256(double *data);
+void initrft(void);
-extern int unscambled64[64]; /* the permutation array for FFT64*/
-extern int unscambled512[512]; /* the permutation array for FFT512*/
-extern fftw_complex FFTarray[512]; /* the array for in-place FFT */
+extern int unscambled64[64]; /* the permutation array for FFT64*/
+extern int unscambled128[128]; /* the permutation array for FFT128*/
+extern int unscambled512[512]; /* the permutation array for FFT512*/
+extern int unscambled1024[1024]; /* the permutation array for FFT1024*/
+extern fftw_complex FFTarray[1024]; /* the array for in-place FFT */
#endif /* TRANSFORM_H */
--
⑨