首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用pycuda进行一维fft?

如何使用pycuda进行一维fft?
EN

Stack Overflow用户
提问于 2019-06-04 16:37:49
回答 1查看 317关注 0票数 1

嗨,我试图对一个信号进行简单的一维FFT变换。这就是我试过的:

代码语言:javascript
运行
复制
import numpy as np
from scipy.signal import hilbert, chirp

duration = 1.0
fs = 400.0
samples = int(fs*duration)
t = np.arange(samples) / fs
signal = chirp(t, 20.0, t[-1], 100.0)
代码语言:javascript
运行
复制
import pycuda.autoinit
from pycuda import gpuarray
import numpy as np
from skcuda import fft
代码语言:javascript
运行
复制
def fft_gpu1(signal):
  x_gpu = gpuarray.to_gpu(signal)
  x_hat = gpuarray.empty_like(x_gpu, dtype=np.complex64)
  plan = fft.Plan(x_gpu.shape,np.float32,np.complex64)
  fft.fft(x_gpu, x_hat, plan)
  return x_hat.get()
代码语言:javascript
运行
复制
print(fft_gpu1(signal))

然而,我得到的结果是:

代码语言:javascript
运行
复制
[nan+nanj nan+nanj nan+nanj nan+nanj nan+nanj nan+nanj nan+nanj nan+nanj
 nan+nanj nan+nanj nan+nanj nan+nanj nan+nanj nan+nanj nan+nanj nan+nanj
 nan+nanj nan+nanj nan+nanj nan+nanj nan+nanj nan+nanj nan+nanj nan+nanj
 nan+nanj nan+nanj nan+nanj nan+nanj nan+nanj nan+nanj nan+nanj nan+nanj
...
  0. +0.j  0. +0.j  0. +0.j  0. +0.j  0. +0.j  0. +0.j  0. +0.j  0. +0.j
  0. +0.j  0. +0.j  0. +0.j  0. +0.j  0. +0.j  0. +0.j  0. +0.j  0. +0.j
  0. +0.j  0. +0.j  0. +0.j  0. +0.j  0. +0.j  0. +0.j  0. +0.j  0. +0.j]

如果能了解我为什么会得到这个问题,我们将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2021-07-06 13:40:01

信号应该是float32类型,而不是float64:

代码语言:javascript
运行
复制
x_gpu = gpuarray.to_gpu(signal.astype(np.float32))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56448047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档