Python - Выполнение БПФ и IFFT отличается от исходного сигнала (GPU) - PullRequest
0 голосов
/ 05 июня 2019

Я попытался сделать БПФ для сигнала как такового:

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)
signal *= (1.0 + 0.5 * np.sin(2.0*np.pi*3.0*t) )

from skcuda.fft import Plan
import skcuda

def fft_gpu_pycuda(signal):
  x_gpu = gpuarray.to_gpu(signal)
  x_hat = gpuarray.empty_like(x_gpu, dtype=np.complex64)
  plan = Plan(x_gpu.shape,np.float64,np.complex128)
  skcuda.fft.fft(x_gpu, x_hat, plan)
  return x_hat.get()

Затем я пытаюсь сравнить исходный сигнал с iftt fft следующим образом:

fft = fft_gpu_pycuda(signal)
inverse = scipy.fftpack.ifft(fft)
print('inverse matches original: %s',np.allclose(inverse, signal, atol=1e-6))

Вывод:

inverse matches original: %s False

Так что я предполагаю, что с моей функцией fft что-то не так. Любое понимание будет с благодарностью. Спасибо!

...