scipy.fft挂起某些声音文件

时间:2013-07-03 12:55:53

标签: python numpy scipy fft

运行这个简单的脚本时,

scipy.fft似乎挂了:

import scipy
from scipy.io import wavfile

sound = 'sounds/silence/iPhone5.wav'
fs, data = wavfile.read(sound)
print scipy.fft(data)

某些文件。例如,尝试this文件。

我注意到的一些事情:

  1. 从交互式解释器运行各个命令不会挂起。
  2. 与其他声音文件一起运行并不总是挂起脚本(不仅仅是这个文件不起作用)
  3. 有时我得到 WavFileWarning:chunk not understand ,但它似乎与发生的时间无关
  4. 如果我使用 Ctrl + C 终止脚本,我会得到结果,好像它永远不会卡住一样。
  5. 使用waveaudiolab打开文件会产生相同的结果。
  6. 这是一个错误还是我做错了什么?

2 个答案:

答案 0 :(得分:3)

检查data.shape的值以查找挂断系统的文件。如果您的数据长度恰好是素数,或者是几个大素数的乘积,那么FFT算法可以做很多事情来加速DFT的计算。如果你用零填充,或者将数据调整到最接近2的幂,那么一切都应该运行得更快。

答案 1 :(得分:0)

这应该是一个评论,但那里没有足够的空间......

您可以进行更多调试,这可能会有所帮助。 (假设你使用某种类似unix的操作系统)

  1. 当程序卡住时,是否空闲或使用大量CPU?您可以使用“顶部”或类似物来检查。
  2. 程序看起来卡住了什么程序?你能得到一个堆栈跟踪吗?使用像gdb这样的调试器或其他工具。
  3. 我猜应该是第一步。在网上搜索您的症状。如果它是一个bug,很可能已经找到并报告了。它甚至可能已经修好了。
  4. 通过查看堆栈跟踪,应该可以看到程序是否在等待某些东西,陷入某个循环或只是做大量工作。 它也可以告诉你问题是在python代码,C扩展还是其他地方。用于读取堆栈跟踪当然是一个加号。 :)