规范化音频波形代码实现(峰值,RMS)

时间:2017-09-24 14:11:08

标签: audio signal-processing waveform

  • 我有一些音频数据(浮点数组),我用它来绘制一个简单的数据 波形。
  • 绘制时,波形在边缘处不会最大化。
  • 没问题 - 数据只需要规范化。我迭代一次找到最大值,然后再次迭代将每个除以最大值。再次绘制,一切看起来都很棒!
  • 但等待有大声介绍或大爆炸的视频会导致其余波形仍然很小。
  • 经过一番研究,我遇到了应该解决这个问题的RMS。我遍历样本并计算RMS,并再次将每个样本除以RMS值。这导致相当大的“削减”:

enter image description here

  • 解决此问题的最佳方法是什么?
  • 直观地说,似乎我可能需要根据移动窗口(而不是整个集合)计算局部最大值或平均值,但我并不完全确定。帮助
  • 注意:波形纯粹是出于视觉目的(音频不会播放给用户)。

1 个答案:

答案 0 :(得分:3)

您可以转置它(有效地使y轴非线性,或者您可以将其视为companding的一种形式。)

假设信号在[-1,1]范围内。

一种流行的快速简单的解决方案是简单地应用hyperbolic tangens function(tanh)。这将通过惩罚更高的值来将值限制为[-1,1]。如果在应用tanh之前放大信号,效果会更明显。

另一种选择是对数变换。当信号改变符号时,必须执行一些预处理。

如果r是一系列样本值,则一种方法可能是这样的:

r.log1p <- log2(1.1 * (abs(r) + 1)) * sign(r)

也就是说,对于每个值取其绝对值,加一个,乘以一些小常量,取日志然后最后将其乘以其相应旧值的符号。

效果可能是这样的: enter image description here