| 158 | |
| 159 | |
| 160 | qvector getDisceteFourierTransform(qvector in) { |
| 161 | DEMAND( in.size() > 0 ); |
| 162 | |
| 163 | size_t dim = in.size(); |
| 164 | qvector out = getZeroVector(dim); |
| 165 | |
| 166 | // PI must be accurate here |
| 167 | qreal pi = 3.14159265358979323846; |
| 168 | qreal a = 1 / std::sqrt(dim); |
| 169 | qreal b = 2 * pi / dim; |
| 170 | |
| 171 | for (size_t x=0; x<dim; x++) |
| 172 | for (size_t y=0; y<dim; y++) |
| 173 | out[x] += a * std::exp(b * x * y * 1_i) * in[y]; |
| 174 | |
| 175 | return out; |
| 176 | } |
| 177 | |
| 178 | |
| 179 | qvector getDisceteFourierTransform(qvector in, vector<int> targs) { |
no test coverage detected