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

Posted

技术标签:

【中文标题】在android上使用FFT进行实时音频降噪【英文标题】:Real-time audio denoise using FFT on android 【发布时间】:2013-05-13 11:30:59 【问题描述】:

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

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

【问题讨论】:

FFT 代表“快速傅里叶变换”,因此根据定义,它应该是您更快的选择之一。使其更快的一种方法是减小 FFT 的大小,但这也会降低质量。 【参考方案1】:

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

我认为没有人可以用简单的是或否来回答这个问题。你必须尝试一下,看看能做什么。

首先,您可以尝试各种不同速度的 FFT 实现,包括 FFTW。有些比其他的更快,但最终它们都会产生可比的结果。

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

真正的性能优势将取决于您如何构建整体去噪算法。我熟悉的所有去噪都是处理器密集型的,可能无法在手机上实时运行,尽管它可能在平板电脑上运行。不过,这只是一个(有根据的)猜测。

【讨论】:

以上是关于在android上使用FFT进行实时音频降噪的主要内容,如果未能解决你的问题,请参考以下文章

将实时音频与 Android 中录制的音频进行比较

如何给音频降噪

iPhone AudioStreamer AudioQueue 实时 FFT

如何实时获取特定频率音频信号的幅度android

如何延迟音频播放以与 FFT 同步

流式音频中的降噪和压缩