STFT生成的重叠帧数

时间:2018-01-20 07:19:34

标签: python scipy signal-processing

我使用scipy.signal.stft获取音频的stft。没有问题,我得到了结果。但我不明白的是,当169600 samples的采样率为fs=44100 Hz的音频被用来计算stft时,我得到3次返回f, t和{{ 1}}。这里Zxx的形状为Zxx

为计算(2049, 84),我使用大小为stft的窗口,并使用4096作为窗口类型。默认情况下,hanning window在帧之间使用scipy.signal.stft重叠。

我的问题:是否有window_size // 2个重叠框架?如果是,如果不是,如何计算stft中重叠帧的数量?如果2049不是过度采样的数量,那么该数字是什么意思?

1 个答案:

答案 0 :(得分:1)

实值信号的FFT产生具有厄米对称性的光谱。这意味着可以从下半部分获得光谱的上半部分。此外,当FFT大小N是偶数时,中点是它自己的对称性。结果,频谱完全由N//2 + 1频率点(scipy.signal.stft返回的频谱的大小)确定。在您的情况下,N4096,因此您可以沿频率轴获得4096//2 + 12049点的频谱。您应该能够确认f确实是2049频率值的数组(在44100/4096中从0到44100/2 Hz或以~10.77Hz为增量)。

就时间值而言,您可以将其计算为

number_of_samples = 169600
number_time_values = (number_of_samples+window_size)//(window_size - window_size//2) 
%  = (169600 + 4096)//(4096 - 2048) 
%  = 84

分子中的+window_size(在您的情况下为+4096)项是由于boundary = 'zeros'默认选项,它在您的实际169,600个输入样本之前和之后用零填充输入。