【问题标题】:Number of overlapping frames generated by STFTSTFT 生成的重叠帧数
【发布时间】:2018-06-29 10:28:50
【问题描述】:

我正在使用scipy.signal.stft 获取音频的stft。没有问题,我得到了结果。但我不明白的是,当使用采样率为fs=44100 Hz169600 samples 的音频来计算stft 时,我得到3 个返回为f, tZxx。这里Zxx 的形状是(2049, 84)

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

我的问题:有2049 重叠帧吗?如果是或不是,如何计算stft中重叠帧的数量?如果2049不是重叠样本的数量,这个数字是什么意思?

【问题讨论】:

    标签: python scipy signal-processing


    【解决方案1】:

    实值信号的 FFT 产生具有厄米对称性的频谱。这意味着可以从下半部分获得频谱的上半部分。另外,当 FFT 大小N 是偶数时,中点就是它自己的对称性。因此,频谱完全由N//2 + 1 频点确定(这是scipy.signal.stft 返回的频谱大小)。在您的情况下,N4096,因此您会沿着频率轴获得 4096//2 + 12049 点的频谱。您应该能够确认 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 个输入样本之前和之后用零填充输入。

    【讨论】:

    • 哦,确实。感谢您的解释。现在我明白这些数字的含义了!
    猜你喜欢
    • 2018-07-08
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2016-06-26
    • 1970-01-01
    相关资源
    最近更新 更多