NumPy FFT 元组索引超出范围?
NumPy FFT tuple index out of range?
我上周 运行 没问题,现在我遇到了一些奇怪的错误:
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 returns 字节作为输出,它们绝对不是 Numpy FFT 所要求的类似数组。
看这里:
What is returned by wave.readframes?
我怀疑您认为这会像 MATLAB waveRead 命令那样运行,returns 一个浮点数组,但这里似乎不是这种情况。
编辑:我使用 map() 命令让它工作。
waveform = map(ord, list(frames))
plt.plot(np.fft.fft(waveform))
plt.show()
我上周 运行 没问题,现在我遇到了一些奇怪的错误:
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 returns 字节作为输出,它们绝对不是 Numpy FFT 所要求的类似数组。
看这里:
What is returned by wave.readframes?
我怀疑您认为这会像 MATLAB waveRead 命令那样运行,returns 一个浮点数组,但这里似乎不是这种情况。
编辑:我使用 map() 命令让它工作。
waveform = map(ord, list(frames))
plt.plot(np.fft.fft(waveform))
plt.show()