【问题标题】:Normalize energy of two audio signals标准化两个音频信号的能量
【发布时间】:2015-09-12 06:47:10
【问题描述】:

我有不同的音频信号,我想确保它们都具有相同的能量。目标是当我播放它们时它们听起来相同(相同的音量)。 我尝试了以下方法(如上所述),但是当我播放它们时,它们听起来不同。此外,如果我在应用归一化后计算能量,它会有所不同。我做错了什么?

我所做的是: 1)使用带有希尔伯特变换的包络计算每个音频信号的能量,

% Calculate the envelope
envelope = abs(hilbert(wave));

% Calculate the energy in the sound
energyInSound=sum(envelope.^2)

2) 确保它们具有相同的能量,

for channel=1:2
        regWave(:,channel) =  1000.* wave(:,channel)./energyInSound(channel);
end

【问题讨论】:

  • 你应该根据 power 而不是能量进行标准化(使用mean 而不是sum)。否则,较长的信号将具有更多的能量,并将“标准化”为较低的音量。另外,请注意,功率并不能准确反映感知功率,因此它只是近似值。例如,人类听觉系统对非常低或非常高的频率不太敏感。在相同功率下,1-kHz 的音调听起来比 100-Hz 的音调响亮
  • @rayryeng 谢谢!我想你也是一个业余音乐家(但我不记得我在哪里看到的):-)
  • @LuisMendo - 很可能是 LinkedIn :D 哈哈。是的,你是正确的......并且在所有帐户上也都正确。
  • @rayryeng 哦,我明白了。我也弹吉他!
  • @LuisMendo - 非常好 :) 我有一段时间没有拿起它了……我应该很快……太忙于回答这些问题了:D

标签: matlab audio normalization envelope


【解决方案1】:

我所做的(使用两个相同长度的信号)是将具有最大能量的信号乘以 sqrt(energyRatio) 和另一个 .*energyRatio。

tempSig1 = sig1.*energyRatio;
tempSig2 = sig2.*sqrt(energyRatio);

这会将信号的能量值更改为相等。

【讨论】:

    猜你喜欢
    • 2013-09-19
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多