Ошибка памяти в pycharm с помощью функции Уэлча Сципи - PullRequest
0 голосов
/ 03 ноября 2018

Я хочу получить периодограмму Уэлча, используя scipy.signal в pycharm. Мой сигнал - это 5-минутный аудиофайл с Fs = 48 кГц, поэтому я думаю, что это очень большой сигнал. Строка была:

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

Я получаю ошибку памяти. Мне было интересно, если это конфигурация Pycharm или это слишком большой сигнал. Моя оперативная память составляет 8 Гб.

Иногда это работает с некоторыми аудиофайлами, но идея состоит в том, чтобы сделать это с несколькими, поэтому после одного или двух возникает ошибка.

1 Ответ

0 голосов
/ 28 января 2019

Я проверил ваши настройки, и 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-разрядная версия) он потребляет 600 МБ пиковой памяти во время вызова welch, который перерабатывается непосредственно после этого, дополнительно до ~ 600 МБ выделения для исходного массива и самого Python. Призыв к welch сам по себе не приводит к постоянному значительному увеличению памяти.

Вы можете сделать следующее:

  • Обновление до новейшей версии scipy, поскольку проблемы с Уэлчем ранее
  • Убедитесь, что на вашем ПК достаточно свободной памяти и закройте приложения, требующие много памяти (например, chrome)
  • Преобразование вашего массива в более низкий тип данных, например. от float64 до float32 или float16
  • Обязательно освободите переменные, которые больше не нужны. Особенно, если вы загружаете несколько сигналов и сохраняете результат в разных массивах, он может накапливаться довольно быстро. Оставьте только то, что вам нужно, и удалите переменные через del variable_name, убедитесь, что в других местах программы не осталось ссылок. Например, если вам не нужна переменная audio, либо удалите ее явно после welch(...), либо перезапишите ее следующими аудиоданными.
  • Запустите сборщик мусора gc.collect(). Однако это, вероятно, не решит вашу проблему, так как в любом случае Python управляется автоматически в Python.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...