从音频时频域分析中检测背景噪声

信息处理 fft 声音的 stft 音频处理 即时的
2022-02-23 23:22:14

我需要检测/减少实时音频中的旁白/背景噪声。我被困在如何从音频时频域分析中检测到这一点。我已经从 stft 获取时频数据(我正在使用 java 以更轻松地与我们的项目集成)。我可以在没有任何机器/深度学习算法的情况下做到这一点吗,因为我对这些不太了解......每当我阅读任何文章时,这些​​文章主要都会来到这一点并将数据交给机器/深度学习算法。但是当我通过波板可视化 tfft(频谱)中的音频数据时,我清楚地可以识别相同/其他频段内的语音和噪声。但这背后的算法可能是什么?如何从时频 stft 数据中检测到这些? 在此处输入图像描述 提前致谢

1个回答

在这方面进行了一些研发后,我发现只有一种解决问题的好方法。这就是短时傅里叶变换(STFT),因为音频帧的 RMS 是那里存在的所有频率的混合能量。它可以给出一个想法,但在许多情况下会失败。但是通过 STFT,我们得到了频率区间(范围)和那些频率的特定功率,与某个阈值相比,我可以检测到语音,并且可以检测到低于该阈值的噪声/旁白。现在您可以使用 Infos 两种方式。

数字 1是显而易见的,它在频域中对频率功率进行复杂缩放,然后实时重建音频。但是在尝试了这个之后,我失败了,因为频率缩放对时域有很大的影响。(尝试了overlap_samples+windowing+zero-pad+scaling+overlap-save等,并将继续探索,让我知道你是否可以作为新手帮助我)

然后我想到了另一种更简单有趣的方法(第 2 号),用于最小/平均嘈杂环境。您可以在频域中收集尽可能多的信息,例如阈值的语音/非语音概率,单帧中的阈值通过/失败计数,并设计一种自适应算法来计算“比例”值并将此比例应用于时域. 这不会 100% 去除背景噪音(因为它会在实际讲话中出现)但是当你不说话时,如果你能正确实现它,它可以像魔法一样工作。因此,背景噪音或旁白将被缩放到非常低的水平,并且在您不说话时不会伤害他人。这是我设计自适应算法并应用后的结果。

在此处输入图像描述