我正在探索语音识别和 DSP,因此我想在我的智能手机上实现一个简单的声音频率分析仪(我有一部 iPhone 和一部运行 Android 的三星 Nexus S)。我以前在Matlab中做过基本的DSP。
根据我的理解,我需要执行 FFT 来获取信号的基频。
现在,我想以 44100 Hz 的频率对麦克风进行采样。如果我使用样本大小为 512、重叠率为 50% 的滑动窗口,这意味着我需要每 256 个样本或 0.00580 秒进行一次 FFT。
这个比例看起来确实很高,特别是如果我使用 Android 的 Java 进行编程。我的智能手机能够处理这个速度吗?我知道你可以在 Android 上使用 C/C++ 进行编程,但我想暂时保留 Java。
执行实数到复数 FFT 需要 ~5/2 n lg n 浮点运算(加法和乘法)。在你的例子中,n=512,所以:
flops per fft ~= (5/2) * 512 * 9 = 11520
因此每秒 172 fft 需要每秒大约 200 万次浮点运算。听起来很多,但实际上并没有那么多。典型的armv7级智能手机的硬件每秒能够进行数亿或数十亿次浮点运算。
但请注意,您将需要一个精心编写的高性能 FFT;写得不好的 FFT 是出了名的低效。在 iPhone 上,您可以使用 Accelerate 框架(直接内置于操作系统中,并在 SDK 中提供),它提供了一组很好的 FFT 函数;我不确定 Android 上有什么可用的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)