我正在寻找一种有效压缩音频波形以限制峰值的公式。这不是一个“自动音量控制”应用程序,可以控制放大器增益以保持音量水平,而是我想限制(“软”截断)单个峰值。(我知道这会引入谐波,但我正在尝试分析数据,而不是听它。)
到目前为止,我的(非常粗略的)公式是:
factor = (10 * average / level) + exp(-sqrt(0.1 * level / average))
其中level是瞬时声级,average是历史平均声级,factor是用于产生“调整后”级的乘数(因子乘以level)。
此外,该乘数仅在其计算到的值小于 1 时才应用。否则,水平保持不变。
目的是将调整后的水平限制在历史平均水平的某个倍数(使用此公式约为 15 倍)。这个公式有点像我需要的,但随着数字变大,会出现“下降”。也就是说,调整后的水平(即因子乘以水平)随着未调整水平的增加而增加到一个点,但随后实际上开始变小,而不是渐近。(事实上,添加第一个因素主要是为了防止公式以极高的值归零。)
(想要以这种方式限制值的原因主要是瞬态噪声不会严重破坏声级的运行平均值。但是当您分析打鼾时,“瞬态噪声”非常重要,所以我可以简单地压制它.)
那么,任何人都可以提出更好的建议吗?(似乎渐近行为在你不想要的时候很容易产生,但在你想要的时候很难产生。)