STFT 生成的重叠帧数
Number of overlapping frames generated by STFT
我正在使用 scipy.signal.stft
获取音频的 stft。没有问题,我得到了结果。但是我不明白的是,当使用采样率为fs=44100 Hz
的169600 samples
音频计算stft
时,我得到3returns作为f, t
和 Zxx
。这里 Zxx
的形状是 (2049, 84)
。
为了计算 stft
,我使用大小 4096
的 window,作为 window 类型,使用 hanning window
。默认情况下,scipy.signal.stft
在帧之间使用 window_size // 2
重叠。
我的问题:是否有 2049
重叠的帧?如果有或没有,如何计算 stft 中重叠帧的数量?如果 2049
不是重叠样本的数量,那这个数字是什么意思?
实值信号的 FFT 产生具有 Hermitian 对称性的频谱。这意味着可以从下半部分获得光谱的上半部分。另外,当 FFT 大小 N
为偶数时,中点是其自身的对称性。因此,频谱完全由 N//2 + 1
个频率点(即 scipy.signal.stft
返回的频谱大小)决定。在您的情况下 N
是 4096
,因此您会得到沿频率轴的 4096//2 + 1
或 2049
点的频谱。您应该能够确认 f
确实是 2049
频率值的数组(从 0 到 44100/2 Hz,以 44100/4096 或 ~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 个输入样本前后用零填充输入.
我正在使用 scipy.signal.stft
获取音频的 stft。没有问题,我得到了结果。但是我不明白的是,当使用采样率为fs=44100 Hz
的169600 samples
音频计算stft
时,我得到3returns作为f, t
和 Zxx
。这里 Zxx
的形状是 (2049, 84)
。
为了计算 stft
,我使用大小 4096
的 window,作为 window 类型,使用 hanning window
。默认情况下,scipy.signal.stft
在帧之间使用 window_size // 2
重叠。
我的问题:是否有 2049
重叠的帧?如果有或没有,如何计算 stft 中重叠帧的数量?如果 2049
不是重叠样本的数量,那这个数字是什么意思?
实值信号的 FFT 产生具有 Hermitian 对称性的频谱。这意味着可以从下半部分获得光谱的上半部分。另外,当 FFT 大小 N
为偶数时,中点是其自身的对称性。因此,频谱完全由 N//2 + 1
个频率点(即 scipy.signal.stft
返回的频谱大小)决定。在您的情况下 N
是 4096
,因此您会得到沿频率轴的 4096//2 + 1
或 2049
点的频谱。您应该能够确认 f
确实是 2049
频率值的数组(从 0 到 44100/2 Hz,以 44100/4096 或 ~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 个输入样本前后用零填充输入.