我有来自ffmpeg的样本,通常它是16位样本(短类型),我使用了带有dbGain的iir带通滤波器,如
here所述,经过滤波后,我有时得到一个短型溢出,结果是一些噪音计算出的样本值从32767 / -32767出来,有没有办法逃避音频pcm样本剪辑.可能存在任何方法?
我用谷歌搜索但没有找到任何有用的例子?
UPDATE
当我将传递函数计算结果转换为整数并检查溢出时,仍然会出现噪音::
int result = A1 * ((int) Rx) + A2 * ((int) Rxx) + A3 * ((int) Rxxx)
- B1 * ((int) Ryy) - B2 * ((int) Ryyy);
if (result > 32767)
result = 32767;
if (result < -32700)
result = -32700;
y = (short) result;
最佳答案 16位PCM采样必须在[-32768 .. 32767]范围内.如果您将数学(在您的情况下为双二阶滤波器)应用于输入信号,则不保证输出保持在该范围内,如果您应用正增益,这是不可避免的结果.
由于使用这种处理命中范围边界是一种自然的副作用,因此您应该使用其中一种方法处理它(列表不应该是完整的):
>确保您的输入信号足够安静和/或将值向右移动几位,以便为输出上的大值提供余量
>对输出信号使用更高的位数,例如24位PCM
>使用浮点PCM输出信号到PCM采样范围外的精度损失