SciPy を使用して Python でスクリプトを作成し、信号に対して短時間のフーリエ変換を実行しました。1000 のタイムポイントを持つシグナルで実行したところ、問題なく実行されました。100 万のタイムポイントを持つ信号で実行すると、コンピューターがフリーズしました (コンピューターが応答せず、オーディオが再生されている場合、コンピューターはスキップとループのバズを出力します)。これは、私が試みた3回すべてで一貫して発生しました。何時間もかかるスクリプトを書いたことがありますが、実際にコンピューターがフリーズするスクリプトに遭遇したことはありません。理由はありますか?スクリプトは以下に掲載されています。
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)