在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进行实时音频降噪的主要内容,如果未能解决你的问题,请参考以下文章