java 中的音频降噪

Audio Noise removal in java

需要一种算法(或一组好的算法来比较各种输入数据)来降低语音音频信号的噪声水平,而不会使用 Java 使信号明显失真。

输入是一个音频信号,包括语音和一些背景噪音。噪音在录音过程中会发生变化。确实存在这样的消除噪音的方法,专为语音识别和电影制作而开发。

所需的输出是失真度最低的语音信号,背景干扰对人耳来说是最低限度的。量化标准最小化

  1. 信噪比和
  2. 总谐波失真。

您正在寻找自适应噪声消除以及可能适应同一流或文件中随时间变化的噪声条件的多种方法。

旧方法包括:

  • 使用带通 and/or 陷波滤波器去除包含大部分噪声的频率(仅当所需信号和噪声频带不相交时才有效)
  • 像杜比降噪系统方案一样,降低单词、音符或其他音频事件之间的点的噪音水平(死space)
  • 使用 Hamming window 或其他 window 结合 FFT 库
  • 降低整个文件的本底噪声
  • 在 Cakewalk 等程序中手动编辑音轨的部分或其 竞争对手

当尝试清理一个或多个较大的文件或在实时应用程序(例如实时语音识别或电话)中时,发现这些方法不太理想。

其中一个Java程序我还没有亲自试过他的here。尽管它具有一定程度的自动化,但它是一个 LSE(最小二乘估计器),它适用于数据块,但不适合连续操作或具有不断变化的不需要的噪声条件的音频文件。 (它并不像人们希望的那样具有适应性。)

我查了很多资料,现在一直在用的解决办法没有写在Java里。它是一个 MATLAB 程序,也可以 运行 在开源 Octave 中进行最少的修改。我开始将它移植到 C++,但 运行 没时间完成它。

它实现的class算法称为MMSE(使用最小均方估计器进行降噪)。 MATLAB 版本已由 Hendricks 博士多次改进,最后 the 2010 version.

我已经将它与它的竞争对手在对话和音乐方面进行了比较,在我尝试过的所有情况下,它都等于或优于其他竞争对手。 (我与 Hendricks 博士或 MATLAB 没有任何关系,只是我喜欢他在该平台上的实施所获得的结果。)