Я написал скрипт на Python, используя SciPy для выполнения кратковременного преобразования Фурье сигнала. Когда я запускал его на сигнале с тысячей временных точек, он работал нормально. Когда я запускал его на сигнале с миллионом временных точек, мой компьютер зависал (компьютер не отвечал, и если звук воспроизводился, компьютер выдавал пропуски и зацикливания); это постоянно происходило все три раза, когда я пытался это сделать. Я писал сценарии, которые занимали бы часы, но я никогда не сталкивался с таким, который фактически зависал бы на моем компьютере. Есть идеи, почему? Скрипт размещен ниже:
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)