我是信号处理的新手,请稍等一下。我已经为Windows下载并安装了FFTW。该文档还可以,但是我仍然有疑问。
我的总体目标是从计算机上的声卡中捕获以44100 amps / sec采样的原始音频数据(此任务已经使用库和我的代码实现了),然后对这些音频数据的块执行DFT。
我只想在音频中找到一定范围的频率分量,而不会执行任何逆DFT。在这种情况下,是否需要进行从真实到真实的转换,因此fftw_plan_r2r_1d()
函数?
我要转换的数据块的长度为11025个样本。我的函数如下所示。这将导致11025个bin的频谱阵列。我如何知道结果中的最大频率分量?
我相信bin间隔是Fs / n,44100/11025,所以4。这是否意味着我将在阵列中拥有一个频谱,从0 Hz一直到44100Hz,以4为步长,或者直到一半。奈奎斯特频率22200?
这对我来说是个问题,因为我只想搜索60Hz至3000Hz的频率。有什么方法可以限制变换范围吗?
我没有看到该函数的任何参数,或者也许还有另一种方法?
在此先感谢您的帮助。
p = fftw_plan_r2r_1d(11025, audioData, spectrum, FFTW_REDFT00, FFTW_ESTIMATE);
最佳答案
要回答上述一些个人问题:
magnitude = sqrt(re*re + im*im)
)上计算复杂输出仓的大小Fs / N = 44100 / 11025 = 4 Hz
,即每个输出仓的宽度为4 Hz 0
到Fs / 2
的频率补充说明:
fftw_execute
)fftwf_execute
而不是fftw_execute
,并且类似地用于计划创建等)有关StackOverflow的一些有用的相关问题/解答:
您可能还想阅读更多类似的问题和答案-搜索fft和fftw标签。
另请注意,dsp.stackexchange.com是针对DSP理论而非实际特定编程问题的站点的首选站点。