我使用 SciPy 在 Python 中编写了一个脚本来对信号执行短时傅立叶变换。当我在具有一千个时间点的信号上运行它时,它运行良好。当我在具有一百万个时间点的信号上运行它时,它冻结了我的计算机(计算机没有响应,如果正在播放音频,计算机会输出跳跃和循环的嗡嗡声);这一直发生在我尝试的所有 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)