在阅读这个 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,像镜面反射一样使用已有信号进行填充