From 2ef5c81d826b2bde87e0a4d69f90c676f8e9858e Mon Sep 17 00:00:00 2001 From: Rafat Hussain Date: Sat, 6 Apr 2019 08:39:01 +0530 Subject: [PATCH] wt2 examples added --- src/wavelib.c | 2 +- test/CMakeLists.txt | 17 ++++++++- test/dwt2test.c | 87 +++++++++++++++++++++++++++++++++++++++++++++ test/modwt2test.c | 82 ++++++++++++++++++++++++++++++++++++++++++ test/swt2test.c | 83 ++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 269 insertions(+), 2 deletions(-) create mode 100755 test/dwt2test.c create mode 100755 test/modwt2test.c create mode 100755 test/swt2test.c diff --git a/src/wavelib.c b/src/wavelib.c index 47eedba..e70b172 100644 --- a/src/wavelib.c +++ b/src/wavelib.c @@ -4250,7 +4250,7 @@ void wt2_summary(wt2_object wt) { t += 1; printf("Vertical Coefficients access at wt->coeffaccess[%d]=%d, Vector size:%d \n", t, wt->coeffaccess[t], vsize); t += 1; - printf("Detail Coefficients access at wt->coeffaccess[%d]=%d, Vector size:%d \n\n", t, wt->coeffaccess[t], vsize); + printf("Diagonal Coefficients access at wt->coeffaccess[%d]=%d, Vector size:%d \n\n", t, wt->coeffaccess[t], vsize); } } diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index ac9a1f8..5ff909d 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -30,6 +30,18 @@ add_executable(modwtdenoisetest modwtdenoisetest.c) target_link_libraries(modwtdenoisetest wauxlib wavelib) +add_executable(dwt2test dwt2test.c) + +target_link_libraries(dwt2test wavelib) + +add_executable(swt2test swt2test.c) + +target_link_libraries(swt2test wavelib) + +add_executable(modwt2test modwt2test.c) + +target_link_libraries(modwt2test wavelib) + if(UNIX) target_link_libraries(cwttest m) target_link_libraries(dwttest m) @@ -39,9 +51,12 @@ if(UNIX) target_link_libraries(wtreetest m) target_link_libraries(denoisetest m) target_link_libraries(modwtdenoisetest m) + target_link_libraries(dwt2test m) + target_link_libraries(swt2test m) + target_link_libraries(modwt2test m) endif() -set_target_properties(cwttest dwttest swttest modwttest dwpttest wtreetest denoisetest modwtdenoisetest +set_target_properties(cwttest dwttest swttest modwttest dwpttest wtreetest denoisetest modwtdenoisetest dwt2test swt2test modwt2test PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/test" ) diff --git a/test/dwt2test.c b/test/dwt2test.c new file mode 100755 index 0000000..61cb14e --- /dev/null +++ b/test/dwt2test.c @@ -0,0 +1,87 @@ +#include +#include +#include +#include +#include +#include "../header/wavelib.h" + +double absmax(double *array, int N) { + double max; + int i; + + max = 0.0; + for (i = 0; i < N; ++i) { + if (fabs(array[i]) >= max) { + max = fabs(array[i]); + } + } + + return max; +} + +double generate_rnd() { + double rnd; + + rnd = (double) (rand() % 100 + 1); + + return rnd; +} + +int main() { + wave_object obj; + wt2_object wt; + int i, k, J, rows, cols,N; + double *inp, *wavecoeffs,*oup,*diff; + double *cLL; + int ir, ic; + double amax; + + rows = 32; + cols = 30; + N = rows*cols; + + char *name = "db2"; + obj = wave_init(name);// Initialize the wavelet + srand(time(0)); + inp = (double*)calloc(N, sizeof(double)); + oup = (double*)calloc(N, sizeof(double)); + diff = (double*)calloc(N, sizeof(double)); + + J = 3; + + wt = wt2_init(obj, "dwt", rows,cols, J); + + for (i = 0; i < rows; ++i) { + for (k = 0; k < cols; ++k) { + //inp[i*cols + k] = i*cols + k; + inp[i*cols + k] = generate_rnd(); + oup[i*cols + k] = 0.0; + } + } + + wavecoeffs = dwt2(wt, inp); + + cLL = getWT2Coeffs(wt, wavecoeffs, 1, "D", &ir, &ic); + + dispWT2Coeffs(cLL, ir, ic); + + idwt2(wt, wavecoeffs, oup); + + for (i = 0; i < rows*cols; ++i) { + diff[i] = oup[i] - inp[i]; + } + + amax = absmax(diff, rows*cols); + + wt2_summary(wt); + + printf("Abs Max %g \n", amax); + + wave_free(obj); + wt2_free(wt); + free(inp); + free(wavecoeffs); + free(oup); + free(diff); + return 0; +} diff --git a/test/modwt2test.c b/test/modwt2test.c new file mode 100755 index 0000000..3f609f9 --- /dev/null +++ b/test/modwt2test.c @@ -0,0 +1,82 @@ +#include +#include +#include +#include +#include +#include "../header/wavelib.h" + +double absmax(double *array, int N) { + double max; + int i; + + max = 0.0; + for (i = 0; i < N; ++i) { + if (fabs(array[i]) >= max) { + max = fabs(array[i]); + } + } + + return max; +} + +double generate_rnd() { + double rnd; + + rnd = (double) (rand() % 100 + 1); + + return rnd; +} + +int main() { + wave_object obj; + wt2_object wt; + int i, k, J, rows, cols,N,ir,ic; + double *inp, *wavecoeffs, *oup,*cLL,*diff; + double amax; + rows = 51; + cols = 40; + N = rows*cols; + char *name = "db2"; + obj = wave_init(name);// Initialize the wavelet + + inp = (double*)calloc(N, sizeof(double)); + oup = (double*)calloc(N, sizeof(double)); + diff = (double*)calloc(N, sizeof(double)); + J = 2; + + wt = wt2_init(obj, "modwt", rows, cols, J); + + for (i = 0; i < rows; ++i) { + for (k = 0; k < cols; ++k) { + //inp[i*cols + k] = i*cols + k; + inp[i*cols + k] = generate_rnd(); + oup[i*cols + k] = 0.0; + } + } + + wavecoeffs = modwt2(wt, inp); + + cLL = getWT2Coeffs(wt, wavecoeffs, J, "A", &ir, &ic); + + //dispWT2Coeffs(cLL, ir, ic); + + imodwt2(wt, wavecoeffs, oup); + + for (i = 0; i < N; ++i) { + diff[i] = oup[i] - inp[i]; + } + + amax = absmax(diff, N); + + wt2_summary(wt); + + printf("Abs Max %g \n", amax); + + wave_free(obj); + wt2_free(wt); + free(inp); + free(wavecoeffs); + free(oup); + free(diff); + return 0; +} diff --git a/test/swt2test.c b/test/swt2test.c new file mode 100755 index 0000000..b3aec71 --- /dev/null +++ b/test/swt2test.c @@ -0,0 +1,83 @@ +#include +#include +#include +#include +#include +#include "../header/wavelib.h" + +double absmax(double *array, int N) { + double max; + int i; + + max = 0.0; + for (i = 0; i < N; ++i) { + if (fabs(array[i]) >= max) { + max = fabs(array[i]); + } + } + + return max; +} + +double generate_rnd() { + double rnd; + + rnd = (double) (rand() % 100 + 1); + + return rnd; +} + +int main() { + wave_object obj; + wt2_object wt; + int i, k, J, rows, cols; + double *inp, *wavecoeffs, *oup, *cLL,*diff; + double amax; + int ir, ic, N; + rows = 64; + cols = 48; + + char *name = "bior3.1"; + obj = wave_init(name);// Initialize the wavelet + N = rows*cols; + inp = (double*)calloc(N, sizeof(double)); + oup = (double*)calloc(N, sizeof(double)); + diff = (double*)calloc(N, sizeof(double)); + J = 2; + + wt = wt2_init(obj, "swt", rows, cols, J); + + for (i = 0; i < rows; ++i) { + for (k = 0; k < cols; ++k) { + //inp[i*cols + k] = i*cols + k; + inp[i*cols + k] = generate_rnd(); + oup[i*cols + k] = 0.0; + } + } + + wavecoeffs = swt2(wt, inp); + + cLL = getWT2Coeffs(wt, wavecoeffs, J, "A", &ir, &ic); + + dispWT2Coeffs(cLL, ir, ic); + + iswt2(wt, wavecoeffs, oup); + + for (i = 0; i < N; ++i) { + diff[i] = oup[i] - inp[i]; + } + + amax = absmax(diff, N); + + wt2_summary(wt); + + printf("Abs Max %g \n", amax); + + wave_free(obj); + wt2_free(wt); + free(inp); + free(wavecoeffs); + free(oup); + free(diff); + return 0; +}