J'ai écrit un script en Python en utilisant SciPy pour effectuer une transformation de Fourier de courte durée sur un signal. Quand je l'ai couru sur un signal avec un millier de points, ça s'est bien passé. Quand je l'ai exécuté sur un signal avec un million de points de temps, il a gelé mon ordinateur (l'ordinateur ne répond pas, et si l'audio était en train de jouer, l'ordinateur émet un saut et un bourdonnement en boucle); Cela a toujours eu lieu tous les trois fois que je l'ai essayé. J'ai écrit des scripts qui prendraient des heures, mais je n'en ai jamais rencontré un qui gelait réellement mon ordinateur. Une idée pourquoi? Le script est affiché ci-dessous:Pourquoi l'exécution de ce script gèle-t-elle mon ordinateur?
import scipy as sp
from scipy import fftpack
def STFT(signal, seconds_per_sample, window_seconds, min_Hz):
window_samples = int(window_seconds/seconds_per_sample) + 1
signal_samples = len(signal)
if signal_samples <= window_samples:
length = max(signal_samples, int(1/(seconds_per_sample*min_Hz)) + 1)
return sp.array([0]), fftpack.fftshift(fftpack.fftfreq(length, seconds_per_sample)), fftpack.fftshift(fftpack.fft(signal, n = length))
else:
length = max(window_samples, int(1/(seconds_per_sample*min_Hz)) + 1)
frequency = fftpack.fftshift(fftpack.fftfreq(length, seconds_per_sample))
time = []
FTs = []
for i in range(signal_samples - window_samples):
time.append(seconds_per_sample*i)
FTs.append(fftpack.fftshift(fftpack.fft(signal[i:i + window_samples], n = length)))
return sp.array(time), frequency, sp.array(FTs)
Est-ce que vous regardez sur la consommation de mémoire du script? Si c'est le cas, cela pourrait avoir des conséquences. – ondra
Donc c'est un problème de mémoire principale épuisée? – BatWannaBe
Le sp.array (FTs) résultant contiendrait de l'ordre de 10^12 flotteurs, après tout. – BatWannaBe