我通过一个通道的流接收 PCM 样本,每秒 8000 个样本。我想出了通过计算信号的“力”来找出响度的方法,方法是通过添加每下 1000 个样本的绝对值,然后除以样本数为 1000。它工作得有些好,但有时我的计算变得疯狂,我的绝对总和样本的价值似乎不断增加并达到荒谬的价值......所以我认为我在那里做错了什么。有趣的是,当计算变得疯狂时,当我用手点击“声音输入设备”时,一切都会恢复正常;)
反正。我的问题是:如何正确计算一组 PCM 样本的响度?
我通过一个通道的流接收 PCM 样本,每秒 8000 个样本。我想出了通过计算信号的“力”来找出响度的方法,方法是通过添加每下 1000 个样本的绝对值,然后除以样本数为 1000。它工作得有些好,但有时我的计算变得疯狂,我的绝对总和样本的价值似乎不断增加并达到荒谬的价值......所以我认为我在那里做错了什么。有趣的是,当计算变得疯狂时,当我用手点击“声音输入设备”时,一切都会恢复正常;)
反正。我的问题是:如何正确计算一组 PCM 样本的响度?
要测量能量(与“响度”密切相关但不相同),请计算 RMS(均方根)。
是样本数和是当时的样本.
您可以在任何块大小的样本中执行此操作。您可以一次对所有样本执行此操作以获得平均能量,或者您可以将样本集分成块以查看能量如何随时间变化。
还有更复杂的方法考虑到身体和大脑的怪癖。您可以在此处找到更多相关信息。
我不是专家,不确定您要实现什么目标,但听起来您在某处出现了编程错误,您能给我们看一下代码吗?
当您说响度时,它的意思是这里定义的吗?在这种情况下,您需要考虑侦听器。
如果您只对能量感兴趣,那么 RMS 或平均平方可能是更好的选择。