在android上使用FFT进行实时音频去噪

时间:2013-05-13 11:31:00

标签: android performance signal-processing audio-recording noise-reduction

我正在考虑启动一个Android项目,它记录音频信号并进行一些处理去噪。我的问题是,由于许多(几乎所有)去噪算法都涉及FFT,我可以做一个实时程序吗?实时我的意思是程序同时进行录制和处理,所以当我完成录制时我可以节省时间。

我制作了一个示例项目,它对音频信号应用了傅里叶变换,并实现了一种称为子谱的简单算法。但我发现很难实时实现这个算法,这意味着在我按下“停止”按钮后,我需要一段时间来处理并保存文件(我也想知道这些商用记录器是怎么做的节目录制声音,同时保存它)。我知道我的FFT可能不是最快的,但我想知道我是否可以实现'实时',如果我完全优化它或使用最快的FFT代码?非常感谢!

1 个答案:

答案 0 :(得分:1)

听起来你在谈论broadband denoising。所以我会解决我的问题。还有其他类型的去噪,从简单过滤到自适应过滤到动态范围扩展,可能还有其他类型。

我认为任何人都不能用简单的是或否回答这个问题。你必须尝试一下,看看能做些什么。

首先,有各种各样的FFT实现,包括FFTW,你可以尝试不同的速度。有些比其他人快,但在一天结束时,他们都将提供可比较的结果。

这是本地C / C ++优于Java / Dalvik代码的地方,因为它可以真正利用矢量代码。为了实现这一点,您可能需要编写一些汇编程序,或者找到一些已经过android优化的代码。我不知道android优化的FFT,但我确定它存在。

真正的性能获胜将来自您构建整体去噪算法的方式。我熟悉的所有去噪都是处理器密集型的,并且可能无法在手机上实时工作,尽管它可能在平板电脑上。不过,这只是一个(受过教育的)猜测。