我想知道确定声音中给定频率大小的最简单/最好的方法是什么.
据我所知,FFT函数将返回信号中所有频率的大小.我想知道如果我只关心特定频率,是否有任何捷径可以使用.
我将使用iPhone麦克风录制音频.我的猜测是我将使用音频队列服务进行录制,因为我不需要将音频录制到文件中.我正在使用SDK 4.0,因此如果需要,我可以使用Accelerate框架中定义的任何函数(例如FFT函数).
更新: 根据康拉德的建议,我更新了问题更清楚.
Jas*_*n B 14
如果您只需要测试一个频率,则只需计算DFT的对应点即可.DFT算法是O(N ^ 2),但FFT算法重用中间结果以实现用于DFT计算的O(NlogN).但是,如果只需要一个频率样本,则只需计算DFT的一个输出样本并获得O(N)性能.
这可以通过在维基百科页面上查看DFT的等式来完成(我甚至不打算尝试在此处键入)并且仅计算对应于感兴趣频率的单个k的Xk.k只是DFT输出的索引.
将k(DFT输出的索引)映射到实际频率(Hz)取决于两件事:
实际频率映射到k如下:
F = k*Fs/N for k = 0 ... N/2-1 ((N-1)/2 for odd N)
Run Code Online (Sandbox Code Playgroud)
要么
k = F*N/Fs for F = 0Hz ... Fs/2-Fs/N
Run Code Online (Sandbox Code Playgroud)
其中F以Hz为单位的频率N是FFT大小,Fs是采样频率(Hz).有些事情需要注意:
为简单起见,我遗漏了其他一些细节,这对您的应用程序无关紧要
| 归档时间: |
|
| 查看次数: |
7556 次 |
| 最近记录: |