我正在探索语音识别和 DSP,因此我想在我的智能手机上实现一个简单的声音频率分析器(我有一部 iPhone 和一部运行 Android 的三星 Nexus S)。我以前在 Matlab 中做过基本的 DSP。
据我了解,我需要执行 FFT 以获得信号的基频。
现在,我想以 44100 Hz 的频率对麦克风进行采样。如果我使用样本大小为 512 且有 50% 重叠的滑动窗口,这意味着我需要每 256 个样本或 0.00580 秒执行一次 FFT。
这个比率似乎真的很高,特别是如果我用 Java 为 Android 编程的话。我的智能手机能处理这样的速度吗?我知道您可以在 Android 上使用 C/C++ 进行编程,但我想暂时使用 Java。
最佳答案
执行实数到复数的 FFT 需要 ~5/2 n lg n 浮点运算(加法和乘法)。在你的例子中,n=512,所以:
flops per fft ~= (5/2) * 512 * 9 = 11520
因此每秒 172 个 fts 需要大约每秒 200 万次浮点运算。这听起来很多,但实际上并没有那么多。典型的 armv7 级智能手机的硬件每秒能够进行数亿或数十亿次浮点运算。
但是请注意,您需要精心编写的高性能 FFT;写得不好的 FFT 是出了名的低效。在 iPhone 上,您可以使用 Accelerate 框架(内置于操作系统中,可在 SDK 中使用),它提供了一组不错的 FFT 函数;我不确定 Android 上有哪些功能。
关于android - 我可以在智能手机上每秒执行多少次 FFT? (用于执行语音识别),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7957907/