3

scipy.fft运行这个简单的脚本时似乎挂起:

import scipy
from scipy.io import wavfile

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

在某些文件上。例如,试试这个文件。

我注意到的几件事:

  1. 从交互式解释器运行各个命令不会挂起。
  2. 与其他声音文件一起运行并不总是挂起脚本(不仅仅是这个文件不起作用)
  3. 有时我会收到WavFileWarning: chunk not compatible,但它似乎与它发生的时间无关
  4. Ctrl如果我用+终止脚本,C我得到的结果就好像它从未卡住一样。
  5. wave使用or打开文件audiolab会导致相同的结果。

这是一个错误还是我做错了什么?

4

2 回答 2

3

检查挂起系统的文件的 data.shape 的值。如果您的数据长度恰好是一个素数,或者是几个大素数的乘积,那么 FFT 算法无法加快 DFT 的计算速度。如果你用零填充,或者将数据修剪到最接近的 2 次方,那么一切都应该运行得更快。

于 2013-07-04T02:45:26.343 回答
0

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

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

  1. 当程序卡住时,它是空闲还是占用大量CPU?你可以使用“top”或类似的来检查。
  2. 当程序出现卡住时,它在做什么?你能得到堆栈跟踪吗?使用像 gdb 这样的调试器或其他工具。
  3. 我想真正应该是第一步。在网上搜索您的症状。如果它是一个错误,它很可能已经被发现并被报告。它甚至可能已经修复。

通过查看堆栈跟踪,应该可以查看程序是否卡在等待某事,卡在某个地方的循环中,或者只是在做很多工作。它还可以告诉您问题出在 python 代码、C 扩展还是其他地方。习惯于读取堆栈跟踪当然是一个加分项。:)

于 2013-07-03T14:11:42.710 回答