使用Scipy的Welch函数在Pycharm中发生内存错误

时间:2018-11-02 22:38:16

标签: python-3.x scipy pycharm

我想用pycharm中的scipy.signal获取韦尔奇的周期图。我的信号是一个5分钟的音频文件,Fs = 48 kHz,所以我想这是一个很大的信号。该行是:

f, p = signal.welch(audio, Fs, nperseg=512)

我遇到内存错误。我想知道这是否是pycharm配置的东西,还是只是一个太大的信号。我的RAM是8 Gb。

有时它可以与某些音频文件一起使用,但其想法是对多个音频文件进行处理,因此在一两个之后,错误就会出现。

1 个答案:

答案 0 :(得分:1)

我已经测试了您的设置,welch似乎不是问题。为了进行进一步的分析,您必须运行整个脚本。

import numpy as np
from scipy.signal import welch

fs = 48000
signal_length = 5 * 60 * fs

audio_signal = np.random.rand(signal_length)
f, Pxx = welch(audio_signal, fs=fs, nperseg=512)

在我的计算机(Windows 10,64位)上,它在调用welch时消耗600 MB的峰值内存,此内存随后会直接回收,另外还为初始数组和Python本身分配了约600MB的内存。调用welch本身不会导致任何永久性的显着内存增加。

您可以执行以下操作:

  • 像以前的problems一样使用Welch升级到scipy的最新版本
  • 检查您的PC是否有足够的可用内存并关闭需要大量内存的应用程序(例如chrome)
  • 将数组转换为较低的数据类型,例如从float64float32float16
  • 确保释放不再需要的变量。特别是如果您加载多个信号并将结果存储在不同的数组中,则它可能会很快积累。仅保留您需要的内容,并通过del variable_name删除var,检查程序中其他地方是否没有引用。例如,如果您不需要audio变量,则可以在welch(...)之后显式删除它,或者用下一个音频数据覆盖它。
  • 运行garbage collector gc.collect()。但是,由于垃圾是在Python中自动管理的,因此,这可能无法解决您的问题。