[portaudio]传输和检测频率 - Windows

时间:2012-07-12 12:31:57

标签: c fft frequency portaudio

我是portaudio的新手,我看了“如何提取频率......”的问题,但我仍然希望得到一些帮助。 我需要传输一个频率(使用扬声器)然后我想检查这个频率是否被传输(在麦克风中捕获),当然我想使用portaudio进行发送和检测。 另外,我不知道如何使用fft进行检测,因为我看到了记录示例,并且他们使用了SAMPLE数据类型,并且使用这种数据类型,他们可以找到最大振幅,我可以用它来查找频率吗?

提前tnx。

1 个答案:

答案 0 :(得分:1)

在PortAudio中播放简单的音调为sample code

虽然没有根据特定数字计算出的音高,但很容易弄明白:

amplitude[n] = sin( n * desiredFreq * 2 * pi / samplerate )

在PortAudio示例代码中,您可能需要考虑使用查找表而不是为每次调用计算sin(),这两者都是为了提高性能(以及大数字的罪的准确性,这可能很好,但是我'我不确定)。

检测正在播放的频率是在SO上提出的一个问题。 Here是我最近给出的答案。

结果是,有很多方法取决于您的技能水平和背景噪音等问题。如果您只是检测到一个简单的sin wav并且不期望大量的噪声,那么在确保信号高于某个阈值之后,您可能只计算过零点。如果你确实期望噪音,你必须得到更好的。