规范化音频信号

时间:2013-09-15 03:50:17

标签: python audio numpy matplotlib signal-processing

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

我的流程如下:

  1. 获取原始样本(从文件中读取或从麦克风中读取)
  2. 执行一些规范化(???)
  3. 使用窗口执行FFT以生成频谱图(绘制频率与振幅峰值的时间对比)
  4. 将音频中的峰值离散化然后记忆
  5. 基本上,当我到达最后一个离散化过程时,我希望尽可能可靠地在同一首歌的频率/时间/幅度空间中得到相同的值。

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

    我的标准化选项(可能?):

    • 在FFT
    • 之前按平均值划分窗口中的所有样本
    • Detrend在FFT之前的窗口中的所有样本
    • 在FFT
    • 之前,将窗口中的所有样本除以最大幅度样本值(对噪声和异常值敏感)
    • 按频谱
    • 划分频谱图中的所有幅度

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

1 个答案:

答案 0 :(得分:2)

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

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

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