0

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

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

4

1 回答 1

1

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

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

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

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

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

于 2013-05-13T13:43:31.747 回答