inline bool equal(const_Matrix<T1, B1> v, const_Matrix<T2, B2> w) { if (v.size(0) != w.size(0) || v.size(1) != w.size(1)) return false; for (length_type i = 0; i != v.size(0); ++i) for (length_type j = 0; j != v.size(1); ++j) if (!equal(v.get(i, j), w.get(i, j))) return false; return true; }
void interpolate( const_Matrix<IT, Block1> indices, // n x m Tensor<T, Block2> window, // n x m x I const_Matrix<complex<T>, Block3> in, // n x m Matrix<complex<T>, Block4> out, // nx x m length_type depth) { length_type n = indices.size(0); length_type m = indices.size(1); length_type nx = out.size(0); length_type I = depth; // window.size(2) may include padding assert(n == in.size(0)); assert(m == in.size(1)); assert(m == out.size(1)); assert(window.size(0) == n); assert(window.size(1) == m); out = complex<T>(0); for (index_type j = 0; j < m; ++j) { for (index_type i = 0; i < n; ++i) { index_type ikxrows = indices.get(i, j); index_type i_shift = (i + n/2) % n; for (index_type h = 0; h < I; ++h) { out.put(ikxrows + h, j, out.get(ikxrows + h, j) + (in.get(i_shift, j) * window.get(i, j, h))); } } out.col(j)(Domain<1>(j%2, 2, nx/2)) *= T(-1); } }