void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { int M, J, L; int m, n; double *Wout, *Vout; double *Vin, *ht, *gt; /* Check for proper number of arguments */ if (nrhs != 4) { mexErrMsgTxt("DWT requires four input arguments."); } else if (nlhs > 2) { mexErrMsgTxt("DWT requires two output arguments."); } Vin = mxGetPr(prhs[0]); ht = mxGetPr(prhs[1]); gt = mxGetPr(prhs[2]); J = (int) mxGetScalar(prhs[3]); /* mexPrintf("J = %d\n", J); */ m = mxGetM(prhs[0]); /* mexPrintf("m = %d\n", m); */ n = mxGetN(prhs[0]); /* mexPrintf("n = %d\n", n); */ /* Create matrices for the return arguments */ plhs[0] = mxCreateDoubleMatrix(m, n, mxREAL); plhs[1] = mxCreateDoubleMatrix(m, n, mxREAL); /* Assign pointers to the various parameters */ Wout = mxGetPr(plhs[0]); Vout = mxGetPr(plhs[1]); M = mxGetNumberOfElements(prhs[0]); L = mxGetNumberOfElements(prhs[1]); /* Do the actual computations in a subroutine */ modwt(Vin, M, J, &L, ht, gt, Wout, Vout); return; }
int main() { wave_object obj; wt_object wt; double *inp, *out, *diff; int N, i, J; FILE *ifp; double temp[1200]; char *name = "db4"; obj = wave_init(name); wave_summary(obj); ifp = fopen("signal.txt", "r"); i = 0; if (!ifp) { printf("Cannot Open File"); exit(100); } while (!feof(ifp)) { fscanf(ifp, "%lf \n", &temp[i]); i++; } N = 177; inp = (double*)malloc(sizeof(double)* N); out = (double*)malloc(sizeof(double)* N); diff = (double*)malloc(sizeof(double)* N); //wmean = mean(temp, N); for (i = 0; i < N; ++i) { inp[i] = temp[i]; //printf("%g \n",inp[i]); } J = 2; wt = wt_init(obj, "modwt", N, J);// Initialize the wavelet transform object modwt(wt, inp);// Perform MODWT //MODWT output can be accessed using wt->output vector. Use wt_summary to find out how to extract appx and detail coefficients for (i = 0; i < wt->outlength; ++i) { printf("%g ",wt->output[i]); } imodwt(wt, out);// Perform ISWT (if needed) // Test Reconstruction for (i = 0; i < wt->siglength; ++i) { diff[i] = out[i] - inp[i]; } printf("\n MAX %g \n", absmax(diff, wt->siglength));// If Reconstruction succeeded then the output should be a small value. wt_summary(wt);// Prints the full summary. wave_free(obj); wt_free(wt); free(inp); free(out); free(diff); return 0; }