From 69bf4dc0b00c0136f4fa909a1a7bd74bb3a0b828 Mon Sep 17 00:00:00 2001 From: Rafat Hussain Date: Sun, 29 May 2016 05:43:59 +0530 Subject: [PATCH] CCommit : CWT/ICWT added --- README.md | 2 +- header/wavelib.h | 54 + src/CMakeLists.txt | 6 + src/cwt.c | 420 ++ src/cwt.h | 29 + src/cwtmath.c | 296 ++ src/cwtmath.h | 22 + src/wavefunc.c | 210 + src/wavefunc.h | 24 + src/wavelib.c | 4913 ++++++++++++----------- src/wavelib.h | 402 +- test/cwttest.c | 109 + test/sst_nino3.dat | 504 +++ unitTests/wavelibBoostTests/tst_dwt.cpp | 85 + wavelib-doc.pdf | Bin 651731 -> 670430 bytes 15 files changed, 4560 insertions(+), 2516 deletions(-) create mode 100755 src/cwt.c create mode 100755 src/cwt.h create mode 100755 src/cwtmath.c create mode 100755 src/cwtmath.h create mode 100755 src/wavefunc.c create mode 100755 src/wavefunc.h create mode 100644 test/cwttest.c create mode 100755 test/sst_nino3.dat diff --git a/README.md b/README.md index cb891f2..844ec85 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ wavelib ======= -C Implementation of Wavelet Transform (DWT,SWT and MODWT) and Packet Transform ( Full Tree Decomposition and Best Basis DPWT). +C Implementation of Wavelet Transform (DWT,SWT and MODWT) and Packet Transform ( Full Tree Decomposition and Best Basis DWPT). Discrete Wavelet Transform Methods Implemented diff --git a/header/wavelib.h b/header/wavelib.h index 62a9f67..2399d8c 100644 --- a/header/wavelib.h +++ b/header/wavelib.h @@ -14,6 +14,16 @@ extern "C" { #define fft_type double #endif +#ifndef cplx_type +#define cplx_type double +#endif + + +typedef struct cplx_t { + cplx_type re; + cplx_type im; +} cplx_data; + typedef struct wave_set* wave_object; wave_object wave_init(char* wname); @@ -153,6 +163,34 @@ struct wpt_set{ }; +typedef struct cwt_set* cwt_object; + +cwt_object cwt_init(char* wave, double param, int siglength,double dt, int J); + +struct cwt_set{ + char wave[10];// Wavelet - morl/morlet,paul,dog/dgauss + int siglength;// Length of Input Data + int J;// Total Number of Scales + double s0;// Smallest scale. It depends on the sampling rate. s0 <= 2 * dt for most wavelets + double dt;// Sampling Rate + double dj;// Separation between scales. eg., scale = s0 * 2 ^ ( [0:N-1] *dj ) or scale = s0 *[0:N-1] * dj + char type[10];// Scale Type - Power or Linear + int pow;// Base of Power in case type = pow. Typical value is pow = 2 + int sflag; + int pflag; + int npad; + int mother; + double m;// Wavelet parameter param + double smean;// Input Signal mean + + cplx_data *output; + double *scale; + double *period; + double *coi; + double params[0]; +}; + + void dwt(wt_object wt, double *inp); void idwt(wt_object wt, double *dwtop); @@ -189,6 +227,18 @@ int getDWPTNodelength(wpt_object wt, int X); void getDWPTCoeffs(wpt_object wt, int X, int Y, double *coeffs, int N); +void setCWTScales(cwt_object wt, double s0, double dj, char *type, int power); + +void setCWTScaleVector(cwt_object wt, double *scale, int J, double s0, double dj); + +void setCWTPadding(cwt_object wt, int pad); + +void cwt(cwt_object wt, double *inp); + +void icwt(cwt_object wt, double *cwtop); + +int getCWTScaleLength(int N); + void wave_summary(wave_object obj); void wt_summary(wt_object wt); @@ -197,6 +247,8 @@ void wtree_summary(wtree_object wt); void wpt_summary(wpt_object wt); +void cwt_summary(cwt_object wt);; + void wave_free(wave_object object); void wt_free(wt_object object); @@ -205,6 +257,8 @@ void wtree_free(wtree_object object); void wpt_free(wpt_object object); +void cwt_free(cwt_object object); + #ifdef __cplusplus } diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 58f085e..758f5c3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -3,17 +3,23 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}) set(SOURCE_FILES conv.c + cwt.c + cwtmath.c hsfft.c real.c wavefilt.c + wavefunc.c wavelib.c wtmath.c ) set(HEADER_FILES conv.h + cwt.h + cwtmath.h hsfft.h real.h wavefilt.h + wavefunc.h wavelib.h wtmath.h ) diff --git a/src/cwt.c b/src/cwt.c new file mode 100755 index 0000000..6e9efb1 --- /dev/null +++ b/src/cwt.c @@ -0,0 +1,420 @@ +/* + Copyright (c) 2015, Rafat Hussain +*/ +/* +This code is a C translation ( with some modifications) of Wavelet Software provided by +C. Torrence and G. Compo, and is available at URL: http://atoc.colorado.edu/research/wavelets/''. +*/ + +#include "cwt.h" + +static int factorial2(int N) { + int factorial,i; + + factorial = 1; + + for (i = 1; i <= N;++i) { + factorial *= i; + } + + return factorial; +} + +static double factorial3(int N) { + int i; + double factorial; + + factorial = 1; + + for (i = 1; i <= N; ++i) { + factorial *= i; + } + + return factorial; +} + +double factorial(int N) { + if (N > 40) { + printf("This program is only valid for N <= 40 \n"); + return -1.0; + } + double fact[41] = { 1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800, 39916800, 479001600, 6227020800, 87178291200, 1307674368000, + 20922789888000, 355687428096000, 6402373705728000, 121645100408832000, 2432902008176640000, 51090942171709440000.0, 1124000727777607680000.0, + 25852016738884976640000.0, 620448401733239439360000.0, 15511210043330985984000000.0, 403291461126605635584000000.0, 10888869450418352160768000000.0, + 304888344611713860501504000000.0, 8841761993739701954543616000000.0, 265252859812191058636308480000000.0, 8222838654177922817725562880000000.0, + 263130836933693530167218012160000000.0, 8683317618811886495518194401280000000.0, 295232799039604140847618609643520000000.0, 10333147966386144929666651337523200000000.0, + 371993326789901217467999448150835200000000.0, 13763753091226345046315979581580902400000000.0, 523022617466601111760007224100074291200000000.0, + 20397882081197443358640281739902897356800000000.0, 815915283247897734345611269596115894272000000000.0 }; + + return fact[N]; + +} +static void wave_function(int nk, double dt,int mother, double param,double scale1, double *kwave, double pi,double *period1, + double *coi1, fft_data *daughter) { + + double norm, expnt, fourier_factor; + int k, m; + double temp; + int sign,re; + + + if (mother == 0) { + //MORLET + if (param < 0.0) { + param = 6.0; + } + norm = sqrt(2.0*pi*scale1 / dt)*pow(pi,-0.25); + + for (k = 1; k <= nk / 2 + 1; ++k) { + temp = (scale1*kwave[k-1] - param); + expnt = -0.5 * temp * temp; + daughter[k - 1].re = norm * exp(expnt); + daughter[k - 1].im = 0.0; + } + for (k = nk / 2 + 2; k <= nk; ++k) { + daughter[k - 1].re = daughter[k - 1].im = 0.0; + } + fourier_factor = (4.0*pi) / (param + sqrt(2.0 + param*param)); + *period1 = scale1*fourier_factor; + *coi1 = fourier_factor / sqrt(2.0); + } + else if (mother == 1) { + // PAUL + if (param < 0.0) { + param = 4.0; + } + m = (int)param; + norm = sqrt(2.0*pi*scale1 / dt)*(pow(2.0,(double)m) / sqrt((double)(m*factorial(2 * m - 1)))); + for (k = 1; k <= nk / 2 + 1; ++k) { + temp = scale1 * kwave[k - 1]; + expnt = - temp; + daughter[k - 1].re = norm * pow(temp,(double)m) * exp(expnt); + daughter[k - 1].im = 0.0; + } + for (k = nk / 2 + 2; k <= nk; ++k) { + daughter[k - 1].re = daughter[k - 1].im = 0.0; + } + fourier_factor = (4.0*pi) / (2.0 * m + 1.0); + *period1 = scale1*fourier_factor; + *coi1 = fourier_factor * sqrt(2.0); + } + else if (mother == 2) { + if (param < 0.0) { + param = 2.0; + } + m = (int)param; + + if (m % 2 == 0) { + re = 1; + } + else { + re = 0; + } + + if (m % 4 == 0 || m % 4 == 1) { + sign = -1; + } + else { + sign = 1; + } + + + norm = sqrt(2.0*pi*scale1 / dt)*sqrt(1.0 / gamma(m + 0.50)); + norm *= sign; + + if (re == 1) { + for (k = 1; k <= nk; ++k) { + temp = scale1 * kwave[k - 1]; + daughter[k - 1].re = norm*pow(temp,(double)m)*exp(-0.50*pow(temp,2.0)); + daughter[k - 1].im = 0.0; + } + } + else if (re == 0) { + for (k = 1; k <= nk; ++k) { + temp = scale1 * kwave[k - 1]; + daughter[k - 1].re = 0.0; + daughter[k - 1].im = norm*pow(temp, (double)m)*exp(-0.50*pow(temp, 2.0)); + } + } + fourier_factor = (2.0*pi) * sqrt(2.0 / (2.0 * m + 1.0)); + *period1 = scale1*fourier_factor; + *coi1 = fourier_factor / sqrt(2.0); + } +} + +void cwavelet(double *y, int N, double dt, int mother, double param, double s0, double dj, int jtot, int npad, + double *wave, double *scale, double *period, double *coi) { + + int i, j, k, iter; + double ymean, freq1, pi, period1, coi1; + double tmp1, tmp2; + double scale1; + double *kwave; + fft_object obj, iobj; + fft_data *ypad, *yfft,*daughter; + + pi = 4.0 * atan(1.0); + + if (npad < N) { + printf("npad must be >= N \n"); + exit(-1); + } + + obj = fft_init(npad, 1); + iobj = fft_init(npad, -1); + + ypad = (fft_data*)malloc(sizeof(fft_data)* npad); + yfft = (fft_data*)malloc(sizeof(fft_data)* npad); + daughter = (fft_data*)malloc(sizeof(fft_data)* npad); + kwave = (double*)malloc(sizeof(double)* npad); + + ymean = 0.0; + + for (i = 0; i < N; ++i) { + ymean += y[i]; + } + + ymean /= N; + + for (i = 0; i < N; ++i) { + ypad[i].re = y[i] - ymean; + ypad[i].im = 0.0; + } + + for (i = N; i < npad; ++i) { + ypad[i].re = ypad[i].im = 0.0; + } + + + // Find FFT of the input y (ypad) + + fft_exec(obj, ypad, yfft); + + for (i = 0; i < npad; ++i) { + yfft[i].re /= (double) npad; + yfft[i].im /= (double) npad; + } + + + //Construct the wavenumber array + + freq1 = 2.0*pi / ((double)npad*dt); + kwave[0] = 0.0; + + for (i = 1; i < npad / 2 + 1; ++i) { + kwave[i] = i * freq1; + } + + for (i = npad / 2 + 1; i < npad; ++i) { + kwave[i] = -kwave[npad - i ]; + } + + + // Main loop + + for (j = 1; j <= jtot; ++j) { + scale1 = scale[j - 1];// = s0*pow(2.0, (double)(j - 1)*dj); + wave_function(npad, dt, mother, param, scale1, kwave, pi,&period1,&coi1, daughter); + period[j - 1] = period1; + for (k = 0; k < npad; ++k) { + tmp1 = daughter[k].re * yfft[k].re - daughter[k].im * yfft[k].im; + tmp2 = daughter[k].re * yfft[k].im + daughter[k].im * yfft[k].re; + daughter[k].re = tmp1; + daughter[k].im = tmp2; + } + fft_exec(iobj, daughter, ypad); + iter = 2 * (j - 1) * N; + for (i = 0; i < N; ++i) { + wave[iter + 2 * i] = ypad[i].re; + wave[iter + 2 * i + 1] = ypad[i].im; + } + } + + + for (i = 1; i <= (N + 1) / 2; ++i) { + coi[i - 1] = coi1 * dt * ((double)i - 1.0); + coi[N - i] = coi[i - 1]; + } + + + + free(kwave); + free(ypad); + free(yfft); + free(daughter); + + free_fft(obj); + free_fft(iobj); + +} + +void psi0(int mother, double param,double *val,int *real) { + double pi,coeff; + int m,sign; + + m = (int)param; + pi = 4.0 * atan(1.0); + + if (mother == 0) { + // Morlet + *val = 1.0 / sqrt(sqrt(pi)); + *real = 1; + } + else if (mother == 1) { + //Paul + if (m % 2 == 0) { + *real = 1; + } + else { + *real = 0; + } + + if (m % 4 == 0 || m % 4 == 1) { + sign = 1; + } + else { + sign = -1; + } + *val = sign * pow(2.0, (double)m) * factorial(m) / (sqrt(pi * factorial(2 * m))); + + } + else if (mother == 2) { + // D.O.G + *real = 1; + + if (m % 2 == 0) { + if (m % 4 == 0) { + sign = -1; + } + else { + sign = 1; + } + coeff = sign * pow(2.0, (double)m / 2) / gamma(0.5); + *val = coeff * gamma(((double)m + 1.0) / 2.0) / sqrt(gamma(m + 0.50)); + } + else { + *val = 0; + } + } +} + +static int maxabs(double *array,int N) { + double maxval,temp; + int i,index; + maxval = 0.0; + index = -1; + + for (i = 0; i < N; ++i) { + temp = fabs(array[i]); + if (temp >= maxval) { + maxval = temp; + index = i; + } + } + + return index; +} + + +double cdelta(int mother, double param, double psi0 ) { + int N,i,j,iter; + double *delta, *scale,*period,*wave,*coi,*mval; + double den,cdel; + double subscale,dt,dj,s0; + int jtot; + int maxarr; + + subscale = 8.0; + dt = 0.25; + if (mother == 0) { + N = 16; + s0 = dt/4; + } + else if (mother == 1) { + N = 16; + s0 = dt / 4.0; + } + else if (mother == 2) + { + s0 = dt/8.0; + N = 256; + if (param == 2.0) { + subscale = 16.0; + s0 = dt / 16.0; + N = 2048; + } + } + + dj = 1.0 / subscale; + jtot = 16 * (int) subscale; + + delta = (double*)malloc(sizeof(double)* N); + wave = (double*)malloc(sizeof(double)* 2 * N * jtot); + coi = (double*)malloc(sizeof(double)* N); + scale = (double*)malloc(sizeof(double)* jtot); + period = (double*)malloc(sizeof(double)* jtot); + mval = (double*)malloc(sizeof(double)* N); + + + delta[0] = 1; + + for (i = 1; i < N; ++i) { + delta[i] = 0; + } + + for (i = 0; i < jtot; ++i) { + scale[i] = s0*pow(2.0, (double)(i)*dj); + } + + cwavelet(delta, N, dt, mother, param, s0, dj, jtot, N, wave, scale, period, coi); + + for (i = 0; i < N; ++i) { + mval[i] = 0; + } + + for (j = 0; j < jtot; ++j) { + iter = 2 * j * N; + den = sqrt(scale[j]); + for (i = 0; i < N; ++i) { + mval[i] += wave[iter + 2 * i]/den; + } + } + + + maxarr = maxabs(mval, N); + + cdel = sqrt(dt) * dj * mval[maxarr] / psi0; + + free(delta); + free(wave); + + free(scale); + free(period); + free(coi); + free(mval); + + return cdel; +} + +void icwavelet(double *wave, int N, double *scale,int jtot,double dt,double dj,double cdelta,double psi0,double *oup) { + int i, j,iter; + double den, coeff; + + coeff = sqrt(dt) * dj / (cdelta *psi0); + + for (i = 0; i < N; ++i) { + oup[i] = 0.0; + } + + for (j = 0; j < jtot; ++j) { + iter = 2 * j * N; + den = sqrt(scale[j]); + for (i = 0; i < N; ++i) { + oup[i] += wave[iter + 2 * i] / den; + } + } + + for (i = 0; i < N; ++i) { + oup[i] *= coeff; + } +} diff --git a/src/cwt.h b/src/cwt.h new file mode 100755 index 0000000..ed9ea9a --- /dev/null +++ b/src/cwt.h @@ -0,0 +1,29 @@ +#ifndef CWT_H_ +#define CWT_H_ + +#include "wavefunc.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void cwavelet(double *y, int N, double dt, int mother, double param, double s0, double dj, int jtot, int npad, + double *wave, double *scale, double *period, double *coi); + +void psi0(int mother, double param, double *val, int *real); + +double factorial(int N); + +double cdelta(int mother, double param, double psi0); + +void icwavelet(double *wave, int N, double *scale, int jtot, double dt, double dj, double cdelta, double psi0, double *oup); + + +#ifdef __cplusplus +} +#endif + + +#endif /* WAVELIB_H_ */ + + diff --git a/src/cwtmath.c b/src/cwtmath.c new file mode 100755 index 0000000..490c95f --- /dev/null +++ b/src/cwtmath.c @@ -0,0 +1,296 @@ +#include "cwtmath.h" + +static void nsfft_fd(fft_object obj, fft_data *inp, fft_data *oup,double lb,double ub,double *w) { + int M,N,i,j,L; + double delta,den,theta,tempr,tempi,plb; + double *temp1,*temp2; + + N = obj->N; + L = N/2; + //w = (double*)malloc(sizeof(double)*N); + + M = divideby(N, 2); + + if (M == 0) { + printf("The Non-Standard FFT Length must be a power of 2"); + exit(1); + } + + temp1 = (double*)malloc(sizeof(double)*L); + temp2 = (double*)malloc(sizeof(double)*L); + + delta = (ub - lb)/ N; + j = -N; + den = 2 * (ub-lb); + + for(i = 0; i < N;++i) { + w[i] = (double)j/den; + j += 2; + } + + fft_exec(obj,inp,oup); + + + for (i = 0; i < L; ++i) { + temp1[i] = oup[i].re; + temp2[i] = oup[i].im; + } + + for (i = 0; i < N - L; ++i) { + oup[i].re = oup[i + L].re; + oup[i].im = oup[i + L].im; + } + + for (i = 0; i < L; ++i) { + oup[N - L + i].re = temp1[i]; + oup[N - L + i].im = temp2[i]; + } + + plb = PI2 * lb; + + for(i = 0; i < N;++i) { + tempr = oup[i].re; + tempi = oup[i].im; + theta = w[i] * plb; + + oup[i].re = delta * (tempr*cos(theta) + tempi*sin(theta)); + oup[i].im = delta * (tempi*cos(theta) - tempr*sin(theta)); + } + + + //free(w); + free(temp1); + free(temp2); +} + +static void nsfft_bk(fft_object obj, fft_data *inp, fft_data *oup,double lb,double ub,double *t) { + int M,N,i,j,L; + double *w; + double delta,den,plb,theta; + double *temp1,*temp2; + fft_data *inpt; + + N = obj->N; + L = N/2; + + M = divideby(N, 2); + + if (M == 0) { + printf("The Non-Standard FFT Length must be a power of 2"); + exit(1); + } + + temp1 = (double*)malloc(sizeof(double)*L); + temp2 = (double*)malloc(sizeof(double)*L); + w = (double*)malloc(sizeof(double)*N); + inpt = (fft_data*) malloc (sizeof(fft_data) * N); + + delta = (ub - lb)/ N; + j = -N; + den = 2 * (ub-lb); + + for(i = 0; i < N;++i) { + w[i] = (double)j/den; + j += 2; + } + + plb = PI2 * lb; + + for(i = 0; i < N;++i) { + theta = w[i] * plb; + + inpt[i].re = (inp[i].re*cos(theta) - inp[i].im*sin(theta))/delta; + inpt[i].im = (inp[i].im*cos(theta) + inp[i].re*sin(theta))/delta; + } + + for (i = 0; i < L; ++i) { + temp1[i] = inpt[i].re; + temp2[i] = inpt[i].im; + } + + for (i = 0; i < N - L; ++i) { + inpt[i].re = inpt[i + L].re; + inpt[i].im = inpt[i + L].im; + } + + for (i = 0; i < L; ++i) { + inpt[N - L + i].re = temp1[i]; + inpt[N - L + i].im = temp2[i]; + } + + fft_exec(obj,inpt,oup); + + for(i = 0; i < N;++i) { + t[i] = lb + i*delta; + } + + free(w); + free(temp1); + free(temp2); + free(inpt); +} + +void nsfft_exec(fft_object obj, fft_data *inp, fft_data *oup,double lb,double ub,double *w) { + if (obj->sgn == 1) { + nsfft_fd(obj,inp,oup,lb,ub,w); + } else if (obj->sgn == -1) { + nsfft_bk(obj,inp,oup,lb,ub,w); + } +} + +static double fix(double x) { + // Rounds to the integer nearest to zero + if (x >= 0.) { + return floor(x); + } else { + return ceil(x); + } +} + +int nint(double N) { + int i; + + i = (int)(N + 0.49999); + + return i; +} + +double gamma(double x) { + /* + * This C program code is based on W J Cody's fortran code. + * http://www.netlib.org/specfun/gamma + * + * References: + "An Overview of Software Development for Special Functions", + W. J. Cody, Lecture Notes in Mathematics, 506, + Numerical Analysis Dundee, 1975, G. A. Watson (ed.), + Springer Verlag, Berlin, 1976. + + Computer Approximations, Hart, Et. Al., Wiley and sons, New York, 1968. + */ + + // numerator and denominator coefficients for 1 <= x <= 2 + + double y,oup,fact,sum,y2,yi,z,nsum,dsum; + int swi,n,i; + + double spi = 0.9189385332046727417803297; + double pi = 3.1415926535897932384626434; + double xmax = 171.624e+0; + double xinf = 1.79e308; + double eps = 2.22e-16; + double xninf = 1.79e-308; + + double num[8] = { -1.71618513886549492533811e+0, + 2.47656508055759199108314e+1, + -3.79804256470945635097577e+2, + 6.29331155312818442661052e+2, + 8.66966202790413211295064e+2, + -3.14512729688483675254357e+4, + -3.61444134186911729807069e+4, + 6.64561438202405440627855e+4 }; + + double den[8] = { -3.08402300119738975254353e+1, + 3.15350626979604161529144e+2, + -1.01515636749021914166146e+3, + -3.10777167157231109440444e+3, + 2.25381184209801510330112e+4, + 4.75584627752788110767815e+3, + -1.34659959864969306392456e+5, + -1.15132259675553483497211e+5 }; + + // Coefficients for Hart's Minimax approximation x >= 12 + + + double c[7] = { -1.910444077728e-03, + 8.4171387781295e-04, + -5.952379913043012e-04, + 7.93650793500350248e-04, + -2.777777777777681622553e-03, + 8.333333333333333331554247e-02, + 5.7083835261e-03 }; + + y = x; + swi = 0; + fact = 1.0; + n = 0; + + + if ( y < 0.) { + // Negative x + y = -x; + yi = fix(y); + oup = y - yi; + + if (oup != 0.0) { + if (yi != fix(yi * .5) * 2.) { + swi = 1; + } + fact = -pi / sin(pi * oup); + y += 1.; + } else { + return xinf; + } + } + + if (y < eps) { + if (y >= xninf) { + oup = 1.0/y; + } else { + return xinf; + } + + } else if (y < 12.) { + yi = y; + if ( y < 1.) { + z = y; + y += 1.; + } else { + n = ( int ) y - 1; + y -= ( double ) n; + z = y - 1.0; + } + nsum = 0.; + dsum = 1.; + for (i = 0; i < 8; ++i) { + nsum = (nsum + num[i]) * z; + dsum = dsum * z + den[i]; + } + oup = nsum / dsum + 1.; + + if (yi < y) { + + oup /= yi; + } else if (yi > y) { + + for (i = 0; i < n; ++i) { + oup *= y; + y += 1.; + } + + } + + } else { + if (y <= xmax) { + y2 = y * y; + sum = c[6]; + for (i = 0; i < 6; ++i) { + sum = sum / y2 + c[i]; + } + sum = sum / y - y + spi; + sum += (y - .5) * log(y); + oup = exp(sum); + } else { + return(xinf); + } + } + + if (swi) { + oup = -oup; + } + if (fact != 1.) { + oup = fact / oup; + } + + return oup; +} diff --git a/src/cwtmath.h b/src/cwtmath.h new file mode 100755 index 0000000..f989394 --- /dev/null +++ b/src/cwtmath.h @@ -0,0 +1,22 @@ +#ifndef CWTMATH_H_ +#define CWTMATH_H_ + +#include "wtmath.h" +#include "hsfft.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void nsfft_exec(fft_object obj, fft_data *inp, fft_data *oup,double lb,double ub,double *w);// lb -lower bound, ub - upper bound, w - time or frequency grid (Size N) + +double gamma(double x); + +int nint(double N); + +#ifdef __cplusplus +} +#endif + + +#endif /* WAVELIB_H_ */ diff --git a/src/wavefunc.c b/src/wavefunc.c new file mode 100755 index 0000000..6fa2752 --- /dev/null +++ b/src/wavefunc.c @@ -0,0 +1,210 @@ +#include "wavefunc.h" + +void meyer(int N,double lb,double ub,double *phi,double *psi,double *tgrid) { + int M,i; + double *w; + double delta,j; + double theta,x,x2,x3,x4,v,cs,sn; + double wf; + fft_data *phiw,*psiw,*oup; + fft_object obj; + + M = divideby(N, 2); + + if (M == 0) { + printf("Size of Wavelet must be a power of 2"); + exit(1); + } + if (lb >= ub) { + printf("upper bound must be greater than lower bound"); + exit(1); + } + + obj = fft_init(N,-1); + w = (double*)malloc(sizeof(double)*N); + phiw = (fft_data*) malloc (sizeof(fft_data) * N); + psiw = (fft_data*) malloc (sizeof(fft_data) * N); + oup = (fft_data*) malloc (sizeof(fft_data) * N); + + delta = 2 * (ub-lb) / PI2; + + j = (double) N; + j *= -1.0; + + for(i = 0; i < N;++i) { + w[i] = j / delta; + j += 2.0; + psiw[i].re = psiw[i].im = 0.0; + phiw[i].re = phiw[i].im = 0.0; + } + + + for(i = 0; i < N;++i) { + wf = fabs(w[i]); + if (wf <= PI2/3.0) { + phiw[i].re = 1.0; + } + if (wf > PI2/3.0 && wf <= 2 * PI2 / 3.0) { + x = (3 * wf / PI2) - 1.0; + x2 = x*x; + x3 = x2 * x; + x4 = x3 *x; + v = x4 *(35 - 84*x + 70*x2 - 20*x3); + theta = v * PI2 / 4.0; + cs = cos(theta); + sn = sin(theta); + + phiw[i].re = cs; + psiw[i].re = cos(w[i]/2.0) * sn; + psiw[i].im = sin(w[i]/2.0) * sn; + } + if (wf > 2.0 * PI2/3.0 && wf <= 4 * PI2 / 3.0) { + x = (1.5 * wf / PI2) - 1.0; + x2 = x*x; + x3 = x2 * x; + x4 = x3 *x; + v = x4 *(35 - 84*x + 70*x2 - 20*x3); + theta = v * PI2 / 4.0; + cs = cos(theta); + + psiw[i].re = cos(w[i]/2.0) * cs; + psiw[i].im = sin(w[i]/2.0) * cs; + } + } + + + nsfft_exec(obj,phiw,oup,lb,ub,tgrid); + + + for(i = 0; i < N;++i) { + phi[i] = oup[i].re/N; + } + + nsfft_exec(obj,psiw,oup,lb,ub,tgrid); + + + for(i = 0; i < N;++i) { + psi[i] = oup[i].re/N; + } + + + + free(oup); + free(phiw); + free(psiw); + free(w); +} + +void gauss(int N,int p,double lb,double ub,double *psi,double *t) { + double delta,num,den,t2,t4; + int i; + + if (lb >= ub) { + printf("upper bound must be greater than lower bound"); + exit(1); + } + + t[0] = lb; + t[N-1] = ub; + delta = (ub - lb) / (N-1); + for(i = 1; i < N-1;++i) { + t[i] = lb + delta * i; + } + + den = sqrt(gamma(p+0.5)); + + if ((p+1)%2 == 0) { + num = 1.0; + } else { + num = -1.0; + } + + num /= den; + + //printf("\n%g\n",num); + + if (p == 1) { + for(i = 0; i < N;++i) { + psi[i] = -t[i] * exp(- t[i] * t[i]/2.0) * num; + } + } else if (p == 2) { + for(i = 0; i < N;++i) { + t2 = t[i] * t[i]; + psi[i] = (-1.0 + t2) * exp(- t2/2.0) * num; + } + } else if (p == 3) { + for(i = 0; i < N;++i) { + t2 = t[i] * t[i]; + psi[i] = t[i] * (3.0 - t2) * exp(- t2/2.0) * num; + } + } else if (p == 4) { + for(i = 0; i < N;++i) { + t2 = t[i] * t[i]; + psi[i] = (t2 * t2 - 6.0 * t2 + 3.0) * exp(- t2/2.0) * num; + } + } else if (p == 5) { + for(i = 0; i < N;++i) { + t2 = t[i] * t[i]; + psi[i] = t[i] * (-t2 * t2 + 10.0 * t2 - 15.0) * exp(- t2/2.0) * num; + } + } else if (p == 6) { + for(i = 0; i < N;++i) { + t2 = t[i] * t[i]; + psi[i] = (t2 * t2 * t2 - 15.0 * t2 * t2 + 45.0 * t2 - 15.0) * exp(- t2/2.0) * num; + } + } else if (p == 7) { + for(i = 0; i < N;++i) { + t2 = t[i] * t[i]; + psi[i] = t[i] * (-t2 * t2 * t2 + 21.0 * t2 * t2 - 105.0 * t2 + 105.0) * exp(- t2/2.0) * num; + } + } else if (p == 8) { + for(i = 0; i < N;++i) { + t2 = t[i] * t[i]; + t4 = t2 * t2; + psi[i] = (t4 * t4 - 28.0 * t4 * t2 + 210.0 * t4 - 420.0 * t2 + 105.0) * exp(- t2/2.0) * num; + } + } else if (p == 9) { + for(i = 0; i < N;++i) { + t2 = t[i] * t[i]; + t4 = t2 * t2; + psi[i] = t[i] * (- t4 * t4 + 36.0 * t4 * t2 - 378.0 * t4 + 1260.0 * t2 - 945.0) * exp(- t2/2.0) * num; + } + } else if (p == 10) { + for(i = 0; i < N;++i) { + t2 = t[i] * t[i]; + t4 = t2 * t2; + psi[i] = (t4 * t4 * t2 - 45.0 * t4 * t4 + 630.0 * t4 * t2 - 3150.0 * t4 + 4725.0 * t2 - 945.0) * exp(- t2/2.0) * num; + } + } else { + printf("\n The Gaussian Derivative Wavelet is only available for Derivatives 1 to 10"); + exit(1); + } + + + +} + +void mexhat(int N,double lb,double ub,double *psi,double *t) { + gauss(N,2,lb,ub,psi,t); +} + +void morlet(int N,double lb,double ub,double *psi,double *t) { + int i; + double delta; + + if (lb >= ub) { + printf("upper bound must be greater than lower bound"); + exit(1); + } + + t[0] = lb; + t[N-1] = ub; + delta = (ub - lb) / (N-1); + for(i = 1; i < N-1;++i) { + t[i] = lb + delta * i; + } + + for(i = 0; i < N;++i) { + psi[i] = exp(- t[i] * t[i] / 2.0) * cos(5 * t[i]); + } +} diff --git a/src/wavefunc.h b/src/wavefunc.h new file mode 100755 index 0000000..2aa6ead --- /dev/null +++ b/src/wavefunc.h @@ -0,0 +1,24 @@ +#ifndef WAVEFUNC_H_ +#define WAVEFUNC_H_ + +#include "cwtmath.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void meyer(int N,double lb,double ub,double *phi,double *psi,double *tgrid); + +void gauss(int N,int p,double lb,double ub,double *psi,double *t); + +void mexhat(int N,double lb,double ub,double *psi,double *t); + +void morlet(int N,double lb,double ub,double *psi,double *t); + + +#ifdef __cplusplus +} +#endif + + +#endif /* WAVEFUNC_H_ */ diff --git a/src/wavelib.c b/src/wavelib.c index c2d7666..0ce0023 100644 --- a/src/wavelib.c +++ b/src/wavelib.c @@ -1,1594 +1,1797 @@ -/* - Copyright (c) 2014, Rafat Hussain -*/ - -#include "wavelib.h" - -wave_object wave_init(char* wname) { - wave_object obj = NULL; - int retval; - retval = 0; - - if (wname != NULL) { - retval = filtlength(wname); - //obj->filtlength = retval; - //strcopy(obj->wname, wname); - } - - obj = (wave_object)malloc(sizeof(struct wave_set) + sizeof(double) * 4 * retval); - - obj->filtlength = retval; - obj->lpd_len = obj->hpd_len = obj->lpr_len = obj->hpr_len = obj->filtlength; - strcpy(obj->wname, wname); - if (wname != NULL) { - filtcoef(wname,obj->params,obj->params+retval,obj->params+2*retval,obj->params+3*retval); - } - obj->lpd = &obj->params[0]; - obj->hpd = &obj->params[retval]; - obj->lpr = &obj->params[2 * retval]; - obj->hpr = &obj->params[3 * retval]; - return obj; -} - -wt_object wt_init(wave_object wave,char* method, int siglength,int J) { - int size,i,MaxIter; - wt_object obj = NULL; - - size = wave->filtlength; - - if (J > 100) { - printf("\n The Decomposition Iterations Cannot Exceed 100. Exiting \n"); - exit(-1); - } - - MaxIter = wmaxiter(siglength, size); - - if (J > MaxIter) { - printf("\n Error - The Signal Can only be iterated %d times using this wavelet. Exiting\n",MaxIter); - exit(-1); - } - - if (method == NULL) { - obj = (wt_object)malloc(sizeof(struct wt_set) + sizeof(double)* (siglength + 2 * J * (size + 1))); - obj->outlength = siglength + 2 * J * (size + 1); // Default - strcpy(obj->ext, "sym"); // Default - } - else if (!strcmp(method, "dwt") || !strcmp(method, "DWT")) { - obj = (wt_object)malloc(sizeof(struct wt_set) + sizeof(double)* (siglength + 2 * J * (size + 1))); - obj->outlength = siglength + 2 * J * (size + 1); // Default - strcpy(obj->ext, "sym"); // Default - } - else if (!strcmp(method, "swt") || !strcmp(method, "SWT")) { - if (!testSWTlength(siglength, J)) { - printf("\n For SWT the signal length must be a multiple of 2^J. \n"); - exit(-1); - } - - obj = (wt_object)malloc(sizeof(struct wt_set) + sizeof(double)* (siglength * (J + 1))); - obj->outlength = siglength * (J + 1); // Default - strcpy(obj->ext, "per"); // Default - } - else if (!strcmp(method, "modwt") || !strcmp(method, "MODWT")) { - - if (!strstr(wave->wname,"db")) { - if (!strstr(wave->wname, "sym")) { - if (!strstr(wave->wname, "coif")) { - printf("\n MODWT is only implemented for orthogonal wavelet families - db, sym and coif \n"); - exit(-1); - } - } - } - - obj = (wt_object)malloc(sizeof(struct wt_set) + sizeof(double)* (siglength * (J + 1))); - obj->outlength = siglength * (J + 1); // Default - strcpy(obj->ext, "per"); // Default - } - - obj->wave = wave; - obj->siglength = siglength; - obj->J = J; - obj->MaxIter = MaxIter; - strcpy(obj->method, method); - - if (siglength % 2 == 0) { - obj->even = 1; - } - else { - obj->even = 0; - } - - obj->cobj = NULL; - - strcpy(obj->cmethod, "direct"); // Default - obj->cfftset = 0; - obj->lenlength = J + 2; - obj->output = &obj->params[0]; - if (!strcmp(method, "dwt") || !strcmp(method, "DWT")) { - for (i = 0; i < siglength + 2 * J * (size + 1); ++i) { - obj->params[i] = 0.0; - } - } - else if (!strcmp(method, "swt") || !strcmp(method, "SWT") || !strcmp(method, "modwt") || !strcmp(method, "MODWT")) { - for (i = 0; i < siglength * (J + 1); ++i) { - obj->params[i] = 0.0; - } - } - //wave_summary(obj->wave); - - return obj; -} - -wtree_object wtree_init(wave_object wave, int siglength,int J) { - int size,i,MaxIter,temp,temp2,elength,nodes; - wtree_object obj = NULL; - - size = wave->filtlength; - - if (J > 100) { - printf("\n The Decomposition Iterations Cannot Exceed 100. Exiting \n"); - exit(-1); - } - - - MaxIter = wmaxiter(siglength, size); - if (J > MaxIter) { - printf("\n Error - The Signal Can only be iterated %d times using this wavelet. Exiting\n", MaxIter); - exit(-1); - } - temp = 1; - elength = 0; - nodes = 0; - for(i = 0; i < J;++i) { - temp *= 2; - nodes += temp; - temp2 = (size - 2) * (temp - 1); - elength += temp2; - } - - obj = (wtree_object)malloc(sizeof(struct wtree_set) + sizeof(double)* (siglength * (J + 1) + elength + nodes + J + 1)); - obj->outlength = siglength * (J + 1) + elength; - strcpy(obj->ext, "sym"); - - obj->wave = wave; - obj->siglength = siglength; - obj->J = J; - obj->MaxIter = MaxIter; - strcpy(obj->method, "dwt"); - - if (siglength % 2 == 0) { - obj->even = 1; - } - else { - obj->even = 0; - } - - obj->cobj = NULL; - obj->nodes = nodes; - - obj->cfftset = 0; - obj->lenlength = J + 2; - obj->output = &obj->params[0]; - obj->nodelength = (int*) &obj->params[siglength * (J + 1) + elength]; - obj->coeflength = (int*)&obj->params[siglength * (J + 1) + elength + nodes]; - - for (i = 0; i < siglength * (J + 1) + elength + nodes + J + 1; ++i) { - obj->params[i] = 0.0; - } - - //wave_summary(obj->wave); - - return obj; -} - -wpt_object wpt_init(wave_object wave, int siglength, int J) { - int size, i, MaxIter, temp, nodes,elength,p2,N,lp; - wpt_object obj = NULL; - - size = wave->filtlength; - - if (J > 100) { - printf("\n The Decomposition Iterations Cannot Exceed 100. Exiting \n"); - exit(-1); - } - - - MaxIter = wmaxiter(siglength, size); - if (J > MaxIter) { - printf("\n Error - The Signal Can only be iterated %d times using this wavelet. Exiting\n", MaxIter); - exit(-1); - } - temp = 1; - nodes = 0; - for (i = 0; i < J; ++i) { - temp *= 2; - nodes += temp; - } - - i = J; - p2 = 2; - N = siglength; - lp = size; - elength = 0; - while (i > 0) { - N = N + lp - 2; - N = (int)ceil((double)N / 2.0); - elength = p2 * N; - i--; - p2 *= 2; - } - //printf("elength %d", elength); - - obj = (wpt_object)malloc(sizeof(struct wpt_set) + sizeof(double)* (elength + 4 * nodes + 2 * J + 6)); - obj->outlength = siglength + 2 * (J + 1) * (size + 1); - strcpy(obj->ext, "sym"); - strcpy(obj->entropy, "shannon"); - obj->eparam = 0.0; - - obj->wave = wave; - obj->siglength = siglength; - obj->J = J; - obj->MaxIter = MaxIter; - - if (siglength % 2 == 0) { - obj->even = 1; - } - else { - obj->even = 0; - } - - obj->cobj = NULL; - obj->nodes = nodes; - - obj->lenlength = J + 2; - obj->output = &obj->params[0]; - obj->costvalues = &obj->params[elength]; - obj->basisvector = &obj->params[elength + nodes + 1]; - obj->nodeindex = (int*)&obj->params[elength + 2*nodes + 2]; - obj->numnodeslevel = (int*)&obj->params[elength + 4 * nodes + 4]; - obj->coeflength = (int*)&obj->params[elength + 4 * nodes + J + 5]; - - for (i = 0; i < elength + 4 * nodes + 2 * J + 6; ++i) { - obj->params[i] = 0.0; - } - - //wave_summary(obj->wave); - - return obj; -} - - -static void wconv(wt_object wt, double *sig, int N, double *filt, int L, double *oup) { - if (!strcmp(wt->cmethod,"direct")) { - conv_direct(sig, N, filt, L, oup); - } - else if (!strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT")) { - if (wt->cfftset == 0) { - wt->cobj = conv_init(N, L); - conv_fft(wt->cobj, sig, filt, oup); - free_conv(wt->cobj); - } - else { - conv_fft(wt->cobj, sig, filt, oup); - } - } - else { - printf("Convolution Only accepts two methods - direct and fft"); - exit(-1); - } -} - - -static void dwt_per(wt_object wt, double *inp, int N, double *cA, int len_cA, double *cD, int len_cD) { - int l,l2,isodd,i,t,len_avg; - - len_avg = wt->wave->lpd_len; - l2 = len_avg / 2; - isodd = N % 2; - - for (i = 0; i < len_cA; ++i) { - t = 2 * i + l2; - cA[i] = 0.0; - cD[i] = 0.0; - for (l = 0; l < len_avg; ++l) { - if ((t - l) >= l2 && (t - l) < N) { - cA[i] += wt->wave->lpd[l] * inp[t - l]; - cD[i] += wt->wave->hpd[l] * inp[t - l]; - } - else if ((t - l) < l2 && (t - l) >= 0) { - cA[i] += wt->wave->lpd[l] * inp[t - l]; - cD[i] += wt->wave->hpd[l] * inp[t - l]; - } - else if ((t - l) < 0 && isodd == 0) { - cA[i] += wt->wave->lpd[l] * inp[t - l + N]; - cD[i] += wt->wave->hpd[l] * inp[t - l + N]; - } - else if ((t - l) < 0 && isodd == 1) { - if ((t - l) != -1) { - cA[i] += wt->wave->lpd[l] * inp[t - l + N + 1]; - cD[i] += wt->wave->hpd[l] * inp[t - l + N + 1]; - } - else { - cA[i] += wt->wave->lpd[l] * inp[N - 1]; - cD[i] += wt->wave->hpd[l] * inp[N - 1]; - } - } - else if ((t - l) >= N && isodd == 0) { - cA[i] += wt->wave->lpd[l] * inp[t - l - N]; - cD[i] += wt->wave->hpd[l] * inp[t - l - N]; - } - else if ((t - l) >= N && isodd == 1) { - if (t - l != N) { - cA[i] += wt->wave->lpd[l] * inp[t - l - (N + 1)]; - cD[i] += wt->wave->hpd[l] * inp[t - l - (N + 1)]; - } - else { - cA[i] += wt->wave->lpd[l] * inp[N - 1]; - cD[i] += wt->wave->hpd[l] * inp[N - 1]; - } - } - - } - } - - - -} - -static void wtree_per(wtree_object wt, double *inp, int N, double *cA, int len_cA, double *cD, int len_cD) { - int l, l2, isodd, i, t, len_avg; - - len_avg = wt->wave->lpd_len; - l2 = len_avg / 2; - isodd = N % 2; - - for (i = 0; i < len_cA; ++i) { - t = 2 * i + l2; - cA[i] = 0.0; - cD[i] = 0.0; - for (l = 0; l < len_avg; ++l) { - if ((t - l) >= l2 && (t - l) < N) { - cA[i] += wt->wave->lpd[l] * inp[t - l]; - cD[i] += wt->wave->hpd[l] * inp[t - l]; - } - else if ((t - l) < l2 && (t - l) >= 0) { - cA[i] += wt->wave->lpd[l] * inp[t - l]; - cD[i] += wt->wave->hpd[l] * inp[t - l]; - } - else if ((t - l) < 0 && isodd == 0) { - cA[i] += wt->wave->lpd[l] * inp[t - l + N]; - cD[i] += wt->wave->hpd[l] * inp[t - l + N]; - } - else if ((t - l) < 0 && isodd == 1) { - if ((t - l) != -1) { - cA[i] += wt->wave->lpd[l] * inp[t - l + N + 1]; - cD[i] += wt->wave->hpd[l] * inp[t - l + N + 1]; - } - else { - cA[i] += wt->wave->lpd[l] * inp[N - 1]; - cD[i] += wt->wave->hpd[l] * inp[N - 1]; - } - } - else if ((t - l) >= N && isodd == 0) { - cA[i] += wt->wave->lpd[l] * inp[t - l - N]; - cD[i] += wt->wave->hpd[l] * inp[t - l - N]; - } - else if ((t - l) >= N && isodd == 1) { - if (t - l != N) { - cA[i] += wt->wave->lpd[l] * inp[t - l - (N + 1)]; - cD[i] += wt->wave->hpd[l] * inp[t - l - (N + 1)]; - } - else { - cA[i] += wt->wave->lpd[l] * inp[N - 1]; - cD[i] += wt->wave->hpd[l] * inp[N - 1]; - } - } - - } - } - - - -} - -static void dwpt_per(wpt_object wt, double *inp, int N, double *cA, int len_cA, double *cD, int len_cD) { - int l, l2, isodd, i, t, len_avg; - - len_avg = wt->wave->lpd_len; - l2 = len_avg / 2; - isodd = N % 2; - - for (i = 0; i < len_cA; ++i) { - t = 2 * i + l2; - cA[i] = 0.0; - cD[i] = 0.0; - for (l = 0; l < len_avg; ++l) { - if ((t - l) >= l2 && (t - l) < N) { - cA[i] += wt->wave->lpd[l] * inp[t - l]; - cD[i] += wt->wave->hpd[l] * inp[t - l]; - } - else if ((t - l) < l2 && (t - l) >= 0) { - cA[i] += wt->wave->lpd[l] * inp[t - l]; - cD[i] += wt->wave->hpd[l] * inp[t - l]; - } - else if ((t - l) < 0 && isodd == 0) { - cA[i] += wt->wave->lpd[l] * inp[t - l + N]; - cD[i] += wt->wave->hpd[l] * inp[t - l + N]; - } - else if ((t - l) < 0 && isodd == 1) { - if ((t - l) != -1) { - cA[i] += wt->wave->lpd[l] * inp[t - l + N + 1]; - cD[i] += wt->wave->hpd[l] * inp[t - l + N + 1]; - } - else { - cA[i] += wt->wave->lpd[l] * inp[N - 1]; - cD[i] += wt->wave->hpd[l] * inp[N - 1]; - } - } - else if ((t - l) >= N && isodd == 0) { - cA[i] += wt->wave->lpd[l] * inp[t - l - N]; - cD[i] += wt->wave->hpd[l] * inp[t - l - N]; - } - else if ((t - l) >= N && isodd == 1) { - if (t - l != N) { - cA[i] += wt->wave->lpd[l] * inp[t - l - (N + 1)]; - cD[i] += wt->wave->hpd[l] * inp[t - l - (N + 1)]; - } - else { - cA[i] += wt->wave->lpd[l] * inp[N - 1]; - cD[i] += wt->wave->hpd[l] * inp[N - 1]; - } - } - - } - } - - - -} - -static void dwt_sym(wt_object wt, double *inp, int N, double *cA, int len_cA, double *cD, int len_cD) { - int i,l, t, len_avg; - - len_avg = wt->wave->lpd_len; - - for (i = 0; i < len_cA; ++i) { - t = 2 * i + 1; - cA[i] = 0.0; - cD[i] = 0.0; - for (l = 0; l < len_avg; ++l) { - if ((t - l) >= 0 && (t - l) < N) { - cA[i] += wt->wave->lpd[l] * inp[t - l]; - cD[i] += wt->wave->hpd[l] * inp[t - l]; - } - else if ((t - l) < 0) { - cA[i] += wt->wave->lpd[l] * inp[-t + l - 1]; - cD[i] += wt->wave->hpd[l] * inp[-t + l - 1]; - } - else if ((t - l) >= N) { - cA[i] += wt->wave->lpd[l] * inp[2 * N - t + l - 1]; - cD[i] += wt->wave->hpd[l] * inp[2 * N - t + l - 1]; - } - - } - } - - -} - -static void wtree_sym(wtree_object wt, double *inp, int N, double *cA, int len_cA, double *cD, int len_cD) { - int i, l, t, len_avg; - - len_avg = wt->wave->lpd_len; - - for (i = 0; i < len_cA; ++i) { - t = 2 * i + 1; - cA[i] = 0.0; - cD[i] = 0.0; - for (l = 0; l < len_avg; ++l) { - if ((t - l) >= 0 && (t - l) < N) { - cA[i] += wt->wave->lpd[l] * inp[t - l]; - cD[i] += wt->wave->hpd[l] * inp[t - l]; - } - else if ((t - l) < 0) { - cA[i] += wt->wave->lpd[l] * inp[-t + l - 1]; - cD[i] += wt->wave->hpd[l] * inp[-t + l - 1]; - } - else if ((t - l) >= N) { - cA[i] += wt->wave->lpd[l] * inp[2 * N - t + l - 1]; - cD[i] += wt->wave->hpd[l] * inp[2 * N - t + l - 1]; - } - - } - } - - -} - -static void dwpt_sym(wpt_object wt, double *inp, int N, double *cA, int len_cA, double *cD, int len_cD) { - int i, l, t, len_avg; - - len_avg = wt->wave->lpd_len; - - for (i = 0; i < len_cA; ++i) { - t = 2 * i + 1; - cA[i] = 0.0; - cD[i] = 0.0; - for (l = 0; l < len_avg; ++l) { - if ((t - l) >= 0 && (t - l) < N) { - cA[i] += wt->wave->lpd[l] * inp[t - l]; - cD[i] += wt->wave->hpd[l] * inp[t - l]; - } - else if ((t - l) < 0) { - cA[i] += wt->wave->lpd[l] * inp[-t + l - 1]; - cD[i] += wt->wave->hpd[l] * inp[-t + l - 1]; - } - else if ((t - l) >= N) { - cA[i] += wt->wave->lpd[l] * inp[2 * N - t + l - 1]; - cD[i] += wt->wave->hpd[l] * inp[2 * N - t + l - 1]; - } - - } - } - - -} - -static void dwt1(wt_object wt,double *sig,int len_sig, double *cA, int len_cA, double *cD, int len_cD) { - int len_avg,D,lf; - double *signal,*cA_undec; - len_avg = (wt->wave->lpd_len + wt->wave->hpd_len) / 2; - //len_sig = 2 * (int)ceil((double)len_sig / 2.0); - - D = 2; - - if (!strcmp(wt->ext, "per")) { - signal = (double*)malloc(sizeof(double)* (len_sig + len_avg + (len_sig % 2))); - - len_sig = per_ext(sig, len_sig, len_avg / 2, signal); - - cA_undec = (double*)malloc(sizeof(double)* (len_sig + len_avg + wt->wave->lpd_len - 1)); - - if (wt->wave->lpd_len == wt->wave->hpd_len && (!strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT"))) { - wt->cobj = conv_init(len_sig + len_avg, wt->wave->lpd_len); - wt->cfftset = 1; - } - else if (!(wt->wave->lpd_len == wt->wave->hpd_len)) { - printf("Decomposition Filters must have the same length."); - exit(-1); - } - - wconv(wt, signal, len_sig + len_avg, wt->wave->lpd, wt->wave->lpd_len, cA_undec); - - downsamp(cA_undec + len_avg, len_sig, D, cA); - - wconv(wt, signal, len_sig + len_avg, wt->wave->hpd, wt->wave->hpd_len, cA_undec); - - downsamp(cA_undec + len_avg, len_sig, D, cD); - } - else if (!strcmp(wt->ext, "sym")) { - //printf("\n YES %s \n", wt->ext); - lf = wt->wave->lpd_len;// lpd and hpd have the same length - - signal = (double*)malloc(sizeof(double)* (len_sig + 2 * (lf - 1))); - - len_sig = symm_ext(sig, len_sig, lf - 1, signal); - - cA_undec = (double*)malloc(sizeof(double)* (len_sig + 3 * (lf - 1))); - - if (wt->wave->lpd_len == wt->wave->hpd_len && (!strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT"))) { - wt->cobj = conv_init(len_sig + 2 * (lf - 1), lf); - wt->cfftset = 1; - } - else if (!(wt->wave->lpd_len == wt->wave->hpd_len)) { - printf("Decomposition Filters must have the same length."); - exit(-1); - } - - - wconv(wt, signal, len_sig + 2 * (lf - 1), wt->wave->lpd, wt->wave->lpd_len, cA_undec); - - downsamp(cA_undec + lf, len_sig + lf - 2, D, cA); - - wconv(wt, signal, len_sig + 2 * (lf - 1), wt->wave->hpd, wt->wave->hpd_len, cA_undec); - - downsamp(cA_undec + lf, len_sig + lf - 2, D, cD); - } - else { - printf("Signal extension can be either per or sym"); - exit(-1); - } - - - if (wt->wave->lpd_len == wt->wave->hpd_len && (!strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT"))) { - free_conv(wt->cobj); - wt->cfftset = 0; - } - - free(signal); - free(cA_undec); -} - -void dwt(wt_object wt,double *inp) { - int i,J,temp_len,iter,N,lp; - int len_cA; - double *orig,*orig2; - - temp_len = wt->siglength; - J = wt->J; - wt->length[J + 1] = temp_len; - wt->outlength = 0; - wt->zpad = 0; - orig = (double*)malloc(sizeof(double)* temp_len); - orig2 = (double*)malloc(sizeof(double)* temp_len); - /* - if ((temp_len % 2) == 0) { - wt->zpad = 0; - orig = (double*)malloc(sizeof(double)* temp_len); - orig2 = (double*)malloc(sizeof(double)* temp_len); - } - else { - wt->zpad = 1; - temp_len++; - orig = (double*)malloc(sizeof(double)* temp_len); - orig2 = (double*)malloc(sizeof(double)* temp_len); - } - */ - - for (i = 0; i < wt->siglength; ++i) { - orig[i] = inp[i]; - } - - if (wt->zpad == 1) { - orig[temp_len - 1] = orig[temp_len - 2]; - } - - N = temp_len; - lp = wt->wave->lpd_len; - - if (!strcmp(wt->ext,"per")) { - i = J; - while (i > 0) { - N = (int)ceil((double)N / 2.0); - wt->length[i] = N; - wt->outlength += wt->length[i]; - i--; - } - wt->length[0] = wt->length[1]; - wt->outlength += wt->length[0]; - N = wt->outlength; - - for (iter = 0; iter < J; ++iter) { - len_cA = wt->length[J - iter]; - N -= len_cA; - if ( !strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT") ) { - dwt1(wt, orig, temp_len, orig2, len_cA, wt->params + N, len_cA); - } - else { - dwt_per(wt, orig, temp_len, orig2, len_cA, wt->params + N, len_cA); - } - temp_len = wt->length[J - iter]; - if (iter == J - 1) { - for (i = 0; i < len_cA; ++i) { - wt->params[i] = orig2[i]; - } - } - else { - for (i = 0; i < len_cA; ++i) { - orig[i] = orig2[i]; - } - } - } - } - else if (!strcmp(wt->ext,"sym")) { - //printf("\n YES %s \n", wt->ext); - i = J; - while (i > 0) { - N = N + lp - 2; - N = (int) ceil((double)N / 2.0); - wt->length[i] = N; - wt->outlength += wt->length[i]; - i--; - } - wt->length[0] = wt->length[1]; - wt->outlength += wt->length[0]; - N = wt->outlength; - - for (iter = 0; iter < J; ++iter) { - len_cA = wt->length[J - iter]; - N -= len_cA; - if (!strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT")) { - dwt1(wt, orig, temp_len, orig2, len_cA, wt->params + N, len_cA); - } - else { - dwt_sym(wt, orig, temp_len, orig2, len_cA, wt->params + N, len_cA); - } - temp_len = wt->length[J - iter]; - - if (iter == J - 1) { - for (i = 0; i < len_cA; ++i) { - wt->params[i] = orig2[i]; - } - } - else { - for (i = 0; i < len_cA; ++i) { - orig[i] = orig2[i]; - } - } - } - } - else { - printf("Signal extension can be either per or sym"); - exit(-1); - } - - free(orig); - free(orig2); -} - -void wtree(wtree_object wt,double *inp) { - int i,J,temp_len,iter,N,lp,p2,k,N2,Np; - int len_cA,t,t2,it1; - double *orig; - - temp_len = wt->siglength; - J = wt->J; - wt->length[J + 1] = temp_len; - wt->outlength = 0; - wt->zpad = 0; - orig = (double*)malloc(sizeof(double)* temp_len); - /* - if ((temp_len % 2) == 0) { - wt->zpad = 0; - orig = (double*)malloc(sizeof(double)* temp_len); - } - else { - wt->zpad = 1; - temp_len++; - orig = (double*)malloc(sizeof(double)* temp_len); - } - */ - for (i = 0; i < wt->siglength; ++i) { - orig[i] = inp[i]; - } - - if (wt->zpad == 1) { - orig[temp_len - 1] = orig[temp_len - 2]; - } - - N = temp_len; - lp = wt->wave->lpd_len; - p2 = 1; - - if (!strcmp(wt->ext,"per")) { - i = J; - p2 = 2; - while (i > 0) { - N = (int)ceil((double)N / 2.0); - wt->length[i] = N; - wt->outlength += p2 * (wt->length[i]); - i--; - p2 *= 2; - } - wt->length[0] = wt->length[1]; - - N2 = N = wt->outlength; - p2 = 1; - for (iter = 0; iter < J; ++iter) { - len_cA = wt->length[J - iter]; - N2 -= 2 * p2 * len_cA; - N = N2; - for(k = 0; k < p2;++k) { - if (iter == 0) { - wtree_per(wt, orig, temp_len, wt->params + N, len_cA, wt->params + N + len_cA, len_cA); - } else { - wtree_per(wt, wt->params + Np + k * temp_len, temp_len, wt->params + N, len_cA, wt->params + N + len_cA, len_cA); - } - N += 2 * len_cA; - } - - temp_len = wt->length[J - iter]; - p2 = 2 * p2; - Np = N2; - } - } - else if (!strcmp(wt->ext,"sym")) { - //printf("\n YES %s \n", wt->ext); - i = J; - p2 = 2; - while (i > 0) { - N = N + lp - 2; - N = (int) ceil((double)N / 2.0); - wt->length[i] = N; - wt->outlength += p2 * (wt->length[i]); - i--; - p2 *= 2; - } - wt->length[0] = wt->length[1]; - - N2 = N = wt->outlength; - p2 = 1; - - for (iter = 0; iter < J; ++iter) { - len_cA = wt->length[J - iter]; - N2 -= 2 * p2 * len_cA; - N = N2; - for(k = 0; k < p2;++k) { - if (iter == 0) { - wtree_sym(wt, orig, temp_len, wt->params + N, len_cA, wt->params + N + len_cA, len_cA); - } else { - wtree_sym(wt, wt->params + Np + k * temp_len, temp_len, wt->params + N, len_cA, wt->params + N + len_cA, len_cA); - } - N += 2 * len_cA; - } - - temp_len = wt->length[J - iter]; - p2 = 2 * p2; - Np = N2; - } - - } - else { - printf("Signal extension can be either per or sym"); - exit(-1); - } - - J = wt->J; - t2 = wt->outlength - 2 * wt->length[J]; - p2 = 2; - it1 = 0; - for (i = 0; i < J; ++i) { - t = t2; - for (k = 0; k < p2; ++k) { - wt->nodelength[it1] = t; - it1++; - t += wt->length[J - i]; - } - p2 *= 2; - t2 = t2 - p2 * wt->length[J - i - 1]; - } - - wt->coeflength[0] = wt->siglength; - - for (i = 1; i < J + 1; ++i) { - wt->coeflength[i] = wt->length[J - i + 1]; - } - - free(orig); -} - -static int ipow2(int n) { - int p,i; - p = 1; - - for (i = 0; i < n; ++i) { - p *= 2; - } - - return p; -} - -void dwpt(wpt_object wt, double *inp) { - int i, J, temp_len, iter, N, lp, p2, k, N2, Np; - int temp, elength, temp2,size,nodes,llb,n1,j; - double eparam,v1,v2; - int len_cA, t, t2, it1,it2; - double *orig,*tree; - int *nodelength; - - temp_len = wt->siglength; - J = wt->J; - wt->length[J + 1] = temp_len; - wt->outlength = 0; - temp = 1; - elength = 0; - size = wt->wave->filtlength; - nodes = wt->nodes; - n1 = nodes + 1; - for (i = 0; i < J; ++i) { - temp *= 2; - temp2 = (size - 2) * (temp - 1); - elength += temp2; - } - eparam = wt->eparam; - orig = (double*)malloc(sizeof(double)* temp_len); - tree = (double*)malloc(sizeof(double)* (temp_len * (J + 1) + elength)); - nodelength = (int*)malloc(sizeof(int)* nodes); - - for (i = 0; i < wt->siglength; ++i) { - orig[i] = inp[i]; - } - - for (i = 0; i < temp_len * (J + 1) + elength; ++i) { - tree[i] = 0.0; - } - - for (i = 0; i < nodes + 1; ++i) { - wt->basisvector[i] = 0.0; - wt->costvalues[i] = 0.0; - } - - N = temp_len; - lp = wt->wave->lpd_len; - p2 = 1; - - //set eparam value here - wt->costvalues[0] = costfunc(orig, wt->siglength, wt->entropy, eparam); - it2 = 1; - if (!strcmp(wt->ext, "per")) { - i = J; - p2 = 2; - while (i > 0) { - N = (int)ceil((double)N / 2.0); - wt->length[i] = N; - wt->outlength += p2 * (wt->length[i]); - i--; - p2 *= 2; - } - wt->length[0] = wt->length[1]; - - N2 = N = wt->outlength; - p2 = 1; - for (iter = 0; iter < J; ++iter) { - len_cA = wt->length[J - iter]; - N2 -= 2 * p2 * len_cA; - N = N2; - for (k = 0; k < p2; ++k) { - if (iter == 0) { - dwpt_per(wt, orig, temp_len, tree + N, len_cA, tree + N + len_cA, len_cA); - } - else { - dwpt_per(wt, tree + Np + k * temp_len, temp_len, tree + N, len_cA, tree + N + len_cA, len_cA); - } - wt->costvalues[it2] = costfunc(tree + N, len_cA, wt->entropy, eparam); - it2++; - wt->costvalues[it2] = costfunc(tree + N +len_cA, len_cA, wt->entropy, eparam); - it2++; - N += 2 * len_cA; - } - - temp_len = wt->length[J - iter]; - p2 = 2 * p2; - Np = N2; - } - } - else if (!strcmp(wt->ext, "sym")) { - //printf("\n YES %s \n", wt->ext); - i = J; - p2 = 2; - while (i > 0) { - N = N + lp - 2; - N = (int)ceil((double)N / 2.0); - wt->length[i] = N; - wt->outlength += p2 * (wt->length[i]); - i--; - p2 *= 2; - } - wt->length[0] = wt->length[1]; - - N2 = N = wt->outlength; - p2 = 1; - - for (iter = 0; iter < J; ++iter) { - len_cA = wt->length[J - iter]; - N2 -= 2 * p2 * len_cA; - N = N2; - for (k = 0; k < p2; ++k) { - if (iter == 0) { - dwpt_sym(wt, orig, temp_len, tree + N, len_cA, tree + N + len_cA, len_cA); - } - else { - dwpt_sym(wt, tree + Np + k * temp_len, temp_len, tree + N, len_cA, tree + N + len_cA, len_cA); - } - wt->costvalues[it2] = costfunc(tree + N, len_cA, wt->entropy, eparam); - it2++; - wt->costvalues[it2] = costfunc(tree + N + len_cA, len_cA, wt->entropy, eparam); - it2++; - N += 2 * len_cA; - } - - temp_len = wt->length[J - iter]; - p2 = 2 * p2; - Np = N2; - } - - } - else { - printf("Signal extension can be either per or sym"); - exit(-1); - } - - J = wt->J; - t2 = wt->outlength - 2 * wt->length[J]; - p2 = 2; - it1 = 0; - for (i = 0; i < J; ++i) { - t = t2; - for (k = 0; k < p2; ++k) { - nodelength[it1] = t; - it1++; - t += wt->length[J - i]; - } - p2 *= 2; - t2 = t2 - p2 * wt->length[J - i - 1]; - } - - - J = wt->J; - llb = 1; - for (i = 0; i < J; ++i) { - llb *= 2; - } - - for (i = n1 - llb; i < n1; ++i) { - wt->basisvector[i] = 1; - } - - for (j = J - 1; j >= 0; --j) { - for (k = ipow2(j) - 1; k < ipow2(j + 1) - 1; ++k) { - v1 = wt->costvalues[k]; - v2 = wt->costvalues[2 * k + 1] + wt->costvalues[2 * k + 2]; - //printf(" %g %g", v1,v2); - if (v1 <= v2) { - wt->basisvector[k] = 1; - } - else { - wt->costvalues[k] = v2; - } - } - //printf("\n"); - } - - for (k = 0; k < nodes / 2; ++k) { - if (wt->basisvector[k] == 1 || wt->basisvector[k] == 2) { - wt->basisvector[2 * k + 1] = 2; - wt->basisvector[2 * k + 2] = 2; - } - } - - for (k = 0; k < n1; ++k) { - if (wt->basisvector[k] == 2) { - wt->basisvector[k] = 0; - } - } - - N2 = 0; - it1 = n1; - it2 = 0; - wt->nodes = 0; - wt->numnodeslevel[0] = 0; - //printf("Start \n"); - - if (wt->basisvector[0] == 1) { - wt->outlength = wt->siglength; - for (i = 0; i < wt->siglength; ++i) { - wt->output[i] = inp[i]; - } - wt->nodes = 1; - wt->nodeindex[0] = 0; - wt->nodeindex[1] = 0; - wt->numnodeslevel[0] = 1; - } - else { - for (i = J; i > 0; --i) { - llb = ipow2(i); - it1 -= llb; - wt->numnodeslevel[i] = 0; - for (j = 0; j < llb; ++j) { - if (wt->basisvector[it1 + j] == 1) { - //printf("NODE %d %d %d \n", i, j, wt->length[J - i + 1]); - wt->nodeindex[2 * wt->nodes] = i; - wt->nodeindex[2 * wt->nodes + 1] = j; - wt->nodes += 1; - wt->numnodeslevel[i] += 1; - for (k = 0; k < wt->length[J - i + 1]; ++k) { - wt->output[it2 + k] = tree[nodelength[it1 - 1 + j] + k];// access tree - } - it2 += wt->length[J - i + 1]; - } - } - } - wt->outlength = it2; - } - - wt->coeflength[0] = wt->siglength; - - for (i = 1; i < J + 1; ++i) { - wt->coeflength[i] = wt->length[J - i + 1]; - } - - free(orig); - free(tree); - free(nodelength); -} - -int getWTREENodelength(wtree_object wt, int X) { - int N; - N = -1; - /* - X - Level. All Nodes at any level have the same length - */ - if (X <= 0 || X > wt->J) { - printf("X co-ordinate must be >= 1 and <= %d", wt->J); - exit(-1); - } - - N = wt->length[wt->J -X + 1]; - - return N; -} - -int getDWPTNodelength(wpt_object wt, int X) { - int N; - N = -1; - /* - X - Level. All Nodes at any level have the same length - */ - if (X <= 0 || X > wt->J) { - printf("X co-ordinate must be >= 1 and <= %d", wt->J); - exit(-1); - } - - N = wt->length[wt->J - X + 1]; - - return N; -} - -void getWTREECoeffs(wtree_object wt, int X,int Y,double *coeffs,int N) { - int ymax,i,t,t2; - - if (X <= 0 || X > wt->J) { - printf("X co-ordinate must be >= 1 and <= %d", wt->J); - exit(-1); - } - ymax = 1; - for (i = 0; i < X; ++i) { - ymax *= 2; - } - - ymax -= 1; - - if (Y < 0 ||Y > ymax) { - printf("Y co-ordinate must be >= 0 and <= %d", ymax); - exit(-1); - } - - if (X == 1) { - t = 0; - } - else { - t = 0; - t2 = 1; - for (i = 0; i < X - 1; ++i) { - t2 *= 2; - t += t2; - } - } - - t += Y; - t2 = wt->nodelength[t]; - for (i = 0; i < N; ++i) { - coeffs[i] = wt->output[t2+i]; - } - -} - -void getDWPTCoeffs(wpt_object wt, int X, int Y, double *coeffs, int N) { - int ymax, i, t, t2; - int np,nds,citer; - int flag; - - if (X <= 0 || X > wt->J) { - printf("X co-ordinate must be >= 1 and <= %d", wt->J); - exit(-1); - } - ymax = 1; - for (i = 0; i < X; ++i) { - ymax *= 2; - } - - ymax -= 1; - - if (Y < 0 || Y > ymax) { - printf("Y co-ordinate must be >= 0 and <= %d", ymax); - exit(-1); - } - - np = 0; - citer = 0; - - for (i = wt->J; i > X; --i) { - np += wt->numnodeslevel[i]; - citer += wt->numnodeslevel[i] * wt->coeflength[i]; - } - - i = 0; - flag = 0; - for (i = 0; i < wt->numnodeslevel[X]; ++i) { - if (wt->nodeindex[2 * np + 1] == Y) { - flag = 1; - break; - } - np++; - citer += wt->coeflength[X]; - } - - if (flag == 0) { - printf("The Node is Not Part Of The Best Basis Tree Use wpt_summary function to list available nodes \n"); - exit(-1); - } - - for (i = 0; i < N; ++i) { - coeffs[i] = wt->output[citer + i]; - } - -} - -static void idwt1(wt_object wt,double *temp, double *cA_up,double *cA, int len_cA,double *cD,int len_cD,double *X_lp,double *X_hp,double *X) { - int len_avg, N, U,N2,i; - - len_avg = (wt->wave->lpr_len + wt->wave->hpr_len) / 2; - N = 2 * len_cD; - U = 2; - - upsamp2(cA, len_cA, U, cA_up); - - per_ext(cA_up, 2 * len_cA, len_avg / 2, temp); - - N2 = 2 * len_cA + len_avg; - - if (wt->wave->lpr_len == wt->wave->hpr_len && (!strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT"))) { - wt->cobj = conv_init(N2, len_avg); - wt->cfftset = 1; - } - else if (!(wt->wave->lpr_len == wt->wave->hpr_len)) { - printf("Decomposition Filters must have the same length."); - exit(-1); - } - - wconv(wt, temp, N2, wt->wave->lpr, len_avg, X_lp); - - upsamp2(cD, len_cD, U, cA_up); - - per_ext(cA_up, 2 * len_cD, len_avg / 2, temp); - - N2 = 2 * len_cD + len_avg; - - wconv(wt, temp, N2, wt->wave->hpr, len_avg, X_hp); - - - for (i = len_avg - 1; i < N + len_avg - 1; ++i) { - X[i - len_avg + 1] = X_lp[i] + X_hp[i]; - } - - if (wt->wave->lpr_len == wt->wave->hpr_len && (!strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT"))) { - free_conv(wt->cobj); - wt->cfftset = 0; - } - -} - -static void idwt_per(wt_object wt, double *cA, int len_cA, double *cD, int len_cD, double *X) { - int len_avg,i,l,m,n,t,l2; - - len_avg = (wt->wave->lpr_len + wt->wave->hpr_len) / 2; - l2 = len_avg / 2; - m = -2; - n = -1; - - for (i = 0; i < len_cA + l2 - 1; ++i) { - m += 2; - n += 2; - X[m] = 0.0; - X[n] = 0.0; - for (l = 0; l < l2; ++l) { - t = 2 * l; - if ((i - l) >= 0 && (i - l) < len_cA) { - X[m] += wt->wave->lpr[t] * cA[i - l] + wt->wave->hpr[t] * cD[i - l]; - X[n] += wt->wave->lpr[t + 1] * cA[i - l] + wt->wave->hpr[t + 1] * cD[i - l]; - } - else if ((i - l) >= len_cA && (i-l) < len_cA + len_avg - 1) { - X[m] += wt->wave->lpr[t] * cA[i - l - len_cA] + wt->wave->hpr[t] * cD[i - l - len_cA]; - X[n] += wt->wave->lpr[t + 1] * cA[i - l - len_cA] + wt->wave->hpr[t + 1] * cD[i - l - len_cA]; - } - else if ((i - l) < 0 && (i-l) > -l2) { - X[m] += wt->wave->lpr[t] * cA[len_cA + i - l] + wt->wave->hpr[t] * cD[len_cA + i - l]; - X[n] += wt->wave->lpr[t + 1] * cA[len_cA + i - l] + wt->wave->hpr[t + 1] * cD[len_cA + i - l]; - } - } - } -} - -static void idwt_sym(wt_object wt, double *cA, int len_cA, double *cD, int len_cD, double *X) { - int len_avg, i, l, m, n, t, v; - - len_avg = (wt->wave->lpr_len + wt->wave->hpr_len) / 2; - m = -2; - n = -1; - - for (v = 0; v < len_cA; ++v) { - i = v; - m += 2; - n += 2; - X[m] = 0.0; - X[n] = 0.0; - for (l = 0; l < len_avg / 2; ++l) { - t = 2 * l; - if ((i - l) >= 0 && (i - l) < len_cA) { - X[m] += wt->wave->lpr[t] * cA[i - l] + wt->wave->hpr[t] * cD[i - l]; - X[n] += wt->wave->lpr[t + 1] * cA[i - l] + wt->wave->hpr[t + 1] * cD[i - l]; - } - } - } -} - - -void idwt(wt_object wt, double *dwtop) { - int J,U,i,lf,N,N2,iter,k; - int app_len, det_len; - double *cA_up, *X_lp, *X_hp,*out,*temp; - - J = wt->J; - U = 2; - app_len = wt->length[0]; - out = (double*)malloc(sizeof(double)* (wt->siglength + 1)); - if (!strcmp(wt->ext, "per") && (!strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT"))) { - app_len = wt->length[0]; - det_len = wt->length[1]; - N = 2 * wt->length[J]; - lf = (wt->wave->lpr_len + wt->wave->hpr_len) / 2; - - cA_up = (double*)malloc(sizeof(double)* N); - temp = (double*)malloc(sizeof(double)* (N + lf)); - X_lp = (double*)malloc(sizeof(double)* (N + 2 * lf - 1)); - X_hp = (double*)malloc(sizeof(double)* (N + 2 * lf - 1)); - iter = app_len; - - for (i = 0; i < app_len; ++i) { - out[i] = wt->output[i]; - } - - for (i = 0; i < J; ++i) { - - idwt1(wt,temp,cA_up,out,det_len,wt->output+iter,det_len,X_lp,X_hp,out); - /* - idwt_per(wt,out, det_len, wt->output + iter, det_len, X_lp); - for (k = lf/2 - 1; k < 2 * det_len + lf/2 - 1; ++k) { - out[k - lf/2 + 1] = X_lp[k]; - } - */ - iter += det_len; - det_len = wt->length[i + 2]; - } - free(cA_up); - free(X_lp); - free(X_hp); - free(temp); - - } - else if (!strcmp(wt->ext, "per") && !strcmp(wt->cmethod, "direct")) { - app_len = wt->length[0]; - det_len = wt->length[1]; - N = 2 * wt->length[J]; - lf = (wt->wave->lpr_len + wt->wave->hpr_len) / 2; - - X_lp = (double*)malloc(sizeof(double)* (N + 2 * lf - 1)); - iter = app_len; - - for (i = 0; i < app_len; ++i) { - out[i] = wt->output[i]; - } - - for (i = 0; i < J; ++i) { - - //idwt1(wt, temp, cA_up, out, det_len, wt->output + iter, det_len, X_lp, X_hp, out); - - idwt_per(wt,out, det_len, wt->output + iter, det_len, X_lp); - for (k = lf/2 - 1; k < 2 * det_len + lf/2 - 1; ++k) { - out[k - lf/2 + 1] = X_lp[k]; - } - - iter += det_len; - det_len = wt->length[i + 2]; - } - - free(X_lp); - - } - else if (!strcmp(wt->ext, "sym") && !strcmp(wt->cmethod, "direct")) { - app_len = wt->length[0]; - det_len = wt->length[1]; - N = 2 * wt->length[J] - 1; - lf = (wt->wave->lpr_len + wt->wave->hpr_len) / 2; - - X_lp = (double*)malloc(sizeof(double)* (N + 2 * lf - 1)); - iter = app_len; - - for (i = 0; i < app_len; ++i) { - out[i] = wt->output[i]; - } - - for (i = 0; i < J; ++i) { - - //idwt1(wt, temp, cA_up, out, det_len, wt->output + iter, det_len, X_lp, X_hp, out); - - idwt_sym(wt, out, det_len, wt->output + iter, det_len, X_lp); - for (k = lf-2; k < 2 * det_len; ++k) { - out[k - lf + 2] = X_lp[k]; - } - - iter += det_len; - det_len = wt->length[i + 2]; - } - - free(X_lp); - - } - else if (!strcmp(wt->ext, "sym") && (!strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT"))) { - lf = wt->wave->lpd_len;// lpd and hpd have the same length - - N = 2 * wt->length[J] - 1; - cA_up = (double*)malloc(sizeof(double)* N); - X_lp = (double*)malloc(sizeof(double)* (N + lf - 1)); - X_hp = (double*)malloc(sizeof(double)* (N + lf - 1)); - - for (i = 0; i < app_len; ++i) { - out[i] = wt->output[i]; - } - - iter = app_len; - - for (i = 0; i < J; ++i) { - det_len = wt->length[i + 1]; - upsamp(out, det_len, U, cA_up); - N2 = 2 * wt->length[i + 1] - 1; - - if (wt->wave->lpr_len == wt->wave->hpr_len && (!strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT"))) { - wt->cobj = conv_init(N2, lf); - wt->cfftset = 1; - } - else if (!(wt->wave->lpr_len == wt->wave->hpr_len)) { - printf("Decomposition Filters must have the same length."); - exit(-1); - } - - wconv(wt, cA_up, N2, wt->wave->lpr, lf, X_lp); - - upsamp(wt->output + iter, det_len, U, cA_up); - - wconv(wt, cA_up, N2, wt->wave->hpr, lf, X_hp); - - for (k = lf - 2; k < N2 + 1; ++k) { - out[k - lf + 2] = X_lp[k] + X_hp[k]; - } - iter += det_len; - if (wt->wave->lpr_len == wt->wave->hpr_len && (!strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT"))) { - free_conv(wt->cobj); - wt->cfftset = 0; - } - } - - free(cA_up); - free(X_lp); - free(X_hp); - } - else { - printf("Signal extension can be either per or sym"); - exit(-1); - } - - for (i = 0; i < wt->siglength; ++i) { - dwtop[i] = out[i]; - } - - - free(out); - -} - -static void idwpt_per(wpt_object wt, double *cA, int len_cA, double *cD, int len_cD, double *X) { - int len_avg, i, l, m, n, t, l2; - - len_avg = (wt->wave->lpr_len + wt->wave->hpr_len) / 2; - l2 = len_avg / 2; - m = -2; - n = -1; - - for (i = 0; i < len_cA + l2 - 1; ++i) { - m += 2; - n += 2; - X[m] = 0.0; - X[n] = 0.0; - for (l = 0; l < l2; ++l) { - t = 2 * l; - if ((i - l) >= 0 && (i - l) < len_cA) { - X[m] += wt->wave->lpr[t] * cA[i - l] + wt->wave->hpr[t] * cD[i - l]; - X[n] += wt->wave->lpr[t + 1] * cA[i - l] + wt->wave->hpr[t + 1] * cD[i - l]; - } - else if ((i - l) >= len_cA && (i - l) < len_cA + len_avg - 1) { - X[m] += wt->wave->lpr[t] * cA[i - l - len_cA] + wt->wave->hpr[t] * cD[i - l - len_cA]; - X[n] += wt->wave->lpr[t + 1] * cA[i - l - len_cA] + wt->wave->hpr[t + 1] * cD[i - l - len_cA]; - } - else if ((i - l) < 0 && (i - l) > -l2) { - X[m] += wt->wave->lpr[t] * cA[len_cA + i - l] + wt->wave->hpr[t] * cD[len_cA + i - l]; - X[n] += wt->wave->lpr[t + 1] * cA[len_cA + i - l] + wt->wave->hpr[t + 1] * cD[len_cA + i - l]; - } - } - } -} - -static void idwpt_sym(wpt_object wt, double *cA, int len_cA, double *cD, int len_cD, double *X) { - int len_avg, i, l, m, n, t, v; - - len_avg = (wt->wave->lpr_len + wt->wave->hpr_len) / 2; - m = -2; - n = -1; - - for (v = 0; v < len_cA; ++v) { - i = v; - m += 2; - n += 2; - X[m] = 0.0; - X[n] = 0.0; - for (l = 0; l < len_avg / 2; ++l) { - t = 2 * l; - if ((i - l) >= 0 && (i - l) < len_cA) { - X[m] += wt->wave->lpr[t] * cA[i - l] + wt->wave->hpr[t] * cD[i - l]; - X[n] += wt->wave->lpr[t + 1] * cA[i - l] + wt->wave->hpr[t + 1] * cD[i - l]; - } - } - } -} - -void idwpt(wpt_object wt, double *dwtop) { - int J, U, i, lf, N, k,p,l; - int app_len, det_len, index, n1, llb, index2, index3, index4,indexp,xlen; - double *X_lp, *X, *out, *out2; - int *prep,*ptemp; - - J = wt->J; - U = 2; - app_len = wt->length[0]; - p = ipow2(J); - lf = (wt->wave->lpr_len + wt->wave->hpr_len) / 2; - xlen = p * (app_len + 2 * lf); - - X_lp = (double*)malloc(sizeof(double)* 2 * (wt->length[J] + lf)); - X = (double*)malloc(sizeof(double)* xlen); - out = (double*)malloc(sizeof(double)* wt->length[J]); - out2 = (double*)malloc(sizeof(double)* wt->length[J]); - prep = (int*)malloc(sizeof(int)* p); - ptemp = (int*)malloc(sizeof(int)* p); - n1 = 1; - llb = 1; - index2 = xlen / p; - indexp = 0; - +/* + Copyright (c) 2014, Rafat Hussain +*/ + +#include "wavelib.h" + +wave_object wave_init(char* wname) { + wave_object obj = NULL; + int retval; + retval = 0; + + if (wname != NULL) { + retval = filtlength(wname); + //obj->filtlength = retval; + //strcopy(obj->wname, wname); + } + + obj = (wave_object)malloc(sizeof(struct wave_set) + sizeof(double)* 4 * retval); + + obj->filtlength = retval; + obj->lpd_len = obj->hpd_len = obj->lpr_len = obj->hpr_len = obj->filtlength; + strcpy(obj->wname, wname); + if (wname != NULL) { + filtcoef(wname,obj->params,obj->params+retval,obj->params+2*retval,obj->params+3*retval); + } + obj->lpd = &obj->params[0]; + obj->hpd = &obj->params[retval]; + obj->lpr = &obj->params[2 * retval]; + obj->hpr = &obj->params[3 * retval]; + return obj; +} + +wt_object wt_init(wave_object wave,char* method, int siglength,int J) { + int size,i,MaxIter; + wt_object obj = NULL; + + size = wave->filtlength; + + if (J > 100) { + printf("\n The Decomposition Iterations Cannot Exceed 100. Exiting \n"); + exit(-1); + } + + MaxIter = wmaxiter(siglength, size); + + if (J > MaxIter) { + printf("\n Error - The Signal Can only be iterated %d times using this wavelet. Exiting\n",MaxIter); + exit(-1); + } + + if (method == NULL) { + obj = (wt_object)malloc(sizeof(struct wt_set) + sizeof(double)* (siglength + 2 * J * (size+1))); + obj->outlength = siglength + 2 * J * (size + 1); // Default + strcpy(obj->ext, "sym"); // Default + } + else if (!strcmp(method, "dwt") || !strcmp(method, "DWT")) { + obj = (wt_object)malloc(sizeof(struct wt_set) + sizeof(double)* (siglength + 2 * J * (size + 1))); + obj->outlength = siglength + 2 * J * (size + 1); // Default + strcpy(obj->ext, "sym"); // Default + } + else if (!strcmp(method, "swt") || !strcmp(method, "SWT")) { + if (!testSWTlength(siglength, J)) { + printf("\n For SWT the signal length must be a multiple of 2^J. \n"); + exit(-1); + } + + obj = (wt_object)malloc(sizeof(struct wt_set) + sizeof(double)* (siglength * (J + 1))); + obj->outlength = siglength * (J + 1); // Default + strcpy(obj->ext, "per"); // Default + } + else if (!strcmp(method, "modwt") || !strcmp(method, "MODWT")) { + + if (!strstr(wave->wname,"db")) { + if (!strstr(wave->wname, "sym")) { + if (!strstr(wave->wname, "coif")) { + printf("\n MODWT is only implemented for orthogonal wavelet families - db, sym and coif \n"); + exit(-1); + } + } + } + + obj = (wt_object)malloc(sizeof(struct wt_set) + sizeof(double)* (siglength * (J + 1))); + obj->outlength = siglength * (J + 1); // Default + strcpy(obj->ext, "per"); // Default + } + + obj->wave = wave; + obj->siglength = siglength; + obj->J = J; + obj->MaxIter = MaxIter; + strcpy(obj->method, method); + + if (siglength % 2 == 0) { + obj->even = 1; + } + else { + obj->even = 0; + } + + obj->cobj = NULL; + + strcpy(obj->cmethod, "direct"); // Default + obj->cfftset = 0; + obj->lenlength = J + 2; + obj->output = &obj->params[0]; + if (!strcmp(method, "dwt") || !strcmp(method, "DWT")) { + for (i = 0; i < siglength + 2 * J * (size + 1); ++i) { + obj->params[i] = 0.0; + } + } + else if (!strcmp(method, "swt") || !strcmp(method, "SWT") || !strcmp(method, "modwt") || !strcmp(method, "MODWT")) { + for (i = 0; i < siglength * (J + 1); ++i) { + obj->params[i] = 0.0; + } + } + //wave_summary(obj->wave); + + return obj; +} + +wtree_object wtree_init(wave_object wave, int siglength,int J) { + int size,i,MaxIter,temp,temp2,elength,nodes; + wtree_object obj = NULL; + + size = wave->filtlength; + + if (J > 100) { + printf("\n The Decomposition Iterations Cannot Exceed 100. Exiting \n"); + exit(-1); + } + + + MaxIter = wmaxiter(siglength, size); + if (J > MaxIter) { + printf("\n Error - The Signal Can only be iterated %d times using this wavelet. Exiting\n", MaxIter); + exit(-1); + } + temp = 1; + elength = 0; + nodes = 0; + for(i = 0; i < J;++i) { + temp *= 2; + nodes += temp; + temp2 = (size - 2) * (temp - 1); + elength += temp2; + } + + obj = (wtree_object)malloc(sizeof(struct wtree_set) + sizeof(double)* (siglength * (J + 1) + elength + nodes + J + 1)); + obj->outlength = siglength * (J + 1) + elength; + strcpy(obj->ext, "sym"); + + obj->wave = wave; + obj->siglength = siglength; + obj->J = J; + obj->MaxIter = MaxIter; + strcpy(obj->method, "dwt"); + + if (siglength % 2 == 0) { + obj->even = 1; + } + else { + obj->even = 0; + } + + obj->cobj = NULL; + obj->nodes = nodes; + + obj->cfftset = 0; + obj->lenlength = J + 2; + obj->output = &obj->params[0]; + obj->nodelength = (int*) &obj->params[siglength * (J + 1) + elength]; + obj->coeflength = (int*)&obj->params[siglength * (J + 1) + elength + nodes]; + + for (i = 0; i < siglength * (J + 1) + elength + nodes + J + 1; ++i) { + obj->params[i] = 0.0; + } + + //wave_summary(obj->wave); + + return obj; +} + +wpt_object wpt_init(wave_object wave, int siglength, int J) { + int size, i, MaxIter, temp, nodes,elength,p2,N,lp; + wpt_object obj = NULL; + + size = wave->filtlength; + + if (J > 100) { + printf("\n The Decomposition Iterations Cannot Exceed 100. Exiting \n"); + exit(-1); + } + + + MaxIter = wmaxiter(siglength, size); + if (J > MaxIter) { + printf("\n Error - The Signal Can only be iterated %d times using this wavelet. Exiting\n", MaxIter); + exit(-1); + } + temp = 1; + nodes = 0; + for (i = 0; i < J; ++i) { + temp *= 2; + nodes += temp; + } + + i = J; + p2 = 2; + N = siglength; + lp = size; + elength = 0; + while (i > 0) { + N = N + lp - 2; + N = (int)ceil((double)N / 2.0); + elength = p2 * N; + i--; + p2 *= 2; + } + //printf("elength %d", elength); + + obj = (wpt_object)malloc(sizeof(struct wpt_set) + sizeof(double)* (elength + 4 * nodes + 2 * J + 6)); + obj->outlength = siglength + 2 * (J + 1) * (size + 1); + strcpy(obj->ext, "sym"); + strcpy(obj->entropy, "shannon"); + obj->eparam = 0.0; + + obj->wave = wave; + obj->siglength = siglength; + obj->J = J; + obj->MaxIter = MaxIter; + + if (siglength % 2 == 0) { + obj->even = 1; + } + else { + obj->even = 0; + } + + obj->cobj = NULL; + obj->nodes = nodes; + + obj->lenlength = J + 2; + obj->output = &obj->params[0]; + obj->costvalues = &obj->params[elength]; + obj->basisvector = &obj->params[elength + nodes + 1]; + obj->nodeindex = (int*)&obj->params[elength + 2*nodes + 2]; + obj->numnodeslevel = (int*)&obj->params[elength + 4 * nodes + 4]; + obj->coeflength = (int*)&obj->params[elength + 4 * nodes + J + 5]; + + for (i = 0; i < elength + 4 * nodes + 2 * J + 6; ++i) { + obj->params[i] = 0.0; + } + + //wave_summary(obj->wave); + + return obj; +} + +cwt_object cwt_init(char* wave, double param,int siglength, double dt, int J) { + cwt_object obj = NULL; + int N, i,nj2,ibase2,mother; + double s0, dj; + double t1; + int m, odd; + char *pdefault = "pow"; + + m = (int)param; + odd = 1; + if (2 * (m / 2) == m) { + odd = 0; + } + + N = siglength; + nj2 = 2 * N * J; + obj = (cwt_object)malloc(sizeof(struct cwt_set) + sizeof(double)* (nj2 + 2 * J + N)); + + if (!strcmp(wave, "morlet") || !strcmp(wave, "morl")) { + s0 = 2 * dt; + dj = 0.4875; + mother = 0; + if (param < 0.0) { + printf("\n Morlet Wavelet Parameter should be >= 0 \n"); + exit(-1); + } + if (param == 0) { + param = 6.0; + } + strcpy(obj->wave,"morlet"); + + } + else if (!strcmp(wave, "paul")) { + s0 = 2 * dt; + dj = 0.4875; + mother = 1; + if (param < 0 || param > 20) { + printf("\n Paul Wavelet Parameter should be > 0 and <= 20 \n"); + exit(-1); + } + if (param == 0) { + param = 4.0; + } + strcpy(obj->wave,"paul"); + + } + else if (!strcmp(wave, "dgauss") || !strcmp(wave, "dog")) { + s0 = 2 * dt; + dj = 0.4875; + mother = 2; + if (param < 0 || odd == 1) { + printf("\n DOG Wavelet Parameter should be > 0 and even \n"); + exit(-1); + } + if (param == 0) { + param = 2.0; + } + strcpy(obj->wave,"dog"); + } + + obj->pow = 2; + strcpy(obj->type, pdefault); + + obj->s0 = s0; + obj->dj = dj; + obj->dt = dt; + obj->J = J; + obj->siglength = siglength; + obj->sflag = 0; + obj->pflag = 1; + obj->mother = mother; + obj->m = param; + + t1 = 0.499999 + log((double)N) / log(2.0); + ibase2 = 1 + (int)t1; + + obj->npad = (int)pow(2.0, (double)ibase2); + + obj->output = (cplx_data*) &obj->params[0]; + obj->scale = &obj->params[nj2]; + obj->period = &obj->params[nj2 + J]; + obj->coi = &obj->params[nj2 + 2*J]; + + for (i = 0; i < nj2 + 2 * J + N; ++i) { + obj->params[i] = 0.0; + } + + return obj; +} + + +static void wconv(wt_object wt, double *sig, int N, double *filt, int L, double *oup) { + if (!strcmp(wt->cmethod,"direct")) { + conv_direct(sig, N, filt, L, oup); + } + else if (!strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT")) { + if (wt->cfftset == 0) { + wt->cobj = conv_init(N, L); + conv_fft(wt->cobj, sig, filt, oup); + free_conv(wt->cobj); + } + else { + conv_fft(wt->cobj, sig, filt, oup); + } + } + else { + printf("Convolution Only accepts two methods - direct and fft"); + exit(-1); + } +} + + +static void dwt_per(wt_object wt, double *inp, int N, double *cA, int len_cA, double *cD, int len_cD) { + int l,l2,isodd,i,t,len_avg; + + len_avg = wt->wave->lpd_len; + l2 = len_avg / 2; + isodd = N % 2; + + for (i = 0; i < len_cA; ++i) { + t = 2 * i + l2; + cA[i] = 0.0; + cD[i] = 0.0; + for (l = 0; l < len_avg; ++l) { + if ((t - l) >= l2 && (t - l) < N) { + cA[i] += wt->wave->lpd[l] * inp[t - l]; + cD[i] += wt->wave->hpd[l] * inp[t - l]; + } + else if ((t - l) < l2 && (t - l) >= 0) { + cA[i] += wt->wave->lpd[l] * inp[t - l]; + cD[i] += wt->wave->hpd[l] * inp[t - l]; + } + else if ((t - l) < 0 && isodd == 0) { + cA[i] += wt->wave->lpd[l] * inp[t - l + N]; + cD[i] += wt->wave->hpd[l] * inp[t - l + N]; + } + else if ((t - l) < 0 && isodd == 1) { + if ((t - l) != -1) { + cA[i] += wt->wave->lpd[l] * inp[t - l + N + 1]; + cD[i] += wt->wave->hpd[l] * inp[t - l + N + 1]; + } + else { + cA[i] += wt->wave->lpd[l] * inp[N - 1]; + cD[i] += wt->wave->hpd[l] * inp[N - 1]; + } + } + else if ((t - l) >= N && isodd == 0) { + cA[i] += wt->wave->lpd[l] * inp[t - l - N]; + cD[i] += wt->wave->hpd[l] * inp[t - l - N]; + } + else if ((t - l) >= N && isodd == 1) { + if (t - l != N) { + cA[i] += wt->wave->lpd[l] * inp[t - l - (N + 1)]; + cD[i] += wt->wave->hpd[l] * inp[t - l - (N + 1)]; + } + else { + cA[i] += wt->wave->lpd[l] * inp[N - 1]; + cD[i] += wt->wave->hpd[l] * inp[N - 1]; + } + } + + } + } + + + +} + +static void wtree_per(wtree_object wt, double *inp, int N, double *cA, int len_cA, double *cD, int len_cD) { + int l, l2, isodd, i, t, len_avg; + + len_avg = wt->wave->lpd_len; + l2 = len_avg / 2; + isodd = N % 2; + + for (i = 0; i < len_cA; ++i) { + t = 2 * i + l2; + cA[i] = 0.0; + cD[i] = 0.0; + for (l = 0; l < len_avg; ++l) { + if ((t - l) >= l2 && (t - l) < N) { + cA[i] += wt->wave->lpd[l] * inp[t - l]; + cD[i] += wt->wave->hpd[l] * inp[t - l]; + } + else if ((t - l) < l2 && (t - l) >= 0) { + cA[i] += wt->wave->lpd[l] * inp[t - l]; + cD[i] += wt->wave->hpd[l] * inp[t - l]; + } + else if ((t - l) < 0 && isodd == 0) { + cA[i] += wt->wave->lpd[l] * inp[t - l + N]; + cD[i] += wt->wave->hpd[l] * inp[t - l + N]; + } + else if ((t - l) < 0 && isodd == 1) { + if ((t - l) != -1) { + cA[i] += wt->wave->lpd[l] * inp[t - l + N + 1]; + cD[i] += wt->wave->hpd[l] * inp[t - l + N + 1]; + } + else { + cA[i] += wt->wave->lpd[l] * inp[N - 1]; + cD[i] += wt->wave->hpd[l] * inp[N - 1]; + } + } + else if ((t - l) >= N && isodd == 0) { + cA[i] += wt->wave->lpd[l] * inp[t - l - N]; + cD[i] += wt->wave->hpd[l] * inp[t - l - N]; + } + else if ((t - l) >= N && isodd == 1) { + if (t - l != N) { + cA[i] += wt->wave->lpd[l] * inp[t - l - (N + 1)]; + cD[i] += wt->wave->hpd[l] * inp[t - l - (N + 1)]; + } + else { + cA[i] += wt->wave->lpd[l] * inp[N - 1]; + cD[i] += wt->wave->hpd[l] * inp[N - 1]; + } + } + + } + } + + + +} + +static void dwpt_per(wpt_object wt, double *inp, int N, double *cA, int len_cA, double *cD, int len_cD) { + int l, l2, isodd, i, t, len_avg; + + len_avg = wt->wave->lpd_len; + l2 = len_avg / 2; + isodd = N % 2; + + for (i = 0; i < len_cA; ++i) { + t = 2 * i + l2; + cA[i] = 0.0; + cD[i] = 0.0; + for (l = 0; l < len_avg; ++l) { + if ((t - l) >= l2 && (t - l) < N) { + cA[i] += wt->wave->lpd[l] * inp[t - l]; + cD[i] += wt->wave->hpd[l] * inp[t - l]; + } + else if ((t - l) < l2 && (t - l) >= 0) { + cA[i] += wt->wave->lpd[l] * inp[t - l]; + cD[i] += wt->wave->hpd[l] * inp[t - l]; + } + else if ((t - l) < 0 && isodd == 0) { + cA[i] += wt->wave->lpd[l] * inp[t - l + N]; + cD[i] += wt->wave->hpd[l] * inp[t - l + N]; + } + else if ((t - l) < 0 && isodd == 1) { + if ((t - l) != -1) { + cA[i] += wt->wave->lpd[l] * inp[t - l + N + 1]; + cD[i] += wt->wave->hpd[l] * inp[t - l + N + 1]; + } + else { + cA[i] += wt->wave->lpd[l] * inp[N - 1]; + cD[i] += wt->wave->hpd[l] * inp[N - 1]; + } + } + else if ((t - l) >= N && isodd == 0) { + cA[i] += wt->wave->lpd[l] * inp[t - l - N]; + cD[i] += wt->wave->hpd[l] * inp[t - l - N]; + } + else if ((t - l) >= N && isodd == 1) { + if (t - l != N) { + cA[i] += wt->wave->lpd[l] * inp[t - l - (N + 1)]; + cD[i] += wt->wave->hpd[l] * inp[t - l - (N + 1)]; + } + else { + cA[i] += wt->wave->lpd[l] * inp[N - 1]; + cD[i] += wt->wave->hpd[l] * inp[N - 1]; + } + } + + } + } + + + +} + +static void dwt_sym(wt_object wt, double *inp, int N, double *cA, int len_cA, double *cD, int len_cD) { + int i,l, t, len_avg; + + len_avg = wt->wave->lpd_len; + + for (i = 0; i < len_cA; ++i) { + t = 2 * i + 1; + cA[i] = 0.0; + cD[i] = 0.0; + for (l = 0; l < len_avg; ++l) { + if ((t - l) >= 0 && (t - l) < N) { + cA[i] += wt->wave->lpd[l] * inp[t - l]; + cD[i] += wt->wave->hpd[l] * inp[t - l]; + } + else if ((t - l) < 0) { + cA[i] += wt->wave->lpd[l] * inp[-t + l - 1]; + cD[i] += wt->wave->hpd[l] * inp[-t + l - 1]; + } + else if ((t - l) >= N) { + cA[i] += wt->wave->lpd[l] * inp[2 * N - t + l - 1]; + cD[i] += wt->wave->hpd[l] * inp[2 * N - t + l - 1]; + } + + } + } + + +} + +static void wtree_sym(wtree_object wt, double *inp, int N, double *cA, int len_cA, double *cD, int len_cD) { + int i, l, t, len_avg; + + len_avg = wt->wave->lpd_len; + + for (i = 0; i < len_cA; ++i) { + t = 2 * i + 1; + cA[i] = 0.0; + cD[i] = 0.0; + for (l = 0; l < len_avg; ++l) { + if ((t - l) >= 0 && (t - l) < N) { + cA[i] += wt->wave->lpd[l] * inp[t - l]; + cD[i] += wt->wave->hpd[l] * inp[t - l]; + } + else if ((t - l) < 0) { + cA[i] += wt->wave->lpd[l] * inp[-t + l - 1]; + cD[i] += wt->wave->hpd[l] * inp[-t + l - 1]; + } + else if ((t - l) >= N) { + cA[i] += wt->wave->lpd[l] * inp[2 * N - t + l - 1]; + cD[i] += wt->wave->hpd[l] * inp[2 * N - t + l - 1]; + } + + } + } + + +} + +static void dwpt_sym(wpt_object wt, double *inp, int N, double *cA, int len_cA, double *cD, int len_cD) { + int i, l, t, len_avg; + + len_avg = wt->wave->lpd_len; + + for (i = 0; i < len_cA; ++i) { + t = 2 * i + 1; + cA[i] = 0.0; + cD[i] = 0.0; + for (l = 0; l < len_avg; ++l) { + if ((t - l) >= 0 && (t - l) < N) { + cA[i] += wt->wave->lpd[l] * inp[t - l]; + cD[i] += wt->wave->hpd[l] * inp[t - l]; + } + else if ((t - l) < 0) { + cA[i] += wt->wave->lpd[l] * inp[-t + l - 1]; + cD[i] += wt->wave->hpd[l] * inp[-t + l - 1]; + } + else if ((t - l) >= N) { + cA[i] += wt->wave->lpd[l] * inp[2 * N - t + l - 1]; + cD[i] += wt->wave->hpd[l] * inp[2 * N - t + l - 1]; + } + + } + } + + +} + +static void dwt1(wt_object wt,double *sig,int len_sig, double *cA, int len_cA, double *cD, int len_cD) { + int len_avg,D,lf; + double *signal,*cA_undec; + len_avg = (wt->wave->lpd_len + wt->wave->hpd_len) / 2; + //len_sig = 2 * (int)ceil((double)len_sig / 2.0); + + D = 2; + + if (!strcmp(wt->ext, "per")) { + signal = (double*)malloc(sizeof(double)* (len_sig + len_avg + (len_sig % 2))); + + len_sig = per_ext(sig, len_sig, len_avg / 2, signal); + + cA_undec = (double*)malloc(sizeof(double)* (len_sig + len_avg + wt->wave->lpd_len - 1)); + + if (wt->wave->lpd_len == wt->wave->hpd_len && (!strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT"))) { + wt->cobj = conv_init(len_sig + len_avg, wt->wave->lpd_len); + wt->cfftset = 1; + } + else if (!(wt->wave->lpd_len == wt->wave->hpd_len)) { + printf("Decomposition Filters must have the same length."); + exit(-1); + } + + wconv(wt, signal, len_sig + len_avg, wt->wave->lpd, wt->wave->lpd_len, cA_undec); + + downsamp(cA_undec + len_avg, len_sig, D, cA); + + wconv(wt, signal, len_sig + len_avg, wt->wave->hpd, wt->wave->hpd_len, cA_undec); + + downsamp(cA_undec + len_avg, len_sig, D, cD); + } + else if (!strcmp(wt->ext, "sym")) { + //printf("\n YES %s \n", wt->ext); + lf = wt->wave->lpd_len;// lpd and hpd have the same length + + signal = (double*)malloc(sizeof(double)* (len_sig + 2 * (lf - 1))); + + len_sig = symm_ext(sig, len_sig, lf - 1, signal); + + cA_undec = (double*)malloc(sizeof(double)* (len_sig + 3 * (lf - 1))); + + if (wt->wave->lpd_len == wt->wave->hpd_len && (!strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT"))) { + wt->cobj = conv_init(len_sig + 2 * (lf - 1), lf); + wt->cfftset = 1; + } + else if (!(wt->wave->lpd_len == wt->wave->hpd_len)) { + printf("Decomposition Filters must have the same length."); + exit(-1); + } + + + wconv(wt, signal, len_sig + 2 * (lf - 1), wt->wave->lpd, wt->wave->lpd_len, cA_undec); + + downsamp(cA_undec + lf, len_sig + lf - 2, D, cA); + + wconv(wt, signal, len_sig + 2 * (lf - 1), wt->wave->hpd, wt->wave->hpd_len, cA_undec); + + downsamp(cA_undec + lf, len_sig + lf - 2, D, cD); + } + else { + printf("Signal extension can be either per or sym"); + exit(-1); + } + + + if (wt->wave->lpd_len == wt->wave->hpd_len && (!strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT"))) { + free_conv(wt->cobj); + wt->cfftset = 0; + } + + free(signal); + free(cA_undec); +} + +void dwt(wt_object wt,double *inp) { + int i,J,temp_len,iter,N,lp; + int len_cA; + double *orig,*orig2; + + temp_len = wt->siglength; + J = wt->J; + wt->length[J + 1] = temp_len; + wt->outlength = 0; + wt->zpad = 0; + orig = (double*)malloc(sizeof(double)* temp_len); + orig2 = (double*)malloc(sizeof(double)* temp_len); + /* + if ((temp_len % 2) == 0) { + wt->zpad = 0; + orig = (double*)malloc(sizeof(double)* temp_len); + orig2 = (double*)malloc(sizeof(double)* temp_len); + } + else { + wt->zpad = 1; + temp_len++; + orig = (double*)malloc(sizeof(double)* temp_len); + orig2 = (double*)malloc(sizeof(double)* temp_len); + } + */ + + for (i = 0; i < wt->siglength; ++i) { + orig[i] = inp[i]; + } + + if (wt->zpad == 1) { + orig[temp_len - 1] = orig[temp_len - 2]; + } + + N = temp_len; + lp = wt->wave->lpd_len; + + if (!strcmp(wt->ext,"per")) { + i = J; + while (i > 0) { + N = (int)ceil((double)N / 2.0); + wt->length[i] = N; + wt->outlength += wt->length[i]; + i--; + } + wt->length[0] = wt->length[1]; + wt->outlength += wt->length[0]; + N = wt->outlength; + + for (iter = 0; iter < J; ++iter) { + len_cA = wt->length[J - iter]; + N -= len_cA; + if ( !strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT") ) { + dwt1(wt, orig, temp_len, orig2, len_cA, wt->params + N, len_cA); + } + else { + dwt_per(wt, orig, temp_len, orig2, len_cA, wt->params + N, len_cA); + } + temp_len = wt->length[J - iter]; + if (iter == J - 1) { + for (i = 0; i < len_cA; ++i) { + wt->params[i] = orig2[i]; + } + } + else { + for (i = 0; i < len_cA; ++i) { + orig[i] = orig2[i]; + } + } + } + } + else if (!strcmp(wt->ext,"sym")) { + //printf("\n YES %s \n", wt->ext); + i = J; + while (i > 0) { + N = N + lp - 2; + N = (int) ceil((double)N / 2.0); + wt->length[i] = N; + wt->outlength += wt->length[i]; + i--; + } + wt->length[0] = wt->length[1]; + wt->outlength += wt->length[0]; + N = wt->outlength; + + for (iter = 0; iter < J; ++iter) { + len_cA = wt->length[J - iter]; + N -= len_cA; + if (!strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT")) { + dwt1(wt, orig, temp_len, orig2, len_cA, wt->params + N, len_cA); + } + else { + dwt_sym(wt, orig, temp_len, orig2, len_cA, wt->params + N, len_cA); + } + temp_len = wt->length[J - iter]; + + if (iter == J - 1) { + for (i = 0; i < len_cA; ++i) { + wt->params[i] = orig2[i]; + } + } + else { + for (i = 0; i < len_cA; ++i) { + orig[i] = orig2[i]; + } + } + } + } + else { + printf("Signal extension can be either per or sym"); + exit(-1); + } + + free(orig); + free(orig2); +} + +void wtree(wtree_object wt,double *inp) { + int i,J,temp_len,iter,N,lp,p2,k,N2,Np; + int len_cA,t,t2,it1; + double *orig; + + temp_len = wt->siglength; + J = wt->J; + wt->length[J + 1] = temp_len; + wt->outlength = 0; + wt->zpad = 0; + orig = (double*)malloc(sizeof(double)* temp_len); + /* + if ((temp_len % 2) == 0) { + wt->zpad = 0; + orig = (double*)malloc(sizeof(double)* temp_len); + } + else { + wt->zpad = 1; + temp_len++; + orig = (double*)malloc(sizeof(double)* temp_len); + } + */ + for (i = 0; i < wt->siglength; ++i) { + orig[i] = inp[i]; + } + + if (wt->zpad == 1) { + orig[temp_len - 1] = orig[temp_len - 2]; + } + + N = temp_len; + lp = wt->wave->lpd_len; + p2 = 1; + + if (!strcmp(wt->ext,"per")) { + i = J; + p2 = 2; + while (i > 0) { + N = (int)ceil((double)N / 2.0); + wt->length[i] = N; + wt->outlength += p2 * (wt->length[i]); + i--; + p2 *= 2; + } + wt->length[0] = wt->length[1]; + + N2 = N = wt->outlength; + p2 = 1; + for (iter = 0; iter < J; ++iter) { + len_cA = wt->length[J - iter]; + N2 -= 2 * p2 * len_cA; + N = N2; + for(k = 0; k < p2;++k) { + if (iter == 0) { + wtree_per(wt, orig, temp_len, wt->params + N, len_cA, wt->params + N + len_cA, len_cA); + } else { + wtree_per(wt, wt->params + Np + k * temp_len, temp_len, wt->params + N, len_cA, wt->params + N + len_cA, len_cA); + } + N += 2 * len_cA; + } + + temp_len = wt->length[J - iter]; + p2 = 2 * p2; + Np = N2; + } + } + else if (!strcmp(wt->ext,"sym")) { + //printf("\n YES %s \n", wt->ext); + i = J; + p2 = 2; + while (i > 0) { + N = N + lp - 2; + N = (int) ceil((double)N / 2.0); + wt->length[i] = N; + wt->outlength += p2 * (wt->length[i]); + i--; + p2 *= 2; + } + wt->length[0] = wt->length[1]; + + N2 = N = wt->outlength; + p2 = 1; + + for (iter = 0; iter < J; ++iter) { + len_cA = wt->length[J - iter]; + N2 -= 2 * p2 * len_cA; + N = N2; + for(k = 0; k < p2;++k) { + if (iter == 0) { + wtree_sym(wt, orig, temp_len, wt->params + N, len_cA, wt->params + N + len_cA, len_cA); + } else { + wtree_sym(wt, wt->params + Np + k * temp_len, temp_len, wt->params + N, len_cA, wt->params + N + len_cA, len_cA); + } + N += 2 * len_cA; + } + + temp_len = wt->length[J - iter]; + p2 = 2 * p2; + Np = N2; + } + + } + else { + printf("Signal extension can be either per or sym"); + exit(-1); + } + + J = wt->J; + t2 = wt->outlength - 2 * wt->length[J]; + p2 = 2; + it1 = 0; + for (i = 0; i < J; ++i) { + t = t2; + for (k = 0; k < p2; ++k) { + wt->nodelength[it1] = t; + it1++; + t += wt->length[J - i]; + } + p2 *= 2; + t2 = t2 - p2 * wt->length[J - i - 1]; + } + + wt->coeflength[0] = wt->siglength; + + for (i = 1; i < J + 1; ++i) { + wt->coeflength[i] = wt->length[J - i + 1]; + } + + free(orig); +} + +static int ipow2(int n) { + int p,i; + p = 1; + + for (i = 0; i < n; ++i) { + p *= 2; + } + + return p; +} + +void dwpt(wpt_object wt, double *inp) { + int i, J, temp_len, iter, N, lp, p2, k, N2, Np; + int temp, elength, temp2,size,nodes,llb,n1,j; + double eparam,v1,v2; + int len_cA, t, t2, it1,it2; + double *orig,*tree; + int *nodelength; + + temp_len = wt->siglength; + J = wt->J; + wt->length[J + 1] = temp_len; + wt->outlength = 0; + temp = 1; + elength = 0; + size = wt->wave->filtlength; + nodes = wt->nodes; + n1 = nodes + 1; + for (i = 0; i < J; ++i) { + temp *= 2; + temp2 = (size - 2) * (temp - 1); + elength += temp2; + } + eparam = wt->eparam; + orig = (double*)malloc(sizeof(double)* temp_len); + tree = (double*)malloc(sizeof(double)* (temp_len * (J + 1) + elength)); + nodelength = (int*)malloc(sizeof(int)* nodes); + + for (i = 0; i < wt->siglength; ++i) { + orig[i] = inp[i]; + } + + for (i = 0; i < temp_len * (J + 1) + elength; ++i) { + tree[i] = 0.0; + } + + for (i = 0; i < nodes + 1; ++i) { + wt->basisvector[i] = 0.0; + wt->costvalues[i] = 0.0; + } + + N = temp_len; + lp = wt->wave->lpd_len; + p2 = 1; + + //set eparam value here + wt->costvalues[0] = costfunc(orig, wt->siglength, wt->entropy, eparam); + it2 = 1; + if (!strcmp(wt->ext, "per")) { + i = J; + p2 = 2; + while (i > 0) { + N = (int)ceil((double)N / 2.0); + wt->length[i] = N; + wt->outlength += p2 * (wt->length[i]); + i--; + p2 *= 2; + } + wt->length[0] = wt->length[1]; + + N2 = N = wt->outlength; + p2 = 1; + for (iter = 0; iter < J; ++iter) { + len_cA = wt->length[J - iter]; + N2 -= 2 * p2 * len_cA; + N = N2; + for (k = 0; k < p2; ++k) { + if (iter == 0) { + dwpt_per(wt, orig, temp_len, tree + N, len_cA, tree + N + len_cA, len_cA); + } + else { + dwpt_per(wt, tree + Np + k * temp_len, temp_len, tree + N, len_cA, tree + N + len_cA, len_cA); + } + wt->costvalues[it2] = costfunc(tree + N, len_cA, wt->entropy, eparam); + it2++; + wt->costvalues[it2] = costfunc(tree + N +len_cA, len_cA, wt->entropy, eparam); + it2++; + N += 2 * len_cA; + } + + temp_len = wt->length[J - iter]; + p2 = 2 * p2; + Np = N2; + } + } + else if (!strcmp(wt->ext, "sym")) { + //printf("\n YES %s \n", wt->ext); + i = J; + p2 = 2; + while (i > 0) { + N = N + lp - 2; + N = (int)ceil((double)N / 2.0); + wt->length[i] = N; + wt->outlength += p2 * (wt->length[i]); + i--; + p2 *= 2; + } + wt->length[0] = wt->length[1]; + + N2 = N = wt->outlength; + p2 = 1; + + for (iter = 0; iter < J; ++iter) { + len_cA = wt->length[J - iter]; + N2 -= 2 * p2 * len_cA; + N = N2; + for (k = 0; k < p2; ++k) { + if (iter == 0) { + dwpt_sym(wt, orig, temp_len, tree + N, len_cA, tree + N + len_cA, len_cA); + } + else { + dwpt_sym(wt, tree + Np + k * temp_len, temp_len, tree + N, len_cA, tree + N + len_cA, len_cA); + } + wt->costvalues[it2] = costfunc(tree + N, len_cA, wt->entropy, eparam); + it2++; + wt->costvalues[it2] = costfunc(tree + N + len_cA, len_cA, wt->entropy, eparam); + it2++; + N += 2 * len_cA; + } + + temp_len = wt->length[J - iter]; + p2 = 2 * p2; + Np = N2; + } + + } + else { + printf("Signal extension can be either per or sym"); + exit(-1); + } + + J = wt->J; + t2 = wt->outlength - 2 * wt->length[J]; + p2 = 2; + it1 = 0; + for (i = 0; i < J; ++i) { + t = t2; + for (k = 0; k < p2; ++k) { + nodelength[it1] = t; + it1++; + t += wt->length[J - i]; + } + p2 *= 2; + t2 = t2 - p2 * wt->length[J - i - 1]; + } + + + J = wt->J; + llb = 1; + for (i = 0; i < J; ++i) { + llb *= 2; + } + + for (i = n1 - llb; i < n1; ++i) { + wt->basisvector[i] = 1; + } + + for (j = J - 1; j >= 0; --j) { + for (k = ipow2(j) - 1; k < ipow2(j + 1) - 1; ++k) { + v1 = wt->costvalues[k]; + v2 = wt->costvalues[2 * k + 1] + wt->costvalues[2 * k + 2]; + //printf(" %g %g", v1,v2); + if (v1 <= v2) { + wt->basisvector[k] = 1; + } + else { + wt->costvalues[k] = v2; + } + } + //printf("\n"); + } + + for (k = 0; k < nodes / 2; ++k) { + if (wt->basisvector[k] == 1 || wt->basisvector[k] == 2) { + wt->basisvector[2 * k + 1] = 2; + wt->basisvector[2 * k + 2] = 2; + } + } + + for (k = 0; k < n1; ++k) { + if (wt->basisvector[k] == 2) { + wt->basisvector[k] = 0; + } + } + + N2 = 0; + it1 = n1; + it2 = 0; + wt->nodes = 0; + wt->numnodeslevel[0] = 0; + //printf("Start \n"); + + if (wt->basisvector[0] == 1) { + wt->outlength = wt->siglength; + for (i = 0; i < wt->siglength; ++i) { + wt->output[i] = inp[i]; + } + wt->nodes = 1; + wt->nodeindex[0] = 0; + wt->nodeindex[1] = 0; + wt->numnodeslevel[0] = 1; + } + else { + for (i = J; i > 0; --i) { + llb = ipow2(i); + it1 -= llb; + wt->numnodeslevel[i] = 0; + for (j = 0; j < llb; ++j) { + if (wt->basisvector[it1 + j] == 1) { + //printf("NODE %d %d %d \n", i, j, wt->length[J - i + 1]); + wt->nodeindex[2 * wt->nodes] = i; + wt->nodeindex[2 * wt->nodes + 1] = j; + wt->nodes += 1; + wt->numnodeslevel[i] += 1; + for (k = 0; k < wt->length[J - i + 1]; ++k) { + wt->output[it2 + k] = tree[nodelength[it1 - 1 + j] + k];// access tree + } + it2 += wt->length[J - i + 1]; + } + } + } + wt->outlength = it2; + } + + wt->coeflength[0] = wt->siglength; + + for (i = 1; i < J + 1; ++i) { + wt->coeflength[i] = wt->length[J - i + 1]; + } + + free(orig); + free(tree); + free(nodelength); +} + +int getWTREENodelength(wtree_object wt, int X) { + int N; + N = -1; + /* + X - Level. All Nodes at any level have the same length + */ + if (X <= 0 || X > wt->J) { + printf("X co-ordinate must be >= 1 and <= %d", wt->J); + exit(-1); + } + + N = wt->length[wt->J -X + 1]; + + return N; +} + +int getDWPTNodelength(wpt_object wt, int X) { + int N; + N = -1; + /* + X - Level. All Nodes at any level have the same length + */ + if (X <= 0 || X > wt->J) { + printf("X co-ordinate must be >= 1 and <= %d", wt->J); + exit(-1); + } + + N = wt->length[wt->J - X + 1]; + + return N; +} + +void getWTREECoeffs(wtree_object wt, int X,int Y,double *coeffs,int N) { + int ymax,i,t,t2; + + if (X <= 0 || X > wt->J) { + printf("X co-ordinate must be >= 1 and <= %d", wt->J); + exit(-1); + } + ymax = 1; + for (i = 0; i < X; ++i) { + ymax *= 2; + } + + ymax -= 1; + + if (Y < 0 ||Y > ymax) { + printf("Y co-ordinate must be >= 0 and <= %d", ymax); + exit(-1); + } + + if (X == 1) { + t = 0; + } + else { + t = 0; + t2 = 1; + for (i = 0; i < X - 1; ++i) { + t2 *= 2; + t += t2; + } + } + + t += Y; + t2 = wt->nodelength[t]; + for (i = 0; i < N; ++i) { + coeffs[i] = wt->output[t2+i]; + } + +} + +void getDWPTCoeffs(wpt_object wt, int X, int Y, double *coeffs, int N) { + int ymax, i; + int np,citer; + int flag; + + if (X <= 0 || X > wt->J) { + printf("X co-ordinate must be >= 1 and <= %d", wt->J); + exit(-1); + } + ymax = 1; + for (i = 0; i < X; ++i) { + ymax *= 2; + } + + ymax -= 1; + + if (Y < 0 || Y > ymax) { + printf("Y co-ordinate must be >= 0 and <= %d", ymax); + exit(-1); + } + + np = 0; + citer = 0; + + for (i = wt->J; i > X; --i) { + np += wt->numnodeslevel[i]; + citer += wt->numnodeslevel[i] * wt->coeflength[i]; + } + + i = 0; + flag = 0; + for (i = 0; i < wt->numnodeslevel[X]; ++i) { + if (wt->nodeindex[2 * np + 1] == Y) { + flag = 1; + break; + } + np++; + citer += wt->coeflength[X]; + } + + if (flag == 0) { + printf("The Node is Not Part Of The Best Basis Tree Use wpt_summary function to list available nodes \n"); + exit(-1); + } + + for (i = 0; i < N; ++i) { + coeffs[i] = wt->output[citer + i]; + } + +} + +int getCWTScaleLength(int N) { + int J; + double temp,dj; + + dj = 0.4875; + + temp = (log((double)N / 2.0) / log(2.0)) / dj; + J = (int)temp; + + return J; +} + +void setCWTScales(cwt_object wt, double s0, double dj,char *type,int power) { + int i; + //s0*pow(2.0, (double)(j - 1)*dj); + if (!strcmp(wt->type, "pow") || !strcmp(wt->type, "power")) { + for (i = 0; i < wt->J; ++i) { + wt->scale[i] = s0*pow((double) power, (double)(i)*dj); + } + wt->sflag = 1; + + } + else if (!strcmp(wt->type, "lin") || !strcmp(wt->type, "linear")) { + for (i = 0; i < wt->J; ++i) { + wt->scale[i] = s0 + (double)i * dj; + } + wt->sflag = 1; + } + else { + printf("\n Type accepts only two values : pow and lin\n"); + exit(-1); + } + wt->s0 = s0; + wt->dj = dj; +} + +void setCWTScaleVector(cwt_object wt, double *scale, int J,double s0,double dj) { + int i; + + if (J != wt->J) { + printf("\n CWT object is only valid for %d scales\n", wt->J); + exit(-1); + } + + for (i = 0; i < wt->J; ++i) { + wt->scale[i] = scale[i]; + } + wt->dj = dj; + wt->s0 = s0; + wt->sflag = 1; +} + +void setCWTPadding(cwt_object wt, int pad) { + if (pad == 0) { + wt->pflag = 0; + } + else { + wt->pflag = 1; + } +} + +void cwt(cwt_object wt, double *inp) { + int i, N, npad,nj2,j,j2; + N = wt->siglength; + if (wt->sflag == 0) { + for (i = 0; i < wt->J; ++i) { + wt->scale[i] = wt->s0*pow(2.0, (double)(i)*wt->dj); + } + wt->sflag = 1; + } + + if (wt->pflag == 0) { + npad = N; + } + else { + npad = wt->npad; + } + + nj2 = 2 * N * wt->J; + j = wt->J; + j2 = 2 * j; + + wt->smean = 0.0; + + for (i = 0; i < N; ++i) { + wt->smean += inp[i]; + } + wt->smean /= N; + + cwavelet(inp, N, wt->dt, wt->mother, wt->m, wt->s0, wt->dj, wt->J,npad,wt->params, wt->params+nj2, wt->params+nj2+j, wt->params+nj2+j2); + +} + +void icwt(cwt_object wt, double *cwtop) { + double psi, cdel; + int real,i,N,nj2; + + N = wt->siglength; + nj2 = N * 2 * wt->J; + + psi0(wt->mother, wt->m, &psi, &real); + cdel = cdelta(wt->mother, wt->m, psi); + + //printf("\n PSI %g CDEL %g param %g mother %d \n", psi, cdel,wt->m,wt->mother); + + icwavelet(wt->params, N, wt->params+nj2, wt->J, wt->dt, wt->dj, cdel, psi, cwtop); + + for(i = 0; i < N;++i) { + cwtop[i] += wt->smean; + } + +} + +static void idwt1(wt_object wt,double *temp, double *cA_up,double *cA, int len_cA,double *cD,int len_cD,double *X_lp,double *X_hp,double *X) { + int len_avg, N, U,N2,i; + + len_avg = (wt->wave->lpr_len + wt->wave->hpr_len) / 2; + N = 2 * len_cD; + U = 2; + + upsamp2(cA, len_cA, U, cA_up); + + per_ext(cA_up, 2 * len_cA, len_avg / 2, temp); + + N2 = 2 * len_cA + len_avg; + + if (wt->wave->lpr_len == wt->wave->hpr_len && (!strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT"))) { + wt->cobj = conv_init(N2, len_avg); + wt->cfftset = 1; + } + else if (!(wt->wave->lpr_len == wt->wave->hpr_len)) { + printf("Decomposition Filters must have the same length."); + exit(-1); + } + + wconv(wt, temp, N2, wt->wave->lpr, len_avg, X_lp); + + upsamp2(cD, len_cD, U, cA_up); + + per_ext(cA_up, 2 * len_cD, len_avg / 2, temp); + + N2 = 2 * len_cD + len_avg; + + wconv(wt, temp, N2, wt->wave->hpr, len_avg, X_hp); + + + for (i = len_avg - 1; i < N + len_avg - 1; ++i) { + X[i - len_avg + 1] = X_lp[i] + X_hp[i]; + } + + if (wt->wave->lpr_len == wt->wave->hpr_len && (!strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT"))) { + free_conv(wt->cobj); + wt->cfftset = 0; + } + +} + +static void idwt_per(wt_object wt, double *cA, int len_cA, double *cD, int len_cD, double *X) { + int len_avg,i,l,m,n,t,l2; + + len_avg = (wt->wave->lpr_len + wt->wave->hpr_len) / 2; + l2 = len_avg / 2; + m = -2; + n = -1; + + for (i = 0; i < len_cA + l2 - 1; ++i) { + m += 2; + n += 2; + X[m] = 0.0; + X[n] = 0.0; + for (l = 0; l < l2; ++l) { + t = 2 * l; + if ((i - l) >= 0 && (i - l) < len_cA) { + X[m] += wt->wave->lpr[t] * cA[i - l] + wt->wave->hpr[t] * cD[i - l]; + X[n] += wt->wave->lpr[t + 1] * cA[i - l] + wt->wave->hpr[t + 1] * cD[i - l]; + } + else if ((i - l) >= len_cA && (i-l) < len_cA + len_avg - 1) { + X[m] += wt->wave->lpr[t] * cA[i - l - len_cA] + wt->wave->hpr[t] * cD[i - l - len_cA]; + X[n] += wt->wave->lpr[t + 1] * cA[i - l - len_cA] + wt->wave->hpr[t + 1] * cD[i - l - len_cA]; + } + else if ((i - l) < 0 && (i-l) > -l2) { + X[m] += wt->wave->lpr[t] * cA[len_cA + i - l] + wt->wave->hpr[t] * cD[len_cA + i - l]; + X[n] += wt->wave->lpr[t + 1] * cA[len_cA + i - l] + wt->wave->hpr[t + 1] * cD[len_cA + i - l]; + } + } + } +} + +static void idwt_sym(wt_object wt, double *cA, int len_cA, double *cD, int len_cD, double *X) { + int len_avg, i, l, m, n, t, v; + + len_avg = (wt->wave->lpr_len + wt->wave->hpr_len) / 2; + m = -2; + n = -1; + + for (v = 0; v < len_cA; ++v) { + i = v; + m += 2; + n += 2; + X[m] = 0.0; + X[n] = 0.0; + for (l = 0; l < len_avg / 2; ++l) { + t = 2 * l; + if ((i - l) >= 0 && (i - l) < len_cA) { + X[m] += wt->wave->lpr[t] * cA[i - l] + wt->wave->hpr[t] * cD[i - l]; + X[n] += wt->wave->lpr[t + 1] * cA[i - l] + wt->wave->hpr[t + 1] * cD[i - l]; + } + } + } +} + + +void idwt(wt_object wt, double *dwtop) { + int J,U,i,lf,N,N2,iter,k; + int app_len, det_len; + double *cA_up, *X_lp, *X_hp,*out,*temp; + + J = wt->J; + U = 2; + app_len = wt->length[0]; + out = (double*)malloc(sizeof(double)* (wt->siglength + 1)); + if (!strcmp(wt->ext, "per") && (!strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT"))) { + app_len = wt->length[0]; + det_len = wt->length[1]; + N = 2 * wt->length[J]; + lf = (wt->wave->lpr_len + wt->wave->hpr_len) / 2; + + cA_up = (double*)malloc(sizeof(double)* N); + temp = (double*)malloc(sizeof(double)* (N + lf)); + X_lp = (double*)malloc(sizeof(double)* (N + 2 * lf - 1)); + X_hp = (double*)malloc(sizeof(double)* (N + 2 * lf - 1)); + iter = app_len; + + for (i = 0; i < app_len; ++i) { + out[i] = wt->output[i]; + } + + for (i = 0; i < J; ++i) { + + idwt1(wt,temp,cA_up,out,det_len,wt->output+iter,det_len,X_lp,X_hp,out); + /* + idwt_per(wt,out, det_len, wt->output + iter, det_len, X_lp); + for (k = lf/2 - 1; k < 2 * det_len + lf/2 - 1; ++k) { + out[k - lf/2 + 1] = X_lp[k]; + } + */ + iter += det_len; + det_len = wt->length[i + 2]; + } + free(cA_up); + free(X_lp); + free(X_hp); + free(temp); + + } + else if (!strcmp(wt->ext, "per") && !strcmp(wt->cmethod, "direct")) { + app_len = wt->length[0]; + det_len = wt->length[1]; + N = 2 * wt->length[J]; + lf = (wt->wave->lpr_len + wt->wave->hpr_len) / 2; + + X_lp = (double*)malloc(sizeof(double)* (N + 2 * lf - 1)); + iter = app_len; + + for (i = 0; i < app_len; ++i) { + out[i] = wt->output[i]; + } + + for (i = 0; i < J; ++i) { + + //idwt1(wt, temp, cA_up, out, det_len, wt->output + iter, det_len, X_lp, X_hp, out); + + idwt_per(wt,out, det_len, wt->output + iter, det_len, X_lp); + for (k = lf/2 - 1; k < 2 * det_len + lf/2 - 1; ++k) { + out[k - lf/2 + 1] = X_lp[k]; + } + + iter += det_len; + det_len = wt->length[i + 2]; + } + + free(X_lp); + + } + else if (!strcmp(wt->ext, "sym") && !strcmp(wt->cmethod, "direct")) { + app_len = wt->length[0]; + det_len = wt->length[1]; + N = 2 * wt->length[J] - 1; + lf = (wt->wave->lpr_len + wt->wave->hpr_len) / 2; + + X_lp = (double*)malloc(sizeof(double)* (N + 2 * lf - 1)); + iter = app_len; + + for (i = 0; i < app_len; ++i) { + out[i] = wt->output[i]; + } + + for (i = 0; i < J; ++i) { + + //idwt1(wt, temp, cA_up, out, det_len, wt->output + iter, det_len, X_lp, X_hp, out); + + idwt_sym(wt, out, det_len, wt->output + iter, det_len, X_lp); + for (k = lf-2; k < 2 * det_len; ++k) { + out[k - lf + 2] = X_lp[k]; + } + + iter += det_len; + det_len = wt->length[i + 2]; + } + + free(X_lp); + + } + else if (!strcmp(wt->ext, "sym") && (!strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT"))) { + lf = wt->wave->lpd_len;// lpd and hpd have the same length + + N = 2 * wt->length[J] - 1; + cA_up = (double*)malloc(sizeof(double)* N); + X_lp = (double*)malloc(sizeof(double)* (N + lf - 1)); + X_hp = (double*)malloc(sizeof(double)* (N + lf - 1)); + + for (i = 0; i < app_len; ++i) { + out[i] = wt->output[i]; + } + + iter = app_len; + + for (i = 0; i < J; ++i) { + det_len = wt->length[i + 1]; + upsamp(out, det_len, U, cA_up); + N2 = 2 * wt->length[i + 1] - 1; + + if (wt->wave->lpr_len == wt->wave->hpr_len && (!strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT"))) { + wt->cobj = conv_init(N2, lf); + wt->cfftset = 1; + } + else if (!(wt->wave->lpr_len == wt->wave->hpr_len)) { + printf("Decomposition Filters must have the same length."); + exit(-1); + } + + wconv(wt, cA_up, N2, wt->wave->lpr, lf, X_lp); + + upsamp(wt->output + iter, det_len, U, cA_up); + + wconv(wt, cA_up, N2, wt->wave->hpr, lf, X_hp); + + for (k = lf - 2; k < N2 + 1; ++k) { + out[k - lf + 2] = X_lp[k] + X_hp[k]; + } + iter += det_len; + if (wt->wave->lpr_len == wt->wave->hpr_len && (!strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT"))) { + free_conv(wt->cobj); + wt->cfftset = 0; + } + } + + free(cA_up); + free(X_lp); + free(X_hp); + } + else { + printf("Signal extension can be either per or sym"); + exit(-1); + } + + for (i = 0; i < wt->siglength; ++i) { + dwtop[i] = out[i]; + } + + + free(out); + +} + +static void idwpt_per(wpt_object wt, double *cA, int len_cA, double *cD, int len_cD, double *X) { + int len_avg, i, l, m, n, t, l2; + + len_avg = (wt->wave->lpr_len + wt->wave->hpr_len) / 2; + l2 = len_avg / 2; + m = -2; + n = -1; + + for (i = 0; i < len_cA + l2 - 1; ++i) { + m += 2; + n += 2; + X[m] = 0.0; + X[n] = 0.0; + for (l = 0; l < l2; ++l) { + t = 2 * l; + if ((i - l) >= 0 && (i - l) < len_cA) { + X[m] += wt->wave->lpr[t] * cA[i - l] + wt->wave->hpr[t] * cD[i - l]; + X[n] += wt->wave->lpr[t + 1] * cA[i - l] + wt->wave->hpr[t + 1] * cD[i - l]; + } + else if ((i - l) >= len_cA && (i - l) < len_cA + len_avg - 1) { + X[m] += wt->wave->lpr[t] * cA[i - l - len_cA] + wt->wave->hpr[t] * cD[i - l - len_cA]; + X[n] += wt->wave->lpr[t + 1] * cA[i - l - len_cA] + wt->wave->hpr[t + 1] * cD[i - l - len_cA]; + } + else if ((i - l) < 0 && (i - l) > -l2) { + X[m] += wt->wave->lpr[t] * cA[len_cA + i - l] + wt->wave->hpr[t] * cD[len_cA + i - l]; + X[n] += wt->wave->lpr[t + 1] * cA[len_cA + i - l] + wt->wave->hpr[t + 1] * cD[len_cA + i - l]; + } + } + } +} + +static void idwpt_sym(wpt_object wt, double *cA, int len_cA, double *cD, int len_cD, double *X) { + int len_avg, i, l, m, n, t, v; + + len_avg = (wt->wave->lpr_len + wt->wave->hpr_len) / 2; + m = -2; + n = -1; + + for (v = 0; v < len_cA; ++v) { + i = v; + m += 2; + n += 2; + X[m] = 0.0; + X[n] = 0.0; + for (l = 0; l < len_avg / 2; ++l) { + t = 2 * l; + if ((i - l) >= 0 && (i - l) < len_cA) { + X[m] += wt->wave->lpr[t] * cA[i - l] + wt->wave->hpr[t] * cD[i - l]; + X[n] += wt->wave->lpr[t + 1] * cA[i - l] + wt->wave->hpr[t + 1] * cD[i - l]; + } + } + } +} + +void idwpt(wpt_object wt, double *dwtop) { + int J, U, i, lf, N, k,p,l; + int app_len, det_len, index, n1, llb, index2, index3, index4,indexp,xlen; + double *X_lp, *X, *out, *out2; + int *prep,*ptemp; + + J = wt->J; + U = 2; + app_len = wt->length[0]; + p = ipow2(J); + lf = (wt->wave->lpr_len + wt->wave->hpr_len) / 2; + xlen = p * (app_len + 2 * lf); + + X_lp = (double*)malloc(sizeof(double)* 2 * (wt->length[J] + lf)); + X = (double*)malloc(sizeof(double)* xlen); + out = (double*)malloc(sizeof(double)* wt->length[J]); + out2 = (double*)malloc(sizeof(double)* wt->length[J]); + prep = (int*)malloc(sizeof(int)* p); + ptemp = (int*)malloc(sizeof(int)* p); + n1 = 1; + llb = 1; + index2 = xlen / p; + indexp = 0; if (wt->basisvector[0] == 1) { for (i = 0; i < wt->siglength; ++i) { dwtop[i] = wt->output[i]; } - - } else { + + } + else { for (i = 0; i < J; ++i) { llb *= 2; n1 += llb; } - + for (i = 0; i < xlen; ++i) { X[i] = 0.0; } - + for (i = 0; i < llb; ++i) { - prep[i] = (int) wt->basisvector[n1 - llb + i]; + prep[i] = (int)wt->basisvector[n1 - llb + i]; ptemp[i] = 0; } - + if (!strcmp(wt->ext, "per")) { app_len = wt->length[0]; det_len = wt->length[1]; index = 0; - - + + for (i = 0; i < J; ++i) { p = ipow2(J - i - 1); det_len = wt->length[i + 1]; @@ -1599,15 +1802,15 @@ void idwpt(wpt_object wt, double *dwtop) { n1 -= llb; for (l = 0; l < llb; ++l) { if (ptemp[l] != 2) { - prep[l] = (int) wt->basisvector[n1 + l]; + prep[l] = (int)wt->basisvector[n1 + l]; } else { prep[l] = ptemp[l]; } ptemp[l] = 0; } - - + + for (l = 0; l < p; ++l) { if (prep[2 * l] == 1 && prep[2 * l + 1] == 1) { for (k = 0; k < det_len; ++k) { @@ -1669,34 +1872,34 @@ void idwpt(wpt_object wt, double *dwtop) { index3 += index2; index4 += 2 * indexp; } - + } - - + + /* idwt_per(wt, out, det_len, wt->output + iter, det_len, X_lp); for (k = lf / 2 - 1; k < 2 * det_len + lf / 2 - 1; ++k) { - out[k - lf / 2 + 1] = X_lp[k]; + out[k - lf / 2 + 1] = X_lp[k]; } - + iter += det_len; det_len = wt->length[i + 2]; */ llb /= 2; indexp = index2; } - + //free(X_lp); - + } else if (!strcmp(wt->ext, "sym")) { app_len = wt->length[0]; det_len = wt->length[1]; N = 2 * wt->length[J] - 1; - + //X_lp = (double*)malloc(sizeof(double)* (N + 2 * lf - 1)); index = 0; - + for (i = 0; i < J; ++i) { p = ipow2(J - i - 1); det_len = wt->length[i + 1]; @@ -1707,15 +1910,15 @@ void idwpt(wpt_object wt, double *dwtop) { n1 -= llb; for (l = 0; l < llb; ++l) { if (ptemp[l] != 2) { - prep[l] = (int) wt->basisvector[n1 + l]; + prep[l] = (int)wt->basisvector[n1 + l]; } else { prep[l] = ptemp[l]; } ptemp[l] = 0; } - - + + for (l = 0; l < p; ++l) { if (prep[2 * l] == 1 && prep[2 * l + 1] == 1) { for (k = 0; k < det_len; ++k) { @@ -1777,779 +1980,807 @@ void idwpt(wpt_object wt, double *dwtop) { index3 += index2; index4 += 2 * indexp; } - + } - + //idwt1(wt, temp, cA_up, out, det_len, wt->output + iter, det_len, X_lp, X_hp, out); /* idwpt_sym(wt, out, det_len, wt->output + iter, det_len, X_lp); for (k = lf - 2; k < 2 * det_len; ++k) { - out[k - lf + 2] = X_lp[k]; + out[k - lf + 2] = X_lp[k]; } - + iter += det_len; det_len = wt->length[i + 2]; */ llb /= 2; indexp = index2; } - + //free(X_lp); - + } else { printf("Signal extension can be either per or sym"); exit(-1); } - + for (i = 0; i < wt->siglength; ++i) { //printf("%g ", X[i]); dwtop[i] = X[i]; } - - } - - free(out); - free(X_lp); - free(X); - free(out2); - free(prep); - free(ptemp); -} - - -static void swt_per(wt_object wt,int M, double *inp, int N, double *cA, int len_cA, double *cD, int len_cD) { - int l, l2, isodd, i, t, len_avg,j; - - len_avg = M * wt->wave->lpd_len; - l2 = len_avg / 2; - isodd = N % 2; - - for (i = 0; i < len_cA; ++i) { - t = i + l2; - cA[i] = 0.0; - cD[i] = 0.0; - l = -1; - for (j = 0; j < len_avg; j+=M) { - l++; - while (j >= len_cA) { - j -= len_cA; - } - if ((t - j) >= l2 && (t -j) < N) { - cA[i] += wt->wave->lpd[l] * inp[t - j]; - cD[i] += wt->wave->hpd[l] * inp[t - j]; - } - else if ((t - j) < l2 && (t - j) >= 0) { - cA[i] += wt->wave->lpd[l] * inp[t - j]; - cD[i] += wt->wave->hpd[l] * inp[t - j]; - } - else if ((t - j) < 0) { - cA[i] += wt->wave->lpd[l] * inp[t - j + N]; - cD[i] += wt->wave->hpd[l] * inp[t - j + N]; - } - else if ((t - j) >= N && isodd == 0) { - cA[i] += wt->wave->lpd[l] * inp[t - j - N]; - cD[i] += wt->wave->hpd[l] * inp[t - j - N]; - } - else if ((t - j) >= N && isodd == 1) { - if (t - l != N) { - cA[i] += wt->wave->lpd[l] * inp[t - j - (N + 1)]; - cD[i] += wt->wave->hpd[l] * inp[t - j - (N + 1)]; - } - else { - cA[i] += wt->wave->lpd[l] * inp[N - 1]; - cD[i] += wt->wave->hpd[l] * inp[N - 1]; - } - } - - } - } - - -} - -static void swt_fft(wt_object wt, double *inp) { - int i, J, temp_len, iter, M, N, len_filt; - int lenacc; - double *low_pass, *high_pass,*sig,*cA,*cD; - - temp_len = wt->siglength; - J = wt->J; - wt->length[0] = wt->length[J] = temp_len; - wt->outlength = wt->length[J+1] = (J + 1) * temp_len; - M = 1; - for (iter = 1; iter < J; ++iter) { - M = 2 * M; - wt->length[iter] = temp_len; - } - - len_filt = wt->wave->filtlength; - - low_pass = (double*)malloc(sizeof(double)* M * len_filt); - high_pass = (double*)malloc(sizeof(double)* M * len_filt); - sig = (double*)malloc(sizeof(double)* (M * len_filt + temp_len + (temp_len%2))); - cA = (double*)malloc(sizeof(double)* (2 * M * len_filt + temp_len + (temp_len % 2)) - 1); - cD = (double*)malloc(sizeof(double)* (2 * M * len_filt + temp_len + (temp_len % 2)) - 1); - - M = 1; - - for (i = 0; i < temp_len; ++i) { - wt->params[i] = inp[i]; - } - - lenacc = wt->outlength; - - for (iter = 0; iter < J; ++iter) { - lenacc -= temp_len; - if (iter > 0) { - M = 2 * M; - N = M * len_filt; - upsamp2(wt->wave->lpd, wt->wave->lpd_len, M, low_pass); - upsamp2(wt->wave->hpd, wt->wave->hpd_len, M, high_pass); - } - else { - N = len_filt; - for (i = 0; i < N; ++i) { - low_pass[i] = wt->wave->lpd[i]; - high_pass[i] = wt->wave->hpd[i]; - } - } - - //swt_per(wt,M, wt->params, temp_len, cA, temp_len, cD,temp_len); - - per_ext(wt->params, temp_len, N / 2, sig); - - if (wt->wave->lpd_len == wt->wave->hpd_len && (!strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT"))) { - wt->cobj = conv_init(N + temp_len + (temp_len % 2), N); - wt->cfftset = 1; - } - else if (!(wt->wave->lpd_len == wt->wave->hpd_len)) { - printf("Decomposition Filters must have the same length."); - exit(-1); - } - - - wconv(wt, sig, N + temp_len + (temp_len % 2), low_pass, N, cA); - - wconv(wt, sig, N + temp_len + (temp_len % 2), high_pass, N, cD); - - if (wt->wave->lpd_len == wt->wave->hpd_len && (!strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT"))) { - free_conv(wt->cobj); - wt->cfftset = 0; - } - - for (i = 0; i < temp_len; ++i) { - wt->params[i] = cA[N + i]; - wt->params[lenacc + i] = cD[N + i]; - } - - - } - - free(low_pass); - free(high_pass); - free(sig); - free(cA); - free(cD); -} - -static void swt_direct(wt_object wt, double *inp) { - int i, J, temp_len, iter, M, N; - int lenacc, len_filt; - double *cA, *cD; - - temp_len = wt->siglength; - J = wt->J; - wt->length[0] = wt->length[J] = temp_len; - wt->outlength = wt->length[J + 1] = (J + 1) * temp_len; - len_filt = wt->wave->filtlength; - M = 1; - for (iter = 1; iter < J; ++iter) { - M = 2 * M; - wt->length[iter] = temp_len; - } - - - cA = (double*)malloc(sizeof(double)* temp_len); - cD = (double*)malloc(sizeof(double)* temp_len); - - M = 1; - - for (i = 0; i < temp_len; ++i) { - wt->params[i] = inp[i]; - } - - lenacc = wt->outlength; - - for (iter = 0; iter < J; ++iter) { - lenacc -= temp_len; - if (iter > 0) { - M = 2 * M; - N = M * len_filt; - } - else { - N = len_filt; - } - - swt_per(wt, M, wt->params, temp_len, cA, temp_len, cD, temp_len); - - - for (i = 0; i < temp_len; ++i) { - wt->params[i] = cA[i]; - wt->params[lenacc + i] = cD[i]; - } - - } - - free(cA); - free(cD); - -} - - -void swt(wt_object wt, double *inp) { - if (!strcmp(wt->method, "swt") && !strcmp(wt->cmethod, "direct") ) { - swt_direct(wt,inp); - } - else if (!strcmp(wt->method, "swt") && (!strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT"))) { - swt_fft(wt, inp); - } - else { - printf("SWT Only accepts two methods - direct and fft"); - exit(-1); - } -} - -void iswt(wt_object wt, double *swtop) { - int N, lf, iter,i,J,index,value,count,len; - int index_shift,len0,U,N1,index2; - double *appx1, *det1,*appx_sig,*det_sig,*cL0,*cH0,*tempx,*oup00L,*oup00H,*oup00,*oup01,*appx2,*det2; - - N = wt->siglength; - J = wt->J; - U = 2; - lf = wt->wave->lpr_len; - - appx_sig = (double*)malloc(sizeof(double)* N); - det_sig = (double*)malloc(sizeof(double)* N); - appx1 = (double*)malloc(sizeof(double)* N); - det1 = (double*)malloc(sizeof(double)* N); - appx2 = (double*)malloc(sizeof(double)* N); - det2 = (double*)malloc(sizeof(double)* N); - tempx = (double*)malloc(sizeof(double)* N); - cL0 = (double*)malloc(sizeof(double)* (N + (N%2) + lf)); - cH0 = (double*)malloc(sizeof(double)* (N + (N % 2) + lf)); - oup00L = (double*)malloc(sizeof(double)* (N + 2 * lf)); - oup00H = (double*)malloc(sizeof(double)* (N + 2 * lf)); - oup00 = (double*)malloc(sizeof(double)* N); - oup01 = (double*)malloc(sizeof(double)* N); - - - - for (iter = 0; iter < J; ++iter) { - for (i = 0; i < N; ++i) { - swtop[i] = 0.0; - } - if (iter == 0) { - for (i = 0; i < N; ++i) { - appx_sig[i] = wt->output[i]; - det_sig[i] = wt->output[N + i]; - } - } - else { - for (i = 0; i < N; ++i) { - det_sig[i] = wt->output[(iter + 1) * N + i]; - } - } - - value = (int)pow(2.0, (double) (J - 1 - iter)); - - for (count = 0; count < value; count++) { - len = 0; - for (index = count; index < N; index += value) { - appx1[len] = appx_sig[index]; - det1[len] = det_sig[index]; - len++; - } - - - //SHIFT 0 - len0 = 0; - - for (index_shift = 0; index_shift < len; index_shift += 2) { - appx2[len0] = appx1[index_shift]; - det2[len0] = det1[index_shift]; - len0++; - } - upsamp2(appx2, len0, U, tempx); - per_ext(tempx, 2 * len0, lf / 2, cL0); - - upsamp2(det2, len0, U, tempx); - per_ext(tempx, 2 * len0, lf / 2, cH0); - - N1 = 2 * len0 + lf; - - if (wt->wave->lpr_len == wt->wave->hpr_len && (!strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT"))) { - wt->cobj = conv_init(N1, lf); - wt->cfftset = 1; - } - else if (!(wt->wave->lpd_len == wt->wave->hpd_len)) { - printf("Decomposition Filters must have the same length."); - exit(-1); - } - - wconv(wt, cL0, N1, wt->wave->lpr, lf, oup00L); - - wconv(wt, cH0, N1, wt->wave->hpr, lf, oup00H); - - for (i = lf - 1; i < 2 * len0 + lf - 1; ++i) { - oup00[i - lf + 1] = oup00L[i] + oup00H[i]; - } - - //SHIFT 1 - - len0 = 0; - - for (index_shift = 1; index_shift < len; index_shift += 2) { - appx2[len0] = appx1[index_shift]; - det2[len0] = det1[index_shift]; - len0++; - } - - upsamp2(appx2, len0, U, tempx); - per_ext(tempx, 2 * len0, lf / 2, cL0); - - upsamp2(det2, len0, U, tempx); - per_ext(tempx, 2 * len0, lf / 2, cH0); - - N1 = 2 * len0 + lf; - - wconv(wt, cL0, N1, wt->wave->lpr, lf, oup00L); - - wconv(wt, cH0, N1, wt->wave->hpr, lf, oup00H); - - for (i = lf - 1; i < 2 * len0 + lf - 1; ++i) { - oup01[i - lf + 1] = oup00L[i] + oup00H[i]; - } - - circshift(oup01, 2*len0, -1); - - index2 = 0; - - for (index = count; index < N; index += value) { - swtop[index] = (oup00[index2] + oup01[index2]) / 2.0; - index2++; - } - - } - for (i = 0; i < N; ++i) { - appx_sig[i] = swtop[i]; - } - - } - - - - free(appx_sig); - free(det_sig); - free(appx1); - free(det1); - free(tempx); - free(cL0); - free(cH0); - free(oup00L); - free(oup00H); - free(oup00); - free(oup01); - free(appx2); - free(det2); -} - -static void modwt_per(wt_object wt, int M, double *inp, int N, double *cA, int len_cA, double *cD, int len_cD) { - int l, i, t, len_avg; - double s; - double *filt; - len_avg = wt->wave->lpd_len; - - filt = (double*)malloc(sizeof(double)* 2 * len_avg); - s = sqrt(2.0); - for (i = 0; i < len_avg; ++i) { - filt[i] = wt->wave->lpd[i] / s; - filt[len_avg + i] = wt->wave->hpd[i] / s; - } - - for (i = 0; i < len_cA; ++i) { - t = i; - cA[i] = filt[0] * inp[t]; - cD[i] = filt[len_avg] * inp[t]; - for (l = 1; l < len_avg; l++) { - t -= M; - while (t >= len_cA) { - t -= len_cA; - } - while (t < 0) { - t += len_cA; - } - - cA[i] += filt[l] * inp[t]; - cD[i] += filt[len_avg + l] * inp[t]; - - } - } - free(filt); -} - -void modwt(wt_object wt, double *inp) { - int i, J, temp_len, iter, M, N; - int lenacc, len_filt; - double *cA, *cD; - - temp_len = wt->siglength; - J = wt->J; - wt->length[0] = wt->length[J] = temp_len; - wt->outlength = wt->length[J + 1] = (J + 1) * temp_len; - len_filt = wt->wave->filtlength; - M = 1; - for (iter = 1; iter < J; ++iter) { - M = 2 * M; - wt->length[iter] = temp_len; - } - - - cA = (double*)malloc(sizeof(double)* temp_len); - cD = (double*)malloc(sizeof(double)* temp_len); - - M = 1; - - for (i = 0; i < temp_len; ++i) { - wt->params[i] = inp[i]; - } - - lenacc = wt->outlength; - - for (iter = 0; iter < J; ++iter) { - lenacc -= temp_len; - if (iter > 0) { - M = 2 * M; - N = M * len_filt; - } - else { - N = len_filt; - } - - modwt_per(wt, M, wt->params, temp_len, cA, temp_len, cD, temp_len); - - - for (i = 0; i < temp_len; ++i) { - wt->params[i] = cA[i]; - wt->params[lenacc + i] = cD[i]; - } - - } - - free(cA); - free(cD); - -} - -static void imodwt_per(wt_object wt,int M, double *cA, int len_cA, double *cD, int len_cD, double *X) { - int len_avg, i, l, t; - double s; - double *filt; - len_avg = wt->wave->lpd_len; - - filt = (double*)malloc(sizeof(double)* 2 * len_avg); - s = sqrt(2.0); - for (i = 0; i < len_avg; ++i) { - filt[i] = wt->wave->lpd[i] / s; - filt[len_avg + i] = wt->wave->hpd[i] / s; - } - - - for (i = 0; i < len_cA; ++i) { - t = i; - X[i] = (filt[0] * cA[t]) + (filt[len_avg] * cD[t]); - for (l = 1; l < len_avg; l++) { - t += M; - while (t >= len_cA) { - t -= len_cA; - } - while (t < 0) { - t += len_cA; - } - - X[i] += (filt[l] * cA[t]) + (filt[len_avg + l] * cD[t]); - - } - } - free(filt); -} - -void imodwt(wt_object wt, double *dwtop) { - int N, lf, iter, i, J, j, U; - int lenacc,M; - double *X; - - N = wt->siglength; - J = wt->J; - U = 2; - lf = wt->wave->lpr_len; - lenacc = N; - M = (int)pow(2.0, (double)J - 1.0); - //M = 1; - X = (double*)malloc(sizeof(double)* N); - - for (i = 0; i < N; ++i) { - dwtop[i] = wt->output[i]; - } - - for (iter = 0; iter < J; ++iter) { - if (iter > 0) { - M = M / 2; - } - imodwt_per(wt, M, dwtop, N, wt->params + lenacc, N, X); - /* - for (j = lf - 1; j < N; ++j) { - dwtop[j - lf + 1] = X[j]; - } - for (j = 0; j < lf - 1; ++j) { - dwtop[N - lf + 1 + j] = X[j]; - } - */ - for (j = 0; j < N; ++j) { - dwtop[j] = X[j]; - } - - lenacc += N; - } - free(X); -} - -void setDWTExtension(wt_object wt, char *extension) { - if (!strcmp(extension, "sym")) { - strcpy(wt->ext, "sym"); - } - else if (!strcmp(extension, "per")) { - strcpy(wt->ext, "per"); - } - else { - printf("Signal extension can be either per or sym"); - exit(-1); - } -} - -void setWTREEExtension(wtree_object wt, char *extension) { - if (!strcmp(extension, "sym")) { - strcpy(wt->ext, "sym"); - } - else if (!strcmp(extension, "per")) { - strcpy(wt->ext, "per"); - } - else { - printf("Signal extension can be either per or sym"); - exit(-1); - } -} - -void setDWPTExtension(wpt_object wt, char *extension) { - if (!strcmp(extension, "sym")) { - strcpy(wt->ext, "sym"); - } - else if (!strcmp(extension, "per")) { - strcpy(wt->ext, "per"); - } - else { - printf("Signal extension can be either per or sym"); - exit(-1); - } -} - -void setDWPTEntropy(wpt_object wt, char *entropy, double eparam) { - if (!strcmp(entropy, "shannon")) { - strcpy(wt->entropy, "shannon"); - } - else if (!strcmp(entropy, "threshold")) { - strcpy(wt->entropy, "threshold"); - wt ->eparam = eparam; - } - else if (!strcmp(entropy, "norm")) { - strcpy(wt->entropy, "norm"); - wt->eparam = eparam; - } - else if (!strcmp(entropy, "logenergy") || !strcmp(entropy, "log energy") || !strcmp(entropy, "energy")) { - strcpy(wt->entropy, "logenergy"); - } - else { - printf("Entropy should be one of shannon, threshold, norm or logenergy"); - exit(-1); - } -} - -void setWTConv(wt_object wt, char *cmethod) { - if (!strcmp(cmethod, "fft") || !strcmp(cmethod, "FFT")) { - strcpy(wt->cmethod, "fft"); - } - else if (!strcmp(cmethod, "direct")) { - strcpy(wt->cmethod, "direct"); - } - else { - printf("Convolution Only accepts two methods - direct and fft"); - exit(-1); - } -} - -void wave_summary(wave_object obj) { - int i,N; - N = obj->filtlength; - printf("\n"); - printf("Wavelet Name : %s \n",obj->wname); - printf("\n"); - printf("Wavelet Filters \n\n"); - printf("lpd : ["); - for (i = 0; i < N-1; ++i) { - printf("%g,", obj->lpd[i]); - } - printf("%g", obj->lpd[N-1]); - printf("] \n\n"); - printf("hpd : ["); - for (i = 0; i < N-1; ++i) { - printf("%g,", obj->hpd[i]); - } - printf("%g", obj->hpd[N - 1]); - printf("] \n\n"); - printf("lpr : ["); - for (i = 0; i < N-1; ++i) { - printf("%g,", obj->lpr[i]); - } - printf("%g", obj->lpr[N - 1]); - printf("] \n\n"); - printf("hpr : ["); - for (i = 0; i < N-1; ++i) { - printf("%g,", obj->hpr[i]); - } - printf("%g", obj->hpr[N - 1]); - printf("] \n\n"); -} - -void wt_summary(wt_object wt) { - int i; - int J,t; - J = wt->J; - wave_summary(wt->wave); - printf("\n"); - printf("Wavelet Transform : %s \n", wt->method); - printf("\n"); - printf("Signal Extension : %s \n", wt->ext); - printf("\n"); - printf("Convolutional Method : %s \n", wt->cmethod); - printf("\n"); - printf("Number of Decomposition Levels %d \n", wt->J); - printf("\n"); - printf("Length of Input Signal %d \n", wt->siglength); - printf("\n"); - printf("Length of WT Output Vector %d \n", wt->outlength); - printf("\n"); - printf("Wavelet Coefficients are contained in vector : %s \n", "output"); - printf("\n"); - printf("Approximation Coefficients \n"); - printf("Level %d Access : output[%d] Length : %d \n", 1, 0, wt->length[0]); - printf("\n"); - printf("Detail Coefficients \n"); - t = wt->length[0]; - for (i = 0; i < J; ++i) { - printf("Level %d Access : output[%d] Length : %d \n", i + 1,t,wt->length[i+1]); - t += wt->length[i+1]; - } - printf("\n"); - -} - -void wtree_summary(wtree_object wt) { - int i,k,p2; - int J,t; - J = wt->J; - wave_summary(wt->wave); - printf("\n"); - printf("Wavelet Transform : %s \n", wt->method); - printf("\n"); - printf("Signal Extension : %s \n", wt->ext); - printf("\n"); - printf("Number of Decomposition Levels %d \n", wt->J); - printf("\n"); - printf("Length of Input Signal %d \n", wt->siglength); - printf("\n"); - printf("Length of WT Output Vector %d \n", wt->outlength); - printf("\n"); - printf("Wavelet Coefficients are contained in vector : %s \n", "output"); - printf("\n"); - printf("Coefficients Access \n"); - t = 0; - p2 = 2; - for (i = 0; i < J; ++i) { - for (k = 0; k < p2; ++k) { - printf("Node %d %d Access : output[%d] Length : %d \n", i + 1, k, wt->nodelength[t], wt->length[J - i]); - t++; - } - p2 *= 2; - } - printf("\n"); - -} - -void wpt_summary(wpt_object wt) { - int i, k, p2; - int J, it1,it2; - J = wt->J; - wave_summary(wt->wave); - printf("\n"); - printf("Signal Extension : %s \n", wt->ext); - printf("\n"); - printf("Entropy : %s \n", wt->entropy); - printf("\n"); - printf("Number of Decomposition Levels %d \n", wt->J); - printf("\n"); - printf("Number of Active Nodes %d \n", wt->nodes); - printf("\n"); - printf("Length of Input Signal %d \n", wt->siglength); - printf("\n"); - printf("Length of WT Output Vector %d \n", wt->outlength); - printf("\n"); - printf("Wavelet Coefficients are contained in vector : %s \n", "output"); - printf("\n"); - printf("Coefficients Access \n"); - it1 = 1; - it2 = 0; - for (i = 0; i < J; ++i) { - it1 += ipow2(i + 1); - } - for (i = J; i > 0; --i) { - p2 = ipow2(i); - it1 -= p2; - for (k = 0; k < p2; ++k) { - if (wt->basisvector[it1 + k] == 1) { - printf("Node %d %d Access : output[%d] Length : %d \n", i, k, it2, wt->length[J - i + 1]); - it2 += wt->length[J - i + 1]; - } - } - } - - printf("\n"); - -} - -void wave_free(wave_object object) { - free(object); -} - -void wt_free(wt_object object) { - free(object); -} - -void wtree_free(wtree_object object) { - free(object); -} - -void wpt_free(wpt_object object) { - free(object); -} + } + + + free(out); + free(X_lp); + free(X); + free(out2); + free(prep); + free(ptemp); +} + + +static void swt_per(wt_object wt,int M, double *inp, int N, double *cA, int len_cA, double *cD, int len_cD) { + int l, l2, isodd, i, t, len_avg,j; + + len_avg = M * wt->wave->lpd_len; + l2 = len_avg / 2; + isodd = N % 2; + + for (i = 0; i < len_cA; ++i) { + t = i + l2; + cA[i] = 0.0; + cD[i] = 0.0; + l = -1; + for (j = 0; j < len_avg; j+=M) { + l++; + while (j >= len_cA) { + j -= len_cA; + } + if ((t - j) >= l2 && (t -j) < N) { + cA[i] += wt->wave->lpd[l] * inp[t - j]; + cD[i] += wt->wave->hpd[l] * inp[t - j]; + } + else if ((t - j) < l2 && (t - j) >= 0) { + cA[i] += wt->wave->lpd[l] * inp[t - j]; + cD[i] += wt->wave->hpd[l] * inp[t - j]; + } + else if ((t - j) < 0) { + cA[i] += wt->wave->lpd[l] * inp[t - j + N]; + cD[i] += wt->wave->hpd[l] * inp[t - j + N]; + } + else if ((t - j) >= N && isodd == 0) { + cA[i] += wt->wave->lpd[l] * inp[t - j - N]; + cD[i] += wt->wave->hpd[l] * inp[t - j - N]; + } + else if ((t - j) >= N && isodd == 1) { + if (t - l != N) { + cA[i] += wt->wave->lpd[l] * inp[t - j - (N + 1)]; + cD[i] += wt->wave->hpd[l] * inp[t - j - (N + 1)]; + } + else { + cA[i] += wt->wave->lpd[l] * inp[N - 1]; + cD[i] += wt->wave->hpd[l] * inp[N - 1]; + } + } + + } + } + + +} + +static void swt_fft(wt_object wt, double *inp) { + int i, J, temp_len, iter, M, N, len_filt; + int lenacc; + double *low_pass, *high_pass,*sig,*cA,*cD; + + temp_len = wt->siglength; + J = wt->J; + wt->length[0] = wt->length[J] = temp_len; + wt->outlength = wt->length[J+1] = (J + 1) * temp_len; + M = 1; + for (iter = 1; iter < J; ++iter) { + M = 2 * M; + wt->length[iter] = temp_len; + } + + len_filt = wt->wave->filtlength; + + low_pass = (double*)malloc(sizeof(double)* M * len_filt); + high_pass = (double*)malloc(sizeof(double)* M * len_filt); + sig = (double*)malloc(sizeof(double)* (M * len_filt + temp_len + (temp_len%2))); + cA = (double*)malloc(sizeof(double)* (2 * M * len_filt + temp_len + (temp_len % 2)) - 1); + cD = (double*)malloc(sizeof(double)* (2 * M * len_filt + temp_len + (temp_len % 2)) - 1); + + M = 1; + + for (i = 0; i < temp_len; ++i) { + wt->params[i] = inp[i]; + } + + lenacc = wt->outlength; + + for (iter = 0; iter < J; ++iter) { + lenacc -= temp_len; + if (iter > 0) { + M = 2 * M; + N = M * len_filt; + upsamp2(wt->wave->lpd, wt->wave->lpd_len, M, low_pass); + upsamp2(wt->wave->hpd, wt->wave->hpd_len, M, high_pass); + } + else { + N = len_filt; + for (i = 0; i < N; ++i) { + low_pass[i] = wt->wave->lpd[i]; + high_pass[i] = wt->wave->hpd[i]; + } + } + + //swt_per(wt,M, wt->params, temp_len, cA, temp_len, cD,temp_len); + + per_ext(wt->params, temp_len, N / 2, sig); + + if (wt->wave->lpd_len == wt->wave->hpd_len && (!strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT"))) { + wt->cobj = conv_init(N + temp_len + (temp_len % 2), N); + wt->cfftset = 1; + } + else if (!(wt->wave->lpd_len == wt->wave->hpd_len)) { + printf("Decomposition Filters must have the same length."); + exit(-1); + } + + + wconv(wt, sig, N + temp_len + (temp_len % 2), low_pass, N, cA); + + wconv(wt, sig, N + temp_len + (temp_len % 2), high_pass, N, cD); + + if (wt->wave->lpd_len == wt->wave->hpd_len && (!strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT"))) { + free_conv(wt->cobj); + wt->cfftset = 0; + } + + for (i = 0; i < temp_len; ++i) { + wt->params[i] = cA[N + i]; + wt->params[lenacc + i] = cD[N + i]; + } + + + } + + free(low_pass); + free(high_pass); + free(sig); + free(cA); + free(cD); +} + +static void swt_direct(wt_object wt, double *inp) { + int i, J, temp_len, iter, M, N; + int lenacc, len_filt; + double *cA, *cD; + + temp_len = wt->siglength; + J = wt->J; + wt->length[0] = wt->length[J] = temp_len; + wt->outlength = wt->length[J + 1] = (J + 1) * temp_len; + len_filt = wt->wave->filtlength; + M = 1; + for (iter = 1; iter < J; ++iter) { + M = 2 * M; + wt->length[iter] = temp_len; + } + + + cA = (double*)malloc(sizeof(double)* temp_len); + cD = (double*)malloc(sizeof(double)* temp_len); + + M = 1; + + for (i = 0; i < temp_len; ++i) { + wt->params[i] = inp[i]; + } + + lenacc = wt->outlength; + + for (iter = 0; iter < J; ++iter) { + lenacc -= temp_len; + if (iter > 0) { + M = 2 * M; + N = M * len_filt; + } + else { + N = len_filt; + } + + swt_per(wt, M, wt->params, temp_len, cA, temp_len, cD, temp_len); + + + for (i = 0; i < temp_len; ++i) { + wt->params[i] = cA[i]; + wt->params[lenacc + i] = cD[i]; + } + + } + + free(cA); + free(cD); + +} + + +void swt(wt_object wt, double *inp) { + if (!strcmp(wt->method, "swt") && !strcmp(wt->cmethod, "direct") ) { + swt_direct(wt,inp); + } + else if (!strcmp(wt->method, "swt") && (!strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT"))) { + swt_fft(wt, inp); + } + else { + printf("SWT Only accepts two methods - direct and fft"); + exit(-1); + } +} + +void iswt(wt_object wt, double *swtop) { + int N, lf, iter,i,J,index,value,count,len; + int index_shift,len0,U,N1,index2; + double *appx1, *det1,*appx_sig,*det_sig,*cL0,*cH0,*tempx,*oup00L,*oup00H,*oup00,*oup01,*appx2,*det2; + + N = wt->siglength; + J = wt->J; + U = 2; + lf = wt->wave->lpr_len; + + appx_sig = (double*)malloc(sizeof(double)* N); + det_sig = (double*)malloc(sizeof(double)* N); + appx1 = (double*)malloc(sizeof(double)* N); + det1 = (double*)malloc(sizeof(double)* N); + appx2 = (double*)malloc(sizeof(double)* N); + det2 = (double*)malloc(sizeof(double)* N); + tempx = (double*)malloc(sizeof(double)* N); + cL0 = (double*)malloc(sizeof(double)* (N + (N%2) + lf)); + cH0 = (double*)malloc(sizeof(double)* (N + (N % 2) + lf)); + oup00L = (double*)malloc(sizeof(double)* (N + 2 * lf)); + oup00H = (double*)malloc(sizeof(double)* (N + 2 * lf)); + oup00 = (double*)malloc(sizeof(double)* N); + oup01 = (double*)malloc(sizeof(double)* N); + + + + for (iter = 0; iter < J; ++iter) { + for (i = 0; i < N; ++i) { + swtop[i] = 0.0; + } + if (iter == 0) { + for (i = 0; i < N; ++i) { + appx_sig[i] = wt->output[i]; + det_sig[i] = wt->output[N + i]; + } + } + else { + for (i = 0; i < N; ++i) { + det_sig[i] = wt->output[(iter + 1) * N + i]; + } + } + + value = (int)pow(2.0, (double) (J - 1 - iter)); + + for (count = 0; count < value; count++) { + len = 0; + for (index = count; index < N; index += value) { + appx1[len] = appx_sig[index]; + det1[len] = det_sig[index]; + len++; + } + + + //SHIFT 0 + len0 = 0; + + for (index_shift = 0; index_shift < len; index_shift += 2) { + appx2[len0] = appx1[index_shift]; + det2[len0] = det1[index_shift]; + len0++; + } + upsamp2(appx2, len0, U, tempx); + per_ext(tempx, 2 * len0, lf / 2, cL0); + + upsamp2(det2, len0, U, tempx); + per_ext(tempx, 2 * len0, lf / 2, cH0); + + N1 = 2 * len0 + lf; + + if (wt->wave->lpr_len == wt->wave->hpr_len && (!strcmp(wt->cmethod, "fft") || !strcmp(wt->cmethod, "FFT"))) { + wt->cobj = conv_init(N1, lf); + wt->cfftset = 1; + } + else if (!(wt->wave->lpd_len == wt->wave->hpd_len)) { + printf("Decomposition Filters must have the same length."); + exit(-1); + } + + wconv(wt, cL0, N1, wt->wave->lpr, lf, oup00L); + + wconv(wt, cH0, N1, wt->wave->hpr, lf, oup00H); + + for (i = lf - 1; i < 2 * len0 + lf - 1; ++i) { + oup00[i - lf + 1] = oup00L[i] + oup00H[i]; + } + + //SHIFT 1 + + len0 = 0; + + for (index_shift = 1; index_shift < len; index_shift += 2) { + appx2[len0] = appx1[index_shift]; + det2[len0] = det1[index_shift]; + len0++; + } + + upsamp2(appx2, len0, U, tempx); + per_ext(tempx, 2 * len0, lf / 2, cL0); + + upsamp2(det2, len0, U, tempx); + per_ext(tempx, 2 * len0, lf / 2, cH0); + + N1 = 2 * len0 + lf; + + wconv(wt, cL0, N1, wt->wave->lpr, lf, oup00L); + + wconv(wt, cH0, N1, wt->wave->hpr, lf, oup00H); + + for (i = lf - 1; i < 2 * len0 + lf - 1; ++i) { + oup01[i - lf + 1] = oup00L[i] + oup00H[i]; + } + + circshift(oup01, 2*len0, -1); + + index2 = 0; + + for (index = count; index < N; index += value) { + swtop[index] = (oup00[index2] + oup01[index2]) / 2.0; + index2++; + } + + } + for (i = 0; i < N; ++i) { + appx_sig[i] = swtop[i]; + } + + } + + + + free(appx_sig); + free(det_sig); + free(appx1); + free(det1); + free(tempx); + free(cL0); + free(cH0); + free(oup00L); + free(oup00H); + free(oup00); + free(oup01); + free(appx2); + free(det2); +} + +static void modwt_per(wt_object wt, int M, double *inp, int N, double *cA, int len_cA, double *cD, int len_cD) { + int l, i, t, len_avg; + double s; + double *filt; + len_avg = wt->wave->lpd_len; + + filt = (double*)malloc(sizeof(double)* 2 * len_avg); + s = sqrt(2.0); + for (i = 0; i < len_avg; ++i) { + filt[i] = wt->wave->lpd[i] / s; + filt[len_avg + i] = wt->wave->hpd[i] / s; + } + + for (i = 0; i < len_cA; ++i) { + t = i; + cA[i] = filt[0] * inp[t]; + cD[i] = filt[len_avg] * inp[t]; + for (l = 1; l < len_avg; l++) { + t -= M; + while (t >= len_cA) { + t -= len_cA; + } + while (t < 0) { + t += len_cA; + } + + cA[i] += filt[l] * inp[t]; + cD[i] += filt[len_avg + l] * inp[t]; + + } + } + free(filt); +} + +void modwt(wt_object wt, double *inp) { + int i, J, temp_len, iter, M, N; + int lenacc, len_filt; + double *cA, *cD; + + temp_len = wt->siglength; + J = wt->J; + wt->length[0] = wt->length[J] = temp_len; + wt->outlength = wt->length[J + 1] = (J + 1) * temp_len; + len_filt = wt->wave->filtlength; + M = 1; + for (iter = 1; iter < J; ++iter) { + M = 2 * M; + wt->length[iter] = temp_len; + } + + + cA = (double*)malloc(sizeof(double)* temp_len); + cD = (double*)malloc(sizeof(double)* temp_len); + + M = 1; + + for (i = 0; i < temp_len; ++i) { + wt->params[i] = inp[i]; + } + + lenacc = wt->outlength; + + for (iter = 0; iter < J; ++iter) { + lenacc -= temp_len; + if (iter > 0) { + M = 2 * M; + N = M * len_filt; + } + else { + N = len_filt; + } + + modwt_per(wt, M, wt->params, temp_len, cA, temp_len, cD, temp_len); + + + for (i = 0; i < temp_len; ++i) { + wt->params[i] = cA[i]; + wt->params[lenacc + i] = cD[i]; + } + + } + + free(cA); + free(cD); + +} + +static void imodwt_per(wt_object wt,int M, double *cA, int len_cA, double *cD, int len_cD, double *X) { + int len_avg, i, l, t; + double s; + double *filt; + len_avg = wt->wave->lpd_len; + + filt = (double*)malloc(sizeof(double)* 2 * len_avg); + s = sqrt(2.0); + for (i = 0; i < len_avg; ++i) { + filt[i] = wt->wave->lpd[i] / s; + filt[len_avg + i] = wt->wave->hpd[i] / s; + } + + + for (i = 0; i < len_cA; ++i) { + t = i; + X[i] = (filt[0] * cA[t]) + (filt[len_avg] * cD[t]); + for (l = 1; l < len_avg; l++) { + t += M; + while (t >= len_cA) { + t -= len_cA; + } + while (t < 0) { + t += len_cA; + } + + X[i] += (filt[l] * cA[t]) + (filt[len_avg + l] * cD[t]); + + } + } + free(filt); +} + +void imodwt(wt_object wt, double *dwtop) { + int N, lf, iter, i, J, j, U; + int lenacc,M; + double *X; + + N = wt->siglength; + J = wt->J; + U = 2; + lf = wt->wave->lpr_len; + lenacc = N; + M = (int)pow(2.0, (double)J - 1.0); + //M = 1; + X = (double*)malloc(sizeof(double)* N); + + for (i = 0; i < N; ++i) { + dwtop[i] = wt->output[i]; + } + + for (iter = 0; iter < J; ++iter) { + if (iter > 0) { + M = M / 2; + } + imodwt_per(wt, M, dwtop, N, wt->params + lenacc, N, X); + /* + for (j = lf - 1; j < N; ++j) { + dwtop[j - lf + 1] = X[j]; + } + for (j = 0; j < lf - 1; ++j) { + dwtop[N - lf + 1 + j] = X[j]; + } + */ + for (j = 0; j < N; ++j) { + dwtop[j] = X[j]; + } + + lenacc += N; + } + free(X); +} + +void setDWTExtension(wt_object wt, char *extension) { + if (!strcmp(extension, "sym")) { + strcpy(wt->ext, "sym"); + } + else if (!strcmp(extension, "per")) { + strcpy(wt->ext, "per"); + } + else { + printf("Signal extension can be either per or sym"); + exit(-1); + } +} + +void setWTREEExtension(wtree_object wt, char *extension) { + if (!strcmp(extension, "sym")) { + strcpy(wt->ext, "sym"); + } + else if (!strcmp(extension, "per")) { + strcpy(wt->ext, "per"); + } + else { + printf("Signal extension can be either per or sym"); + exit(-1); + } +} + +void setDWPTExtension(wpt_object wt, char *extension) { + if (!strcmp(extension, "sym")) { + strcpy(wt->ext, "sym"); + } + else if (!strcmp(extension, "per")) { + strcpy(wt->ext, "per"); + } + else { + printf("Signal extension can be either per or sym"); + exit(-1); + } +} + +void setDWPTEntropy(wpt_object wt, char *entropy, double eparam) { + if (!strcmp(entropy, "shannon")) { + strcpy(wt->entropy, "shannon"); + } + else if (!strcmp(entropy, "threshold")) { + strcpy(wt->entropy, "threshold"); + wt ->eparam = eparam; + } + else if (!strcmp(entropy, "norm")) { + strcpy(wt->entropy, "norm"); + wt->eparam = eparam; + } + else if (!strcmp(entropy, "logenergy") || !strcmp(entropy, "log energy") || !strcmp(entropy, "energy")) { + strcpy(wt->entropy, "logenergy"); + } + else { + printf("Entropy should be one of shannon, threshold, norm or logenergy"); + exit(-1); + } +} + +void setWTConv(wt_object wt, char *cmethod) { + if (!strcmp(cmethod, "fft") || !strcmp(cmethod, "FFT")) { + strcpy(wt->cmethod, "fft"); + } + else if (!strcmp(cmethod, "direct")) { + strcpy(wt->cmethod, "direct"); + } + else { + printf("Convolution Only accepts two methods - direct and fft"); + exit(-1); + } +} + +void wave_summary(wave_object obj) { + int i,N; + N = obj->filtlength; + printf("\n"); + printf("Wavelet Name : %s \n",obj->wname); + printf("\n"); + printf("Wavelet Filters \n\n"); + printf("lpd : ["); + for (i = 0; i < N-1; ++i) { + printf("%g,", obj->lpd[i]); + } + printf("%g", obj->lpd[N-1]); + printf("] \n\n"); + printf("hpd : ["); + for (i = 0; i < N-1; ++i) { + printf("%g,", obj->hpd[i]); + } + printf("%g", obj->hpd[N - 1]); + printf("] \n\n"); + printf("lpr : ["); + for (i = 0; i < N-1; ++i) { + printf("%g,", obj->lpr[i]); + } + printf("%g", obj->lpr[N - 1]); + printf("] \n\n"); + printf("hpr : ["); + for (i = 0; i < N-1; ++i) { + printf("%g,", obj->hpr[i]); + } + printf("%g", obj->hpr[N - 1]); + printf("] \n\n"); +} + +void wt_summary(wt_object wt) { + int i; + int J,t; + J = wt->J; + wave_summary(wt->wave); + printf("\n"); + printf("Wavelet Transform : %s \n", wt->method); + printf("\n"); + printf("Signal Extension : %s \n", wt->ext); + printf("\n"); + printf("Convolutional Method : %s \n", wt->cmethod); + printf("\n"); + printf("Number of Decomposition Levels %d \n", wt->J); + printf("\n"); + printf("Length of Input Signal %d \n", wt->siglength); + printf("\n"); + printf("Length of WT Output Vector %d \n", wt->outlength); + printf("\n"); + printf("Wavelet Coefficients are contained in vector : %s \n", "output"); + printf("\n"); + printf("Approximation Coefficients \n"); + printf("Level %d Access : output[%d] Length : %d \n", 1, 0, wt->length[0]); + printf("\n"); + printf("Detail Coefficients \n"); + t = wt->length[0]; + for (i = 0; i < J; ++i) { + printf("Level %d Access : output[%d] Length : %d \n", i + 1,t,wt->length[i+1]); + t += wt->length[i+1]; + } + printf("\n"); + +} + +void wtree_summary(wtree_object wt) { + int i,k,p2; + int J,t; + J = wt->J; + wave_summary(wt->wave); + printf("\n"); + printf("Wavelet Transform : %s \n", wt->method); + printf("\n"); + printf("Signal Extension : %s \n", wt->ext); + printf("\n"); + printf("Number of Decomposition Levels %d \n", wt->J); + printf("\n"); + printf("Length of Input Signal %d \n", wt->siglength); + printf("\n"); + printf("Length of WT Output Vector %d \n", wt->outlength); + printf("\n"); + printf("Wavelet Coefficients are contained in vector : %s \n", "output"); + printf("\n"); + printf("Coefficients Access \n"); + t = 0; + p2 = 2; + for (i = 0; i < J; ++i) { + for (k = 0; k < p2; ++k) { + printf("Node %d %d Access : output[%d] Length : %d \n", i + 1, k, wt->nodelength[t], wt->length[J - i]); + t++; + } + p2 *= 2; + } + printf("\n"); + +} + +void wpt_summary(wpt_object wt) { + int i, k, p2; + int J, it1,it2; + J = wt->J; + wave_summary(wt->wave); + printf("\n"); + printf("Signal Extension : %s \n", wt->ext); + printf("\n"); + printf("Entropy : %s \n", wt->entropy); + printf("\n"); + printf("Number of Decomposition Levels %d \n", wt->J); + printf("\n"); + printf("Number of Active Nodes %d \n", wt->nodes); + printf("\n"); + printf("Length of Input Signal %d \n", wt->siglength); + printf("\n"); + printf("Length of WT Output Vector %d \n", wt->outlength); + printf("\n"); + printf("Wavelet Coefficients are contained in vector : %s \n", "output"); + printf("\n"); + printf("Coefficients Access \n"); + it1 = 1; + it2 = 0; + for (i = 0; i < J; ++i) { + it1 += ipow2(i + 1); + } + for (i = J; i > 0; --i) { + p2 = ipow2(i); + it1 -= p2; + for (k = 0; k < p2; ++k) { + if (wt->basisvector[it1 + k] == 1) { + printf("Node %d %d Access : output[%d] Length : %d \n", i, k, it2, wt->length[J - i + 1]); + it2 += wt->length[J - i + 1]; + } + } + } + + printf("\n"); + +} + +void cwt_summary(cwt_object wt) { + + printf("\n"); + printf("Wavelet : %s Parameter %lf \n", wt->wave,wt->m); + printf("\n"); + printf("Length of Input Signal : %d \n", wt->siglength); + printf("\n"); + printf("Sampling Rate : %g \n", wt->dt); + printf("\n"); + printf("Total Number of Scales : %d \n", wt->J); + printf("\n"); + printf("Smallest Scale (s0) : %lf \n", wt->s0); + printf("\n"); + printf("Separation Between Scales (dj) %lf \n", wt->dj); + printf("\n"); + printf("Scale Type %s \n", wt->type); + printf("\n"); + printf("Complex CWT Output Vector is of size %d * %d stored in Row Major format \n",wt->J,wt->siglength); + printf("\n"); + printf("The ith real value can be accessed using wt->output[i].re and imaginary value by wt->output[i].im \n"); + printf("\n"); + +} + +void wave_free(wave_object object) { + free(object); +} + +void wt_free(wt_object object) { + free(object); +} + +void wtree_free(wtree_object object) { + free(object); +} + +void wpt_free(wpt_object object) { + free(object); +} + +void cwt_free(cwt_object object) { + free(object); +} diff --git a/src/wavelib.h b/src/wavelib.h index e4e7152..86387f4 100644 --- a/src/wavelib.h +++ b/src/wavelib.h @@ -1,176 +1,230 @@ /* Copyright (c) 2014, Rafat Hussain -*/ -#ifndef WAVELIB_H_ -#define WAVELIB_H_ - -#include "wtmath.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(_MSC_VER) -#pragma warning(disable : 4200) -#pragma warning(disable : 4996) -#endif - -typedef struct wave_set* wave_object; - -wave_object wave_init(char* wname); - -struct wave_set{ - char wname[50]; - int filtlength;// When all filters are of the same length. [Matlab uses zero-padding to make all filters of the same length] - int lpd_len;// Default filtlength = lpd_len = lpr_len = hpd_len = hpr_len - int hpd_len; - int lpr_len; - int hpr_len; - double *lpd; - double *hpd; - double *lpr; - double *hpr; - double params[0]; -}; - -typedef struct wt_set* wt_object; - -wt_object wt_init(wave_object wave,char* method, int siglength, int J); - -struct wt_set{ - wave_object wave; - conv_object cobj; - char method[10]; - int siglength;// Length of the original signal. - int outlength;// Length of the output DWT vector - int lenlength;// Length of the Output Dimension Vector "length" - int J; // Number of decomposition Levels - int MaxIter;// Maximum Iterations J <= MaxIter - int even;// even = 1 if signal is of even length. even = 0 otherwise - char ext[10];// Type of Extension used - "per" or "sym" - char cmethod[10]; // Convolution Method - "direct" or "FFT" - - int N; // - int cfftset; - int zpad; - int length[102]; - double *output; - double params[0]; -}; - -typedef struct wtree_set* wtree_object; - -wtree_object wtree_init(wave_object wave, int siglength, int J); - -struct wtree_set{ - wave_object wave; - conv_object cobj; - char method[10]; - int siglength;// Length of the original signal. - int outlength;// Length of the output DWT vector - int lenlength;// Length of the Output Dimension Vector "length" - int J; // Number of decomposition Levels - int MaxIter;// Maximum Iterations J <= MaxIter - int even;// even = 1 if signal is of even length. even = 0 otherwise - char ext[10];// Type of Extension used - "per" or "sym" - - int N; // - int nodes; - int cfftset; - int zpad; - int length[102]; - double *output; - int *nodelength; - int *coeflength; - double params[0]; -}; - -typedef struct wpt_set* wpt_object; - -wpt_object wpt_init(wave_object wave, int siglength, int J); - -struct wpt_set{ - wave_object wave; - conv_object cobj; - int siglength;// Length of the original signal. - int outlength;// Length of the output DWT vector - int lenlength;// Length of the Output Dimension Vector "length" - int J; // Number of decomposition Levels - int MaxIter;// Maximum Iterations J <= MaxIter - int even;// even = 1 if signal is of even length. even = 0 otherwise - char ext[10];// Type of Extension used - "per" or "sym" - char entropy[20]; - double eparam; - - int N; // - int nodes; - int length[102]; - double *output; - double *costvalues; - double *basisvector; - int *nodeindex; - int *numnodeslevel; - int *coeflength; - double params[0]; -}; - - -void dwt(wt_object wt, double *inp); - -void idwt(wt_object wt, double *dwtop); - -void wtree(wtree_object wt, double *inp); - -void dwpt(wpt_object wt, double *inp); - -void idwpt(wpt_object wt, double *dwtop); - -void swt(wt_object wt, double *inp); - -void iswt(wt_object wt, double *swtop); - -void modwt(wt_object wt, double *inp); - -void imodwt(wt_object wt, double *dwtop); - -void setDWTExtension(wt_object wt, char *extension); - -void setWTREEExtension(wtree_object wt, char *extension); - -void setDWPTExtension(wpt_object wt, char *extension); - -void setDWPTEntropy(wpt_object wt, char *entropy, double eparam); - -void setWTConv(wt_object wt, char *cmethod); - -int getWTREENodelength(wtree_object wt, int X); - -void getWTREECoeffs(wtree_object wt, int X, int Y, double *coeffs, int N); - -int getDWPTNodelength(wpt_object wt, int X); - -void getDWPTCoeffs(wpt_object wt, int X, int Y, double *coeffs, int N); - -void wave_summary(wave_object obj); - -void wt_summary(wt_object wt); - -void wtree_summary(wtree_object wt); - -void wpt_summary(wpt_object wt); - -void wave_free(wave_object object); - -void wt_free(wt_object object); - -void wtree_free(wtree_object object); - -void wpt_free(wpt_object object); - - -#ifdef __cplusplus -} -#endif - - -#endif /* WAVELIB_H_ */ +*/ +#ifndef WAVELIB_H_ +#define WAVELIB_H_ + +#include "wtmath.h" +#include "cwt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(_MSC_VER) +#pragma warning(disable : 4200) +#pragma warning(disable : 4996) +#endif + +#ifndef cplx_type +#define cplx_type double +#endif + + +typedef struct cplx_t { + cplx_type re; + cplx_type im; +} cplx_data; + +typedef struct wave_set* wave_object; + +wave_object wave_init(char* wname); + +struct wave_set{ + char wname[50]; + int filtlength;// When all filters are of the same length. [Matlab uses zero-padding to make all filters of the same length] + int lpd_len;// Default filtlength = lpd_len = lpr_len = hpd_len = hpr_len + int hpd_len; + int lpr_len; + int hpr_len; + double *lpd; + double *hpd; + double *lpr; + double *hpr; + double params[0]; +}; + +typedef struct wt_set* wt_object; + +wt_object wt_init(wave_object wave,char* method, int siglength, int J); + +struct wt_set{ + wave_object wave; + conv_object cobj; + char method[10]; + int siglength;// Length of the original signal. + int outlength;// Length of the output DWT vector + int lenlength;// Length of the Output Dimension Vector "length" + int J; // Number of decomposition Levels + int MaxIter;// Maximum Iterations J <= MaxIter + int even;// even = 1 if signal is of even length. even = 0 otherwise + char ext[10];// Type of Extension used - "per" or "sym" + char cmethod[10]; // Convolution Method - "direct" or "FFT" + + int N; // + int cfftset; + int zpad; + int length[102]; + double *output; + double params[0]; +}; + +typedef struct wtree_set* wtree_object; + +wtree_object wtree_init(wave_object wave, int siglength, int J); + +struct wtree_set{ + wave_object wave; + conv_object cobj; + char method[10]; + int siglength;// Length of the original signal. + int outlength;// Length of the output DWT vector + int lenlength;// Length of the Output Dimension Vector "length" + int J; // Number of decomposition Levels + int MaxIter;// Maximum Iterations J <= MaxIter + int even;// even = 1 if signal is of even length. even = 0 otherwise + char ext[10];// Type of Extension used - "per" or "sym" + + int N; // + int nodes; + int cfftset; + int zpad; + int length[102]; + double *output; + int *nodelength; + int *coeflength; + double params[0]; +}; + +typedef struct wpt_set* wpt_object; + +wpt_object wpt_init(wave_object wave, int siglength, int J); + +struct wpt_set{ + wave_object wave; + conv_object cobj; + int siglength;// Length of the original signal. + int outlength;// Length of the output DWT vector + int lenlength;// Length of the Output Dimension Vector "length" + int J; // Number of decomposition Levels + int MaxIter;// Maximum Iterations J <= MaxIter + int even;// even = 1 if signal is of even length. even = 0 otherwise + char ext[10];// Type of Extension used - "per" or "sym" + char entropy[20]; + double eparam; + + int N; // + int nodes; + int length[102]; + double *output; + double *costvalues; + double *basisvector; + int *nodeindex; + int *numnodeslevel; + int *coeflength; + double params[0]; +}; + +typedef struct cwt_set* cwt_object; + +cwt_object cwt_init(char* wave, double param, int siglength,double dt, int J); + +struct cwt_set{ + char wave[10];// Wavelet - morl/morlet,paul,dog/dgauss + int siglength;// Length of Input Data + int J;// Total Number of Scales + double s0;// Smallest scale. It depends on the sampling rate. s0 <= 2 * dt for most wavelets + double dt;// Sampling Rate + double dj;// Separation between scales. eg., scale = s0 * 2 ^ ( [0:N-1] *dj ) or scale = s0 *[0:N-1] * dj + char type[10];// Scale Type - Power or Linear + int pow;// Base of Power in case type = pow. Typical value is pow = 2 + int sflag; + int pflag; + int npad; + int mother; + double m;// Wavelet parameter param + double smean;// Input Signal mean + + cplx_data *output; + double *scale; + double *period; + double *coi; + double params[0]; +}; + + +void dwt(wt_object wt, double *inp); + +void idwt(wt_object wt, double *dwtop); + +void wtree(wtree_object wt, double *inp); + +void dwpt(wpt_object wt, double *inp); + +void idwpt(wpt_object wt, double *dwtop); + +void swt(wt_object wt, double *inp); + +void iswt(wt_object wt, double *swtop); + +void modwt(wt_object wt, double *inp); + +void imodwt(wt_object wt, double *dwtop); + +void setDWTExtension(wt_object wt, char *extension); + +void setWTREEExtension(wtree_object wt, char *extension); + +void setDWPTExtension(wpt_object wt, char *extension); + +void setDWPTEntropy(wpt_object wt, char *entropy, double eparam); + +void setWTConv(wt_object wt, char *cmethod); + +int getWTREENodelength(wtree_object wt, int X); + +void getWTREECoeffs(wtree_object wt, int X, int Y, double *coeffs, int N); + +int getDWPTNodelength(wpt_object wt, int X); + +void getDWPTCoeffs(wpt_object wt, int X, int Y, double *coeffs, int N); + +void setCWTScales(cwt_object wt, double s0, double dj, char *type, int power); + +void setCWTScaleVector(cwt_object wt, double *scale, int J, double s0, double dj); + +void setCWTPadding(cwt_object wt, int pad); + +void cwt(cwt_object wt, double *inp); + +void icwt(cwt_object wt, double *cwtop); + +int getCWTScaleLength(int N); + +void wave_summary(wave_object obj); + +void wt_summary(wt_object wt); + +void wtree_summary(wtree_object wt); + +void wpt_summary(wpt_object wt); + +void cwt_summary(cwt_object wt); + +void wave_free(wave_object object); + +void wt_free(wt_object object); + +void wtree_free(wtree_object object); + +void wpt_free(wpt_object object); + +void cwt_free(cwt_object object); + + +#ifdef __cplusplus +} +#endif + + +#endif /* WAVELIB_H_ */ diff --git a/test/cwttest.c b/test/cwttest.c new file mode 100644 index 0000000..2da4ddc --- /dev/null +++ b/test/cwttest.c @@ -0,0 +1,109 @@ +#include +#include +#include +#include +#include "../header/wavelib.h" + +int main() { + int i, N, J,subscale,a0,iter,nd,k; + double *inp,*oup; + double dt, dj,s0, param,mn; + double td,tn,den, num, recon_mean, recon_var; + cwt_object wt; + + FILE *ifp; + double temp[1200]; + + char *wave = "morlet";// Set Morlet wavelet. Other options "paul" and "dog" + char *type = "pow"; + + N = 504; + param = 6.0; + subscale = 4; + dt = 0.25; + s0 = dt; + dj = 1.0 / (double)subscale; + J = 11 * subscale; // Total Number of scales + a0 = 2;//power + + ifp = fopen("sst_nino3.dat", "r"); + i = 0; + if (!ifp) { + printf("Cannot Open File"); + exit(100); + } + while (!feof(ifp)) { + fscanf(ifp, "%lf \n", &temp[i]); + i++; + } + + fclose(ifp); + + wt = cwt_init(wave, param, N,dt, J); + + inp = (double*)malloc(sizeof(double)* N); + oup = (double*)malloc(sizeof(double)* N); + + for (i = 0; i < N; ++i) { + inp[i] = temp[i] ; + } + + setCWTScales(wt, s0, dj, type, a0); + + cwt(wt, inp); + + printf("\n MEAN %g \n", wt->smean); + + mn = 0.0; + + for (i = 0; i < N; ++i) { + mn += sqrt(wt->output[i].re * wt->output[i].re + wt->output[i].im * wt->output[i].im); + } + + cwt_summary(wt); + + printf("\n abs mean %g \n", mn / N); + + printf("\n\n"); + printf("Let CWT w = w(j, n/2 - 1) where n = %d\n\n", N); + nd = N/2 - 1; + + printf("%-15s%-15s%-15s%-15s \n","j","Scale","Period","ABS(w)^2"); + for(k = 0; k < wt->J;++k) { + iter = nd + k * N; + printf("%-15d%-15lf%-15lf%-15lf \n",k,wt->scale[k],wt->period[k], + wt->output[iter].re * wt->output[iter].re + wt->output[iter].im * wt->output[iter].im); + } + + icwt(wt, oup); + + num = den = recon_var = recon_mean = 0.0; + printf("\n\n"); + printf("Signal Reconstruction\n"); + printf("%-15s%-15s%-15s \n","i","Input(i)","Output(i)"); + + for (i = N - 10; i < N; ++i) { + printf("%-15d%-15lf%-15lf \n", i,inp[i] , oup[i]); + } + + for (i = 0; i < N; ++i) { + //printf("%g %g \n", oup[i] ,inp[i] - wt->smean); + td = inp[i] ; + tn = oup[i] - td; + num += (tn * tn); + den += (td * td); + recon_mean += oup[i]; + } + + recon_var = sqrt(num / N); + recon_mean /= N; + + printf("\nRMS Error %g \n", sqrt(num) / sqrt(den)); + printf("\nVariance %g \n", recon_var); + printf("\nMean %g \n", recon_mean); + + free(inp); + free(oup); + cwt_free(wt); + return 0; +} diff --git a/test/sst_nino3.dat b/test/sst_nino3.dat new file mode 100755 index 0000000..a60f6c5 --- /dev/null +++ b/test/sst_nino3.dat @@ -0,0 +1,504 @@ +-0.15 +-0.30 +-0.14 +-0.41 +-0.46 +-0.66 +-0.50 +-0.80 +-0.95 +-0.72 +-0.31 +-0.71 +-1.04 +-0.77 +-0.86 +-0.84 +-0.41 +-0.49 +-0.48 +-0.72 +-1.21 +-0.80 + 0.16 + 0.46 + 0.40 + 1.00 + 2.17 + 2.50 + 2.34 + 0.80 + 0.14 +-0.06 +-0.34 +-0.71 +-0.34 +-0.73 +-0.48 +-0.11 + 0.22 + 0.51 + 0.51 + 0.25 +-0.10 +-0.33 +-0.42 +-0.23 +-0.53 +-0.44 +-0.30 + 0.15 + 0.09 + 0.19 +-0.06 + 0.25 + 0.30 + 0.81 + 0.26 + 0.10 + 0.34 + 1.01 +-0.31 +-0.90 +-0.73 +-0.92 +-0.73 +-0.31 +-0.03 + 0.12 + 0.37 + 0.82 + 1.22 + 1.83 + 1.60 + 0.34 +-0.72 +-0.87 +-0.85 +-0.40 +-0.39 +-0.65 + 0.07 + 0.67 + 0.39 + 0.03 +-0.17 +-0.76 +-0.87 +-1.36 +-1.10 +-0.99 +-0.78 +-0.93 +-0.87 +-0.44 +-0.34 +-0.50 +-0.39 +-0.04 + 0.42 + 0.62 + 0.17 + 0.23 + 1.03 + 1.54 + 1.09 + 0.01 + 0.12 +-0.27 +-0.47 +-0.41 +-0.37 +-0.36 +-0.39 + 0.43 + 1.05 + 1.58 + 1.25 + 0.86 + 0.60 + 0.21 + 0.19 +-0.23 +-0.29 + 0.18 + 0.12 + 0.71 + 1.42 + 1.59 + 0.93 +-0.25 +-0.66 +-0.95 +-0.47 + 0.06 + 0.70 + 0.81 + 0.78 + 1.43 + 1.22 + 1.05 + 0.44 +-0.35 +-0.67 +-0.84 +-0.66 +-0.45 +-0.12 +-0.20 +-0.16 +-0.47 +-0.52 +-0.79 +-0.80 +-0.62 +-0.86 +-1.29 +-1.04 +-1.05 +-0.75 +-0.81 +-0.90 +-0.25 + 0.62 + 1.22 + 0.96 + 0.21 +-0.11 +-0.25 +-0.24 +-0.43 + 0.23 + 0.67 + 0.78 + 0.41 + 0.98 + 1.28 + 1.45 + 1.02 + 0.03 +-0.59 +-1.34 +-0.99 +-1.49 +-1.74 +-1.33 +-0.55 +-0.51 +-0.36 +-0.99 + 0.32 + 1.04 + 1.41 + 0.99 + 0.66 + 0.50 + 0.22 + 0.71 +-0.16 + 0.38 + 0.00 +-1.11 +-1.04 + 0.05 +-0.64 +-0.34 +-0.50 +-1.85 +-0.94 +-0.78 + 0.29 + 0.27 + 0.69 +-0.06 +-0.83 +-0.80 +-1.02 +-0.96 +-0.09 + 0.62 + 0.87 + 1.03 + 0.70 +-0.10 +-0.31 + 0.04 +-0.46 + 0.04 + 0.24 +-0.08 +-0.28 + 0.06 + 0.05 +-0.31 + 0.11 + 0.27 + 0.26 + 0.04 + 0.12 + 1.11 + 1.53 + 1.23 + 0.17 +-0.18 +-0.56 + 0.05 + 0.41 + 0.22 + 0.04 +-0.19 +-0.46 +-0.65 +-1.06 +-0.54 + 0.14 + 0.25 +-0.21 +-0.73 +-0.43 + 0.48 + 0.26 + 0.05 + 0.11 +-0.27 +-0.08 +-0.10 + 0.29 +-0.15 +-0.28 +-0.55 +-0.44 +-1.40 +-0.55 +-0.69 + 0.58 + 0.37 + 0.42 + 1.83 + 1.23 + 0.65 + 0.41 + 1.03 + 0.64 +-0.07 + 0.98 + 0.36 +-0.30 +-1.33 +-1.39 +-0.94 + 0.34 +-0.00 +-0.15 + 0.06 + 0.39 + 0.36 +-0.49 +-0.53 + 0.35 + 0.07 +-0.24 + 0.20 +-0.22 +-0.68 +-0.44 + 0.02 +-0.22 +-0.30 +-0.59 + 0.10 +-0.02 +-0.27 +-0.60 +-0.48 +-0.37 +-0.53 +-1.35 +-1.22 +-0.99 +-0.34 +-0.79 +-0.24 + 0.02 + 0.69 + 0.78 + 0.17 +-0.17 +-0.29 +-0.27 + 0.31 + 0.44 + 0.38 + 0.24 +-0.13 +-0.89 +-0.76 +-0.71 +-0.37 +-0.59 +-0.63 +-1.47 +-0.40 +-0.18 +-0.37 +-0.43 +-0.06 + 0.61 + 1.33 + 1.19 + 1.13 + 0.31 + 0.14 + 0.03 + 0.21 + 0.15 +-0.22 +-0.02 + 0.03 +-0.17 + 0.12 +-0.35 +-0.06 + 0.38 +-0.45 +-0.32 +-0.33 +-0.49 +-0.14 +-0.56 +-0.18 + 0.46 + 1.09 + 1.04 + 0.23 +-0.99 +-0.59 +-0.92 +-0.28 + 0.52 + 1.31 + 1.45 + 0.61 +-0.11 +-0.18 +-0.39 +-0.39 +-0.36 +-0.50 +-0.81 +-1.10 +-0.29 + 0.57 + 0.68 + 0.78 + 0.78 + 0.63 + 0.98 + 0.49 +-0.42 +-1.34 +-1.20 +-1.18 +-0.65 +-0.42 +-0.97 +-0.28 + 0.77 + 1.77 + 2.22 + 1.05 +-0.67 +-0.99 +-1.52 +-1.17 +-0.22 +-0.04 +-0.45 +-0.46 +-0.75 +-0.70 +-1.38 +-1.15 +-0.01 + 0.97 + 1.10 + 0.68 +-0.02 +-0.04 + 0.47 + 0.30 +-0.55 +-0.51 +-0.09 +-0.01 + 0.34 + 0.61 + 0.58 + 0.33 + 0.38 + 0.10 + 0.18 +-0.30 +-0.06 +-0.28 + 0.12 + 0.58 + 0.89 + 0.93 + 2.39 + 2.44 + 1.92 + 0.64 +-0.24 + 0.27 +-0.13 +-0.16 +-0.54 +-0.13 +-0.37 +-0.78 +-0.22 + 0.03 + 0.25 + 0.31 + 1.03 + 1.10 + 1.05 + 1.11 + 1.28 + 0.57 +-0.55 +-1.16 +-0.99 +-0.38 + 0.01 +-0.29 + 0.09 + 0.46 + 0.57 + 0.24 + 0.39 + 0.49 + 0.86 + 0.51 + 0.95 + 1.25 + 1.33 +-0.00 + 0.34 + 0.66 + 1.11 + 0.34 + 0.48 + 0.56 + 0.39 +-0.17 + 1.04 + 0.77 + 0.12 +-0.35 +-0.22 + 0.08 +-0.08 +-0.18 +-0.06 diff --git a/unitTests/wavelibBoostTests/tst_dwt.cpp b/unitTests/wavelibBoostTests/tst_dwt.cpp index c0de885..6fe71e6 100644 --- a/unitTests/wavelibBoostTests/tst_dwt.cpp +++ b/unitTests/wavelibBoostTests/tst_dwt.cpp @@ -98,6 +98,17 @@ double RMS_Error(double *data, double *rec, int N) { return sqrt(sum/((double)N-1)); } +double REL_Error(double *data, double *rec, int N) { + int i; + double sum1 = 0; + double sum2 = 0; + for (i = 0; i < N; ++i) { + sum1 += (data[i] - rec[i])*(data[i] - rec[i]); + sum2 += data[i] * data[i]; + } + return sqrt(sum1)/sqrt(sum2); +} + void ReconstructionTest() { @@ -334,6 +345,77 @@ void DWPTReconstructionTest() free(inp); } +void CWTReconstructionTest() { + int i, j,N, J,subscale,a0,iter; + double *inp,*oup; + double dt, dj,s0, pi,t; + double val, epsilon; + int it1,it2; + cwt_object wt; + + + char *wave[3]; + wave[0] = (char*) "morl"; + wave[1] =(char*) "paul"; + wave[2] = (char*) "dog"; + double param[30] = {4.5,5,5.5,6,6.5,8,10,13,17,20, + 4,5,7,8,10,12,13,14,17,20,2,4,6,8,10,12,14,16,18,20}; + char *type = (char*) "pow"; + + epsilon = 0.01; + N = 2048; + dt = 0.000125; + subscale = 20; + dj = 1.0 / (double) subscale; + s0 = dt/32; + J = 32 * subscale; + a0 = 2;//power + + + inp = (double*)malloc(sizeof(double)* N); + oup = (double*)malloc(sizeof(double)* N); + + pi = 4.0 * atan(1.0); + + + for (i = 0; i < N; ++i) { + t = dt * i; + inp[i] = sin(2 * pi * 500 * t) + sin(2 * pi * 1000 * t) + 0.1 * sin(2 * pi * 8 * t); + if (i == 1200 || i ==1232) { + inp[i] += 5.0; + } + } + + for(it1 = 0; it1 < 3;++it1) { + for(it2 = 0; it2 < 10;++it2) { + + wt = cwt_init(wave[it1], param[it1*10+it2], N,dt, J); + + setCWTScales(wt, s0, dj, type, a0); + + cwt(wt, inp); + + + icwt(wt, oup); + + + //printf("\nWavelet : %s Parameter %g Error %g \n", wave[it1],param[it1*10+it2],REL_Error(inp,oup, wt->siglength)); + if (REL_Error(inp,oup, wt->siglength) > epsilon) { + printf("\n ERROR : DWPT Reconstruction Unit Test Failed. Exiting. \n"); + exit(-1); + } + + cwt_free(wt); + } + } + + + + free(inp); + free(oup); + +} + void DBCoefTests() { @@ -569,6 +651,9 @@ int main() { printf("Running DWPT ReconstructionTests ... "); DWPTReconstructionTest(); printf("DONE \n"); + printf("Running CWT ReconstructionTests ... "); + CWTReconstructionTest(); + printf("DONE \n"); printf("\n\nUnit Tests Successful\n\n"); return 0; diff --git a/wavelib-doc.pdf b/wavelib-doc.pdf index 0a98f87029e545863193d0206a02c3619f7b935e..2470781fbd702ce75b2a2ab592173b21a07eda8e 100644 GIT binary patch delta 167888 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%0A& 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%0Ai9Sv!5VL6hGO%1oc* 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 G1^qu