这是从未答复的列表中删除此问题的迟到答案.
您没有提供足够的信息来诊断您的问题,因为您缺少指定设置cuFFT计划的方式.您甚至没有指定Matlab和cuFFT的信号是否具有完全相同的形状(因此您只需要缩放)或者您具有大致相同的形状.但是,让我提出以下两点意见:
> yp向量有4000个元素;通过fft(yp,1024)与them相反,您通过将信号截断为1024个元素来执行FFT;
>逆cuFFT不会按矢量元素的数量执行缩放.
为了方便起见(它可能对其他用户有用),我在下面报告一个简单的FFT-IFFT方案,该方案还包括使用CUDA Thrust库执行的缩放.
#include
#include
#include
/*********************/
/* SCALE BY CONSTANT */
/*********************/
class Scale_by_constant
{
private:
float c_;
public:
Scale_by_constant(float c) { c_ = c; };
__host__ __device__ float2 operator()(float2 &a) const
{
float2 output;
output.x = a.x / c_;
output.y = a.y / c_;
return output;
}
};
int main(void){
const int N=4;
// --- Setting up input device vector
thrust::device_vector d_vec(N,make_cuComplex(1.f,2.f));
cufftHandle plan;
cufftPlan1d(&plan, N, CUFFT_C2C, 1);
// --- Perform in-place direct Fourier transform
cufftExecC2C(plan, thrust::raw_pointer_cast(d_vec.data()),thrust::raw_pointer_cast(d_vec.data()), CUFFT_FORWARD);
// --- Perform in-place inverse Fourier transform
cufftExecC2C(plan, thrust::raw_pointer_cast(d_vec.data()),thrust::raw_pointer_cast(d_vec.data()), CUFFT_INVERSE);
thrust::transform(d_vec.begin(), d_vec.end(), d_vec.begin(), Scale_by_constant((float)(N)));
// --- Setting up output host vector
thrust::host_vector h_vec(d_vec);
for (int i=0; i
getchar();
}