从接收的音频麦克风输入确定频率

时间:2011-03-18 02:59:41

标签: iphone audio signal-processing

对于通过互联网搜索,我有足够的代码来录制麦克风输入。使用来自苹果示例代码的示例代码。我想要的是,我想在我的应用程序中显示频率(UILabel)。我有一个ipod touch第3代,我使用耳机麦克风录制音频。无论我通过麦克风接收输入,我想在UILabel中显示其频率范围(hz)。我还下载了代码aurio touch,但都提供了一些找到频率的提示。没有人给出任何示例代码来确定使用fft在auriotouch中的频率。我是iphone app开发的新手。这是我的第一个任务,所以我想做的很好那么PLZ指导我一个正确的方法来做这个。我也不知道数字信号处理。(我有一个双手,是否只能用正弦波的绘制区域确定频率或我们自己计算)。 / p>

对于长冲浪我还有一个样本名称SCListener,github中有源代码。当我下载并运行代码时,它显示了标签中显示的averagePower,peakPower和频率值。这是在我的代码中使用的正确示例?而且我也不知道输出应该是hz还是khz。

如何检查标签上显示的录制频率应该是否正确?

Plz PLZ帮帮我........ 提前谢谢。抱歉我的英语不好。

2 个答案:

答案 0 :(得分:2)

您需要使用傅立叶变换。我所知道的最好的库是FFTW。

请记住,你不会得到一个频率;你可以将所有这些混合到sample_rate / 2。你需要一些算法来选择正确的尖峰。

你可能想退后一步,阅读有关奈奎斯特理论和信号处理(特别是FFT)的信息,然后再进一步研究,否则你会犯很多错误。

答案 1 :(得分:2)

检查频率标签是否显示正确值的一种方法是使用某种校准信号发生器进行测试。

您可能能够找到可以以已知频率播放正弦波的Mac或PC音频合成/生成器程序。试一试,然后使用iPod Touch或iOS模拟器检查应用程序显示的结果。 (使用音乐声音进行测试,它可能产生一组与识别出的音高非常不同的频率。)

如果您有FFT工作的音频输入,并且正在测量比任何其他频谱内容更响亮的正弦波频率,您可以尝试确定具有最大幅度的FFT bin(结果索引)。对频率的非常近似的估计将是:

frequency_estimate = bin_number * sample_rate / fft_length_in_samples;

估计误差将与(sample_rate / fft_length_in_samples)成比例。