在java中删除音频噪音

时间:2017-02-18 10:48:04

标签: java audio-processing noise-reduction

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

输入是一种音频信号,包括声音和一些背景噪音。噪音随着录音过程而变化。肯定存在消除这种噪声的方法,这些噪声是为语音识别和电影制作而开发的。

所需的输出是最小程度失真的语音信号,其背景干扰最低限度地可听到人耳。定量标准最小化

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

1 个答案:

答案 0 :(得分:3)

您正在寻找自适应噪声消除,并且可能会在同一个流或文件中随着时间的推移适应不断变化的噪声条件。

旧方法包括:

  • 使用带通和/或陷波滤波器消除包含大部分噪声的频率(只有在所需信号与噪声频带不相交时才能正常工作)
  • 将声音,音符或其他音频事件(死区)中的噪音水平降低,与杜比降噪系统方案一样
  • 使用汉明窗口或其他窗口与FFT库一起降低整个文件的本底噪声
  • 在Cakewalk或其中的程序中手动编辑音轨的各个部分 竞争对手

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

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

我经过大量调查后发现并且现在一直使用的解决方案不是用Java编写的。它是一个MATLAB程序,也可以在开源Octave中运行,只需要很少的修改。我开始将它移植到C ++,但没时间完成它。

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

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