i get the result of CUFFT_R2C, it is a complex array, i want to square every point’s magnitude then get a float array. any suggestion is expected, please!
A possible method could be similar to this.
#include <cufft.h>
#include <thrust/transform.h>
#include <thrust/device_ptr.h>
#include <thrust/complex.h>
struct my_cplx_sq
{
__host__ __device__ float operator()(thrust::complex<float> &d){
return d.real()*d.real() + d.imag()*d.imag();}
};
int main(){
const int N = 256;
cufftComplex *d;
float *r;
cudaMalloc(&d, N*sizeof(cufftComplex));
cudaMalloc(&r, N*sizeof(float));
thrust::device_ptr<thrust::complex<float> > td = thrust::device_pointer_cast((thrust::complex<float> *)d);
thrust::device_ptr<float> tr = thrust::device_pointer_cast(r);
thrust::transform(td, td+N, tr, my_cplx_sq() );
}
This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.