android - 我可以在智能手机上每秒执行多少次 FFT? (用于执行语音识别)

标签 android iphone audio signal-processing fft

我正在探索语音识别和 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/

相关文章:

iphone - img_data_lock iPhone - imageNamed 与 imageWithContentsofFile

iphone - 是否可以通过编程方式捕获 iPhone 5S 慢动作视频?

android - 如何降低 PCM 数据的播放速度?

循环播放声音时 Android MediaPlayer 警告

android - cordova相机插件allowEdit属性在少数手机上不起作用

Java套接字读取输入流而不阻塞

iphone - 如何在 MPMoviePlayer 播放期间启用 iPhone 自动锁定?

android - 我如何确定 Android 需要多大的图像(以像素为单位)才能在设备上正确显示该图像?

android - 创建新 Intent 时出错

flash - 基于Web的音频/视频聊天API提供程序(无webrtc)