从16位PCM中消除C ++中的音频噪声(嘶嘶声)

时间:2016-07-04 01:16:28

标签: c++ audio ffmpeg

我一直在查看堆栈溢出的帖子,但我不明白如何从麦克风中抓取的音频中消除嘶嘶声。

我实现了一个简单的低通滤波器,但我一定做错了。

unsigned short *buf = "audio data in PCM format";
double out_sample = 0;
int sample_size = "number of samples of audio";
for (int n = 0; n < sample_size/2; n++)
{
    out_sample = (out_sample * 90 + buf[n] * 10) / 100;
    buf[n] = (unsigned short) out_sample;
}

以上产生了真正腐败的音频。

我知道我需要对PCM数据进行低通滤波。任何人都能明白我做错了什么。

提前致谢。

1 个答案:

答案 0 :(得分:2)

PCM数据实际上始终是签名的数据。您很可能会看到每个负值的影响突然被视为一个巨大的值(&gt; 32768)。然后通过您的&#34;低通滤波器&#34;作为双重值。假设您的DC偏移开始为零,那么您的滤波器将产生接近32768的DC平均值,但在顶部具有相当不可预测且不具有声学敏感的信号。