【发布时间】:2013-09-19 11:10:33
【问题描述】:
我想使用specgram 可靠地将录制的音频(通过麦克风)和处理的音频(WAV 文件)转换为 Python 中相同的离散化表示。
我的流程如下:
- 获取原始样本(从文件中读取或从麦克风流中读取)
- 执行一些标准化 (???)
- 使用加窗执行 FFT 以生成频谱图(用幅度峰值绘制频率与时间的关系图)
- 离散化音频中的峰值,然后记住
基本上,当我进入最后一个离散化过程时,我希望尽可能可靠地在同一首歌曲的频率/时间/幅度空间中达到相同的值。
我的问题是我如何解释录制的和 WAV 读取的音频中不同的音量(即样本的幅度)?
我的规范化选项(也许?):
- 在 FFT 之前将窗口中的所有样本除以平均值
- Detrend FFT 前窗口中的所有样本
- 在 FFT 之前将窗口中的所有样本除以最大幅度样本值(对噪声和异常值敏感)
- 将频谱图中的所有幅度除以平均值
我应该如何解决这个问题?我几乎没有信号处理知识或经验。
【问题讨论】:
-
由于噪声可能永远不会具有最高幅度,因此您可以 1) 在 FFT 之前将每个样本除以其各自的最大幅度; 2) 然后在 FFT 之前乘以目标公共幅度; 3)在归一化样本中进行FFT
-
我不确定我是否理解这个问题,但如果您只关心频谱图中的峰值位置,则无需对幅度进行归一化。
-
@SaulloCastro:什么是“目标共同幅度”?
-
@BjornRoche:我的理解是频谱图表示信号的幅度(与音量相关)作为窗口和频率时间的函数。如果这种想法是正确的,那么将幅度归一化以考虑不同的音量标量倍数是否有意义?
-
@lollercoaster 目标共同幅度我的意思是您希望在最后拥有的共同幅度,共同音量...
标签: python audio numpy matplotlib signal-processing