在 STFT 之前进行 Padding

发布时间 2024-01-12 16:46:52作者: 倒地

在阅读这个 notebook 时发现了一个小技巧:在 STFT 之前先对音频的首尾进行 Padding。

在 STFT 之前进行 Padding

假设使用长度为 \(N\) 的窗口对音频进行 STFT 之前,最好在音频首尾 Padding 出 \(N/2\) 的长度。

这是因为,例如,若希望第一个窗口的中心对应到时间 0 的音频位置,就需要额外添加 \(N/2\) 长度的额外数据。

x = F.pad(x, pad=(self.n_fft // 2, self.n_fft // 2), mode='reflect')

zero padding、reflect padding

有两种常见的 Padding 策略:

  • zero padding,仅用 0 填充
  • reflect padding,像镜面反射一样使用已有信号进行填充

参考来源