-1

我正在使用 pyfftw 进行简单的 fft。我不确定如何使用 pyfftw 因为我收到错误:

KeyError                                  Traceback (most recent call last)
pyfftw\pyfftw.pyx in pyfftw.pyfftw.FFTW.__cinit__()

KeyError: (dtype('float64'), dtype('float64'))

During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)
<ipython-input-31-dc32579f60f3> in <module>()
      3 start = time.time()
      4 b4 = numpy.zeros_like(a)
----> 5 fft = pyfftw.FFTW( a, b4, direction='FFTW_FORWARD', flags=('FFTW_MEASURE', ), threads=nthread, planning_timelimit=None )
      6 fft()
      7 end4 = time.time() - start

pyfftw\pyfftw.pyx in pyfftw.pyfftw.FFTW.__cinit__()

ValueError: Invalid scheme: The output array and input array dtypes do not correspond to a valid fftw scheme.

这是我使用的代码:

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

import time
import numpy
import pyfftw
import multiprocessing
nthread = multiprocessing.cpu_count()

a = signal

pyfftw.forget_wisdom()
start = time.time()
b4 = numpy.zeros_like(a)
fft = pyfftw.FFTW( a, b4, direction='FFTW_FORWARD', flags=('FFTW_MEASURE', ), threads=nthread, planning_timelimit=None )
fft()
end4 = time.time() - start

print(end4)

任何关于为什么这不起作用的见解将不胜感激

4

1 回答 1

1

您可能希望使用 complex128 作为输出类型,因为实值信号的 DFT 通常是复值(除非实值信号是对称的)。

https://hgomersall.github.io/pyFFTW/pyfftw/pyfftw.html#scheme-table

于 2019-05-31T15:07:27.547 回答