fft 缩放 matlab,matlab – 用cuFFT进行逆FFT缩放

这是从未答复的列表中删除此问题的迟到答案.

您没有提供足够的信息来诊断您的问题,因为您缺少指定设置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();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值