对数能量计算

信息处理 matlab 语音处理
2022-01-27 21:40:09

我这里有一些我不太明白的代码。它通过以下方式计算给定帧的能量:

En=log(1+energy(32767*frame))

能量函数定义为

energy = sum(s.*s)/max(size(s))

其中's'是给定的框架。

我不明白为什么帧需要乘以 32767,这是 unsigned int 16 的最大值。我找不到这背后的理论。你们中有人知道为什么会发生这种乘法吗?它与日志计算有什么关系吗? unsigned int 16 的最大值。我找不到这背后的理论。你们中有人知道为什么会发生这种乘法吗?它与日志计算有什么关系吗?

1个回答

首先,信号的幅度以任意单位表示,因此没有“正确”的答案。您不太可能计算绝对声能值——这取决于录音链的增益和换能器的特性。

一些音频分析/特征提取软件认为输入音频信号的满量程是 [-32768, 32767](由于 16 位格式的优势),一些其他实现期望它们的输入在 [-1.0 , 1.0] 范围。Matlab 的wavread函数可以在读取数据时返回两种格式,使用 'double' 或 'native' 参数。

我怀疑在您的代码中乘以 32767 只是为了使输出与算法的参考实现保持一致,该算法期望数据在 [-32768, 32767] 范围内,或者可能使结果与以前的版本保持一致使用带有“本机”而不是“双”刻度的输入信号的软件。