我有来自ffmpeg的样本,通常它是16位样本(短类型),我使用了带有dbGain的iir带通滤波器,如所述here,在过滤之后我有时得到一个短型溢出和当计算出的样本值从32767 / -32767出来时,它的结果是一些噪声,是否有任何方法可以逃避音频pcm样本限幅。可能存在任何方法吗?
我用谷歌搜索但没找到任何有用的例子?
更新
当我将传递函数计算结果转换为整数并检查溢出时,噪声仍然会发生::
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;
答案 0 :(得分:2)
16位PCM采样必须在[-32768 .. + 32767]范围内。如果您将数学(在您的情况下为双二阶滤波器)应用于输入信号,则输出不能保证在该范围内,这是您在应用正增益时不可避免的结果。
由于使用这种处理命中范围边界是一种自然的副作用,你应该使用其中一种方法处理它(列表不应该是完整的):