sta*_*010 8 iphone audio android signal-processing fft
我正在探索语音识别和DSP,所以我想在我的智能手机上实现一个简单的声音频率分析仪(我有一部iPhone和三星Nexus S运行Android).我以前在Matlab中完成了基本的DSP.
根据我的理解,我需要执行FFT来获得信号的基频.
所以现在,我想以44100赫兹对麦克风进行采样.如果我使用样本大小为512且具有50%重叠的滑动窗口,则意味着我需要每256个样本进行一次FFT,或0.00580秒.
这个速度似乎非常高,特别是如果我使用Java编写Android版本.我的智能手机能够处理这个速度吗?我知道您可以在Android上使用C/C++进行编程,但我想暂时将它与Java保持一致.
执行实数到复数FFT需要~5/2 n lg n个浮点运算(加法和乘法).在你的情况下,n = 512,所以:
flops per fft ~= (5/2) * 512 * 9 = 11520
Run Code Online (Sandbox Code Playgroud)
因此,每秒172个fft每秒需要大约200万个浮点运算.这听起来很多,但实际上并不是那么多.典型的armv7级智能手机的硬件每秒能够进行数亿或数十亿次浮点运算.
但请注意,您需要精心编写的高性能FFT; 写得不好的FFT是众所周知的低效率.在iPhone上,您可以使用Accelerate框架(内置于操作系统中,并在SDK中提供),它提供了一组很好的FFT功能; 我不确定Android上有什么可用.
对于iPhone,iOS的Accelerate框架可以按照1%的CPU时间(精确百分比取决于设备型号和FFT数据类型)的顺序执行您指定的所有FFT.
对于Android,您可能非常希望考虑使用NDK本机库进行处理器密集型数值计算.
另请注意,FFT将为您提供峰值频率,不一定包括基频或语音音调频率.
增加:这个Java基准测试网页表明Android手机能够使用Java编写5到50多个MFlops,用于编写良好的矩阵数学.精心编写的FFT应该与MFlops的性能范围大致相同.@Stephan Cannon发布了您的规格可能需要2 MFlops的订单.
| 归档时间: |
|
| 查看次数: |
4443 次 |
| 最近记录: |