我使用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
不是过度采样的数量,那么该数字是什么意思?
答案 0 :(得分:1)
实值信号的FFT产生具有厄米对称性的光谱。这意味着可以从下半部分获得光谱的上半部分。此外,当FFT大小N
是偶数时,中点是它自己的对称性。结果,频谱完全由N//2 + 1
频率点(scipy.signal.stft
返回的频谱的大小)确定。在您的情况下,N
为4096
,因此您可以沿频率轴获得4096//2 + 1
或2049
点的频谱。您应该能够确认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个输入样本之前和之后用零填充输入。