4

我想使用specgram将录制的音频(通过麦克风)和处理的音频(WAV 文件)可靠地转换为 Python 中相同的离散化表示。

我的流程如下:

  1. 获取原始样本(从文件中读取或从麦克风流中读取)
  2. 执行一些标准化(???)
  3. 使用加窗执行 FFT 以生成频谱图(用幅度峰值绘制频率与时间的关系)
  4. 离散音频中的峰值然后记住

基本上,当我进入最后一个离散化过程时,我希望尽可能可靠地在同一首歌曲的频率/时间/幅度空间中达到相同的值。

我的问题是我如何解释录制和 WAV 读取音频中不同的音量(即样本的幅度)?

我的标准化选项(也许?):

  • 在 FFT 之前将窗口中的所有样本除以平均值
  • 在FFT之前对窗口中的所有样本进行去趋势
  • 在 FFT 之前将窗口中的所有样本除以最大幅度样本值(对噪声和异常值敏感)
  • 将频谱图中的所有幅度除以平均值

我应该如何解决这个问题?我几乎没有信号处理知识或经验。

4

1 回答 1

4

WAV 文件的频谱和录制的音频永远不会具有完全相同的形状,因为来自麦克风源的音频数据在传输到您的计算机时会受到额外的干扰。这些干扰可以被平衡,但这可能比你想做的工作更多。

就归一化而言,我建议缩放麦克风信号的频谱,使其能量与 WAV 文件的频谱相匹配(其中“能量”是 FFT 系数的平方幅度之和)。

现在,您提到您希望信号的频谱图尽可能相似。由于频谱图是信号频谱随时间变化的图,因此您可能希望在每个时间间隔尝试重新归一化,而不是在整个录音中仅归一化一次。

于 2013-09-15T20:00:23.697 回答