gpt4 book ai didi

iphone - 确定 iPhone 上特定频率的大小

转载 作者:行者123 更新时间:2023-12-03 18:38:07 25 4
gpt4 key购买 nike

我想知道确定声音中给定频率的幅度的最简单/最好的方法是什么。

据我了解,FFT 函数将返回信号中所有频率的幅度。我想知道如果我只关心特定频率,是否可以使用任何快捷方式。

我将使用 iPhone 麦克风来录制音频。我的猜测是,我将使用音频队列服务进行录制,因为我不需要将音频录制到文件中。我使用的是 SDK 4.0,因此如果需要,我可以使用 Accelerate 框架中定义的任何函数(例如 FFT 函数)。

更新:我根据康拉德的建议更新了问题,使其更加清晰。

最佳答案

如果只需要测试一个频率,则只需计算 DFT 对应的点即可。 DFT 算法为 O(N^2),但 FFT 算法重用中间结果以实现 O(NlogN) 来进行 DFT 计算。但是,如果您只需要一个频率样本,则只需计算 DFT 的一个输出样本即可实现 O(N) 性能。

这可以通过查看 wikipedia page 上的 DFT 方程(我什至不打算尝试在此处键入它)并仅计算与感兴趣的频率相对应的单个 k 的 Xk 来完成。 k 只是 DFT 输出的索引。

将 k(DFT 输出的索引)映射到实际频率 (Hz) 取决于两件事:

  • 采样频率(例如,CD 音频为 44100 Hz)
  • FFT 大小

真实频率映射到 k 如下:

F = k*Fs/N  for k = 0 ... N/2-1 ((N-1)/2 for odd N)

k = F*N/Fs  for F = 0Hz ... Fs/2-Fs/N

其中,F 是以 Hz 为单位的频率,N 是 FFT 大小,Fs 是采样频率 (Hz)。需要注意的一些事项:

    k 是一个整数,因此并非所有频率都会映射到整数 k。找到最接近的 k
  • 如果您需要更高的频率分辨率,请增加 N。
  • 以 Fs 采样的信号只能准确表示高达 Fs/2 ( Nyquist rate ) 的频率,但不包括 Fs/2 ( ojit_a )。这就是为什么我表明从 k 到 Hz 的映射仅适用于一半的输出样本。我不会讨论后半部分代表什么(它实际上是真实输入信号的前半部分的镜像)
  • DFT/FFT 的输出很复杂。您很可能想要了解其严重程度。
  • 如果您需要计算甚至几个 DFT 输出,最好仅使用可用的 FFT 函数并获取所有输出样本,而不是使用 DFT 只计算所需的输出样本。原因是大多数 FFT 算法都经过了大量优化,因此即使理论上您可能做的工作较少,但它可能比 FFT 花费更长的时间。您可能只需要对此进行基准测试,看看哪种方法更好。

为了简单起见,我省略了很多其他细节,这些细节对您的应用程序来说并不重要

关于iphone - 确定 iPhone 上特定频率的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2921674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com