确定 iPhone 上特定频率的大小
我想知道确定声音中给定频率的幅度的最简单/最好的方法是什么。
据我了解,FFT 函数将返回信号中所有频率的幅度。我想知道如果我只关心特定频率是否可以使用任何快捷方式。
我将使用 iPhone 麦克风来录制音频。我的猜测是,我将使用音频队列服务进行录制,因为我不需要将音频录制到文件中。我使用的是 SDK 4.0,因此如果需要,我可以使用 Accelerate 框架中定义的任何函数(例如 FFT 函数)。
更新: 我根据康拉德的建议更新了问题以使其更加清晰。
I'm wondering what's the easiest/best way to determine the magnitude of a given frequency in a sound.
It's my understanding that a FFT function will return the magnitudes of all frequencies in a signal. I'm wondering if there is any shortcut I could use if I'm only concerned about a specific frequency.
I'll be using the iPhone mic to record the audio. My guess is that I'll be using the Audio Queue Services for recording since I don't need to record the audio to a file. I'm using SDK 4.0, so I can use any of the functions defined in the Accelerate framework (e.g. FFT functions) if needed.
Update:
I updated the question to be more clear as per Conrad's suggestion.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果只需要测试一个频率,则只需计算DFT的对应点即可。 DFT 算法的复杂度为 O(N^2),但 FFT 算法重用中间结果,以实现 DFT 计算的 O(NlogN)。但是,如果您只需要一个频率样本,则只需计算 DFT 的一个输出样本即可实现 O(N) 性能。
这可以通过查看 wikipedia 页面 上的 DFT 方程来完成(我不是甚至尝试在此处输入)并计算与感兴趣的频率相对应的单个 k 的 Xk 。 k 只是 DFT 输出的索引。
将 k(DFT 输出的索引)映射到实际频率 (Hz) 取决于两件事:
实际频率映射到 k,如下所示:
或
其中
F< /code> 是以 Hz 为单位的频率,
N
是 FFT 大小,Fs
是采样频率 (Hz)。需要注意的一些事情:为了简单起见,我省略了很多其他细节,这些细节对您的应用程序来说并不重要
If you only need to test for one frequency, you can just calculate the corresponding point of the DFT. The DFT algorithm is O(N^2), but the FFT algorithm reuses intermediate results to achieve O(NlogN) for computation of the DFT. However, if you want only one frequency sample, you can just calculate one output sample of the DFT and achieve O(N) performance.
This can be done by looking at the equation for the DFT on the wikipedia page (I'm not even going to try to type it here) and just calculate Xk for a single k corresponding to the frequency of interest. k is just the indexing on the output of the DFT.
Mapping k (indexes of the DFT output) into real frequencies (Hz) depends on two things:
Real frequencies are mapped to k as follows:
or
where
F
is the frequency in Hz,N
is the FFT size, andFs
is the sampling frequency (Hz). Some things to note:I've left out quite a few other details for simplicity's sake that shouldn't matter for your application