c - FFTW real-to-real transform strided array -
i have matrix stored in row-major order. trying compute dct of ub-matrix using fftw, , nonsense. in following paragraphs describe problem , solution, , in understanding why not work.
given i , l, compute dct of sub-matrix consists of rows k k mod l == i. example, assume l = 3 , i = 2. in following matrix, sub-matrix wish transform marked in red (2 mod 3 = 2, 5 mod 3 = 2, 8 mod 3 = 2).
the source , destination arrays have same layout, , transformed matrix should stored in same location in destination array.
void transform(double* src, double* dest, size_t rows, size_t cols, size_t l, size_t i) { int rank = 2; fftw_iodim64 dims[] = { { rows / l, l, l }, { cols, rows, rows } }; fftw_r2r_kind kind = fftw_redft10; fftw_plan plan = fftw_plan_guru64_r2r(rank, dims, 0, null, src + l, dest + l, &kind, fftw_estimate | fftw_unaligned | fftw_preserve_input); fftw_execute(plan); fftw_destroy_plan(pla); } update
i tested simple case when i=l=1. in case nonsense. tested 3x4 matrix 1 of dct basis vectors:
a(i,j) = cos((i + 0.5)*2*pi/3) * cos((j + 0.5)*3*pi/4) i expected result elements (close to) 0 except one. resulting matrix looks this:
0 -2.22045e-016 1.33227e-015 2.22045e-016 2.22045e-016 -2.77556e-016 9.99201e-016 5.55112e-017 -8.88178e-016 -1.62359 7.83938 1.62359 seems quite weird.
update 2
i tested simple matrix (0,0) element 1 , rest zero. in case, too, i=l=1 (the sub-matrix whole matrix). here result:
2 2 2 0 1.73205 1.73205 1.73205 0 1 1 1 0
kind supposed array of size rank. see e.g. http://www.fftw.org/doc/guru-real_002dto_002dreal-transforms.html#guru-real_002dto_002dreal-transforms.

Comments
Post a Comment