MCPcopy Create free account
hub / github.com/ARM-software/ComputeLibrary / rdft_1d_core

Function rdft_1d_core

tests/validation/reference/DFT.cpp:179–208  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

177
178template <typename T>
179SimpleTensor<T> rdft_1d_core(const SimpleTensor<T> &src, FFTDirection direction, bool is_odd)
180{
181 // Performs only rdft
182 ARM_COMPUTE_ERROR_ON(direction == FFTDirection::Forward && src.num_channels() != 1);
183 ARM_COMPUTE_ERROR_ON(direction == FFTDirection::Inverse && src.num_channels() != 2);
184
185 const unsigned int inverse_tail = is_odd ? 1 : 0;
186 const unsigned int N = src.shape()[0];
187 const unsigned int K = direction == FFTDirection::Forward ? N / 2 + 1 : (N - 1) * 2 + inverse_tail;
188 const unsigned int num_channels = direction == FFTDirection::Forward ? 2 : 1;
189
190 TensorShape dst_shape = src.shape();
191 dst_shape.set(0, K);
192
193 SimpleTensor<T> dst(dst_shape, src.data_type(), num_channels);
194
195 const unsigned int upper_dims = src.shape().total_size_upper(1);
196#if defined(_OPENMP)
197#pragma omp parallel for
198#endif /* _OPENMP */
199 for (unsigned int du = 0; du < upper_dims; ++du)
200 {
201 const T *src_row_ptr = src.data() + du * N * src.num_channels();
202 T *dst_row_ptr = dst.data() + du * K * dst.num_channels();
203 direction == FFTDirection::Forward ? rdft_1d_step(src_row_ptr, N, dst_row_ptr, K)
204 : irdft_1d_step(src_row_ptr, N, dst_row_ptr, K);
205 }
206
207 return dst;
208}
209
210template <typename T>
211SimpleTensor<T> dft_1d_core(const SimpleTensor<T> &src, FFTDirection direction)

Callers 4

rdft_1dFunction · 0.85
ridft_1dFunction · 0.85
rdft_2dFunction · 0.85
ridft_2dFunction · 0.85

Calls 8

rdft_1d_stepFunction · 0.85
irdft_1d_stepFunction · 0.85
total_size_upperMethod · 0.80
num_channelsMethod · 0.45
shapeMethod · 0.45
setMethod · 0.45
data_typeMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected