繁体   English   中英

NumPy FFT元组索引超出范围?

[英]NumPy FFT tuple index out of range?

上周我在运行ffts没问题,现在出现一些奇怪的错误:

Traceback (most recent call last):
  File "call.py", line 52, in <module>
    main()
  File "call.py", line 50, in main
    validate(temp_path)
  File "call.py", line 35, in validate
    ivr_wav = IVR_Wav(validate_path)
  File "call.py", line 42, in __init__
    self.fft = get_fft(temp_wav_path)
  File "call.py", line 21, in get_fft
    return numpy.fft.fft(frames)
  File "/usr/lib/python2.7/dist-packages/numpy/fft/fftpack.py", line 174, in fft
    return _raw_fft(a, n, axis, fftpack.cffti, fftpack.cfftf, _fft_cache)
  File "/usr/lib/python2.7/dist-packages/numpy/fft/fftpack.py", line 50, in _raw_fft
    n = a.shape[axis]
IndexError: tuple index out of range

我的代码是:

def get_fft(fft_path):
    wav = wave.open(fft_path, 'r')
    frames = wav.readframes(wav.getnframes())
    wav.close()
    return numpy.fft.fft(frames)

NumPy代码为:

def _raw_fft(a, n=None, axis=-1, init_function=fftpack.cffti,work_function=fftpack.cfftf, fft_cache = _fft_cache ):
    a = asarray(a)
    if n is None:
         n = a.shape[axis]
    if n < 1:
         raise ValueError("Invalid number of FFT data points (%d) specified." % n)

-1超出元组范围是有道理的,但是我该如何解决? 我不太清楚,但是我相信调用numpy.fft.fft(path, axis=0)应该允许n=a.shape[axis]执行,但是这会将n设置为样本的长度吗? 这甚至是适当的吗? 我对numpy和nd-arrays不太熟悉。

问题不是您的FFT,而是readFrames命令。 wav.readFrames返回Bytes作为输出,并且它们肯定不是Numpy FFT所要求的数组形式。

在这里看看:

wave.readframes返回什么?

我怀疑您认为它的行为类似于MATLAB waveRead命令,该命令返回一个浮点数数组,但在这里似乎并非如此。

编辑:我通过使用map()命令使它起作用。

waveform = map(ord, list(frames))
plt.plot(np.fft.fft(waveform))
plt.show()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM