Python 在做scipy.signal.spectrogram时,我如何知道将有多少个时间段?

Python 在做scipy.signal.spectrogram时,我如何知道将有多少个时间段?,python,scipy,fft,spectrogram,Python,Scipy,Fft,Spectrogram,我有: 我有nperseg=320和noverlap=80,样本率=16000 我有232800个样本 然而,我的光谱图.shape现在是(161969)。这是161个频率箱,有969个时间段。969是如何计算的 frequencies, times, spectrogram = signal.spectrogram( samples, sample_rate, nperseg=nperseg, window=signal.hann(nperseg), noverlap=

我有:

我有
nperseg=320
noverlap=80
,样本率=16000

我有
232800个
样本

然而,我的
光谱图.shape
现在是
(161969)
。这是161个频率箱,有969个时间段。969是如何计算的

    frequencies, times, spectrogram = signal.spectrogram(
        samples, sample_rate, nperseg=nperseg, window=signal.hann(nperseg), noverlap=noverlap, mode='magnitude')

你的样本数量是多少?更新了问题以包括这一点。你记录了大约14.5秒吗?我认为样本的数量应该是969*240(每个时间段240个净样本)。是的232800/240=970。每个段使用320个时间步,但这些段重叠了80个,因此每个段使用240个净时间步。这里面有一个栅栏柱问题(如:10个柱子容纳9个栅栏段),因为有n个段,但只有(n-1)个重叠。我不确定作者是如何准确地处理它的,但您可以通过读取源代码或向其提供一系列间隔很小的数据集来找到答案。
    time_per_segment_ms = 20
    nperseg = int(sample_rate * 0.001 * time_per_segment_ms)
    overlap = nperseg // 4

    seconds_per_segment = (nperseg - overlap) / sample_rate
    ms_per_segment = int(seconds_per_segment * 1000)