【问题标题】:scipy.fft hangs with certain sound filesscipy.fft 挂起某些声音文件
【发布时间】:2013-07-01 04:20:51
【问题描述】:

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: 块不理解,但它似乎与它发生的时间无关
  4. 如果我用 Ctrl+C 终止脚本,我得到的结果就好像它从未卡住一样。
  5. 使用waveaudiolab 打开文件会导致相同的结果。

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

【问题讨论】:

  • 检查data.shape 的值是否存在挂起系统的文件。如果您的数据长度恰好是一个素数,或者是几个大素数的乘积,那么 FFT 算法无法加快 DFT 的计算速度。如果你用零填充,或者将数据修剪到最接近 2 的幂,那么一切都应该运行得更快。
  • 正确,谢谢。当 Ctrl+C'ing 终端时我得到的结果不是正确的,但可能是在计算中达到的那个点。如果您想将您的评论转化为答案,我很乐意接受。

标签: python numpy scipy fft


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    你可以做更多的调试,这可能有助于一点。 (假设您在某种unix象的操作系统上)

    1. 程序卡住后,是否闲置或使用大量CPU?你可以使用“顶部”或类似检查。
    2. 当它看起来困扰时的程序是什么?你能得到一个堆栈追踪吗?使用调试器如GDB或其他一些工具。
    3. 我猜我应该是什么步骤一个。搜索网络以获取您的症状。如果它是一个错误,很可能已经找到并报道了。它甚至可能已经修复了。

    通过查看堆栈迹线,应该可以看出该程序是否陷入了等待的东西,卡在某个地方的循环中或只是做很多工作。 它也可以能够告诉您问题是否在Python代码,C扩展或其他地方。用于读取堆栈迹线当然是一个加号。 :)

    【讨论】:

    • 谢谢您的输入。当它被困在那样的情况下,这个过程确实需要很多CPU,但没有堆栈跟踪 - 它不会抛出任何错误。如果我ctrl + c-break它,它只是输出正确的 i>结果。贯穿PDB没有提供更好的洞察力 - 仍然卡在同一条线上。当然,Googleing是我完成的第一件事。 span>
    猜你喜欢
    • 2011-04-22
    • 2013-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    相关资源
    最近更新 更多