【问题标题】:How to do a 1-D fft using pycuda?如何使用 pycuda 进行一维 fft?
【发布时间】:2019-10-20 05:30:48
【问题描述】:

您好,我正在尝试对信号进行简单的 1D-FFT 变换。这是我尝试过的:

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)

import pycuda.autoinit
from pycuda import gpuarray
import numpy as np
from skcuda import fft

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()

print(fft_gpu1(signal))

但是,我得到的结果是:

[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]

任何关于我为什么会遇到此问题的见解将不胜感激

【问题讨论】:

    标签: python gpu fft pycuda


    【解决方案1】:

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

    x_gpu = gpuarray.to_gpu(signal.astype(np.float32))
    

    【讨论】:

      猜你喜欢
      • 2020-02-21
      • 2015-12-03
      • 2012-08-20
      • 1970-01-01
      • 1970-01-01
      • 2016-09-10
      • 1970-01-01
      • 2014-05-14
      • 1970-01-01
      相关资源
      最近更新 更多