00001
00002
00003
00004
00005
00006
00007 #ifdef STORM_USEF
00008 #include "rtmrartwt_.h"
00009 #include "drtmrartwt_.h"
00010 #include "irtmrartwt_.h"
00011 #include "artmrartwt_.h"
00012 #include "dartmrartwt_.h"
00013 #include "iartmrartwt_.h"
00014 #endif
00015
00016 #include "stormdef.h"
00017 #define INVSQRT2 STORMDEF_MATHCONST_INVSQRT2
00018
00019 void rtmrartwt(
00020 const int& Msize,
00021 const int& mmax,
00022 int& mrastep,
00023 float* mracoef,
00024 const float& datavalue
00025 ) {
00026 #ifdef STORM_USEF
00027 rtmrartwt_( &Msize, &mmax, &mrastep, mracoef, &datavalue );
00028 #else
00029 mrastep++;
00030 int mcycle = 0;
00031 while ( ( mrastep & (1<<mcycle) ) && ( mcycle < mmax ) ) { mcycle++; }
00032 float tmp=datavalue;
00033 int m = 1;
00034 float tmpold;
00035 while ( m <= mcycle ) {
00036 tmpold = mracoef[ 2*(m-1) ];
00037 mracoef[ 2*(m-1) ] = tmp;
00038 mracoef[ 2*m +1 ] = (tmpold-tmp) * INVSQRT2;
00039 tmp = (tmpold+tmp) * INVSQRT2;
00040 m++;
00041 }
00042 mracoef[ 2*(m-1) ] = tmp;
00043 #endif
00044 }
00045
00046
00047 void rtmrartwt(
00048 const int& Msize,
00049 const int& mmax,
00050 int& mrastep,
00051 double* mracoef,
00052 const double& datavalue
00053 ) {
00054 #ifdef STORM_USEF
00055 drtmrartwt_( &Msize, &mmax, &mrastep, mracoef, &datavalue );
00056 #else
00057 mrastep++;
00058 int mcycle = 0;
00059 while ( (mrastep & (1<<mcycle) ) && ( mcycle < mmax ) ) { mcycle++; }
00060 double tmp = datavalue;
00061 int m = 1;
00062 double tmpold,tmps,tmpw;
00063 while ( m <= mcycle ) {
00064 tmpold = mracoef[ 2*(m-1) ];
00065 mracoef[ 2*(m-1) ] = tmp;
00066 mracoef[ 2*m + 1 ] = (tmpold-tmp) * INVSQRT2;
00067 tmp = (tmpold+tmp) * INVSQRT2;
00068 m++;
00069 }
00070 mracoef[ 2*(m-1) ] = tmp;
00071 #endif
00072 }
00073
00074
00075 void rtmrartwt(
00076 const int& Msize,
00077 const int& mmax,
00078 int& mrastep,
00079 int* mracoef,
00080 const int& datavalue
00081 ) {
00082 #ifdef STORM_USEF
00083 irtmrartwt_( &Msize, &mmax, &mrastep, mracoef, &datavalue );
00084 #else
00085 mrastep++;
00086 int mcycle = 0;
00087 while ( (mrastep & (1<<mcycle) ) && ( mcycle < mmax ) ) { mcycle++; }
00088 int tmp = datavalue;
00089 int m = 1;
00090 int tmpold,tmps,tmpw;
00091 while ( m <= mcycle ) {
00092 tmpold = mracoef[ 2*(m-1) ];
00093 mracoef[ 2*(m-1) ] = tmp;
00094 mracoef[ 2*m + 1 ] = tmpold-tmp;
00095 tmp = tmpold + tmp;
00096 if ( (tmp >= 0) || ((tmp & 0x00000001) != 0) ) {
00097 tmp = tmp/2;
00098 } else {
00099 tmp = tmp/2 -1;
00100 }
00101 m++;
00102 }
00103 mracoef[ 2*(m-1) ] = tmp;
00104 #endif
00105 }
00106
00107
00108 void rtmrartwt(
00109 const int& Asize,
00110 const int& Msize,
00111 const int& amax,
00112 const int& mmax,
00113 int& mrastep,
00114 float* mracoef,
00115 const float* datavalue
00116 ) {
00117 #ifdef STORM_USEF
00118 artmrartwt_( &Asize, &Msize, &amax, &mmax, &mrastep, mracoef, datavalue);
00119 #else
00120 mrastep++;
00121 int mcycle = 0;
00122 while ( ( mrastep & (1<<mcycle) ) && ( mcycle < mmax ) ) { mcycle++; }
00123 int m;
00124 float tmp,tmpold,tmps,tmpw;
00125 for(int a = 0; a <= amax; a++ ) {
00126 tmp = datavalue[a];
00127 m = 1;
00128 while ( m <= mcycle ) {
00129 tmpold = mracoef[ a*2*Msize + 2*(m-1) ];
00130 mracoef[ a*2*Msize + 2*(m-1) ] = tmp;
00131 mracoef[ a*2*Msize + 2*m + 1 ] = (tmpold-tmp) * INVSQRT2;
00132 tmp = (tmpold+tmp) * INVSQRT2;
00133 m++;
00134 }
00135 mracoef[ a*2*Msize + 2*(m-1) ] = tmp;
00136 }
00137 #endif
00138 }
00139
00140
00141 void rtmrartwt(
00142 const int& Asize,
00143 const int& Msize,
00144 const int& amax,
00145 const int& mmax,
00146 int& mrastep,
00147 double* mracoef,
00148 const double* datavalue
00149 ) {
00150 #ifdef STORM_USEF
00151 dartmrartwt_( &Asize, &Msize, &amax, &mmax, &mrastep, mracoef, datavalue );
00152 #else
00153 mrastep++;
00154 int mcycle = 0;
00155 while ( ( mrastep & (1<<mcycle) ) && ( mcycle < mmax ) ) { mcycle++; }
00156 int m;
00157 double tmp,tmpold,tmps,tmpw;
00158 for(int a = 0; a <= amax; a++) {
00159 tmp = datavalue[a];
00160 m = 1;
00161 while ( m <= mcycle ) {
00162 tmpold = mracoef[ a*2*Msize + 2*(m-1) ];
00163 mracoef[ a*2*Msize + 2*(m-1) ] = tmp;
00164 mracoef[ a*2*Msize + 2*m + 1 ] = (tmpold-tmp) * INVSQRT2;
00165 tmp = (tmpold+tmp) * INVSQRT2;
00166 m++;
00167 }
00168 mracoef[ a*2*Msize + 2*(m-1) ] = tmp;
00169 }
00170 #endif
00171 }
00172
00173
00174 void rtmrartwt(
00175 const int& Asize,
00176 const int& Msize,
00177 const int& amax,
00178 const int& mmax,
00179 int& mrastep,
00180 int* mracoef,
00181 const int* datavalue
00182 ) {
00183 #ifdef STORM_USEF
00184 iartmrartwt_( &Asize, &Msize, &amax, &mmax, &mrastep, mracoef, datavalue );
00185 #else
00186 mrastep++;
00187 int mcycle = 0;
00188 while ( ( mrastep & (1<<mcycle) ) && ( mcycle < mmax ) ) { mcycle++; }
00189 int m;
00190 int tmp,tmpold;
00191 for(int a = 0; a <= amax; a++) {
00192 tmp = datavalue[a];
00193 m = 1;
00194 while ( m <= mcycle ) {
00195 tmpold = mracoef[ a*2*Msize + 2*(m-1) ];
00196 mracoef[ a*2*Msize + 2*(m-1) ] = tmp;
00197 mracoef[ a*2*Msize + 2*m + 1 ] = tmpold-tmp;
00198 tmp = tmpold + tmp;
00199 if ( (tmp >= 0) || ((tmp & 0x00000001) != 0) ) {
00200 tmp = tmp/2;
00201 } else {
00202 tmp = tmp/2-1;
00203 }
00204 m++;
00205 }
00206 mracoef[ a*2*Msize + 2*(m-1) ] = tmp;
00207 }
00208 #endif
00209 }
00210