我正在考虑启动一个Android项目,它记录音频信号并进行一些处理去噪。我的问题是,由于许多(几乎所有)去噪算法都涉及FFT,我可以做一个实时程序吗?实时我的意思是程序同时进行录制和处理,所以当我完成录制时我可以节省时间。
我制作了一个示例项目,它对音频信号应用了傅里叶变换,并实现了一种称为子谱的简单算法。但我发现很难实时实现这个算法,这意味着在我按下“停止”按钮后,我需要一段时间来处理并保存文件(我也想知道这些商用记录器是怎么做的节目录制声音,同时保存它)。我知道我的FFT可能不是最快的,但我想知道我是否可以实现'实时',如果我完全优化它或使用最快的FFT代码?非常感谢!
答案 0 :(得分:1)
听起来你在谈论broadband denoising。所以我会解决我的问题。还有其他类型的去噪,从简单过滤到自适应过滤到动态范围扩展,可能还有其他类型。
我认为任何人都不能用简单的是或否回答这个问题。你必须尝试一下,看看能做些什么。
首先,有各种各样的FFT实现,包括FFTW,你可以尝试不同的速度。有些比其他人快,但在一天结束时,他们都将提供可比较的结果。
这是本地C / C ++优于Java / Dalvik代码的地方,因为它可以真正利用矢量代码。为了实现这一点,您可能需要编写一些汇编程序,或者找到一些已经过android优化的代码。我不知道android优化的FFT,但我确定它存在。
真正的性能获胜将来自您构建整体去噪算法的方式。我熟悉的所有去噪都是处理器密集型的,并且可能无法在手机上实时工作,尽管它可能在平板电脑上。不过,这只是一个(受过教育的)猜测。