在FFT之后定位频谱中的频率

时间:2014-09-04 06:22:12

标签: c++ c audio fft spectrum

我有原始格式的16位单声道音频数据,以48 KHz采样。我正在使用Aquila C ++库来获取它的频谱,因为我需要在它上面执行EQ。这是一段代码:

Aquila::SampleType samples[512];
Aquila::SpectrumType spect;
std::shared_ptr<Aquila::Fft> fft;

('samples' is filled with audio)
fft = Aquila::FftFactory::getFft(512);
spect = fft->fft(samples);

因此音频数据被分成512个样本,每个片段被转换为频域(FFT)。我想改变例如“大小”。 2KHz并设置所有频率的大小,例如10 KHz至0(低通滤波器)。

我唯一的问题是我不知道Aquila产生的频谱的频率范围。我的意思是,我个人知道音频的采样率是48 KHz,但Aquila FFT没有被告知这个值,它甚至不需要它来执行FFT。如何确定每个数组条目的确切频率?例如。 spect [0] = 1 Hz,spect [10] = 126 Hz,spect [511] = 22.13 KHz等。

1 个答案:

答案 0 :(得分:0)

从评论中可以看出,FFT不必明确告知用于采样音频信号的采样频率。另外需要注意的是,只有一半的箱子有相关信息。在512步FFT的情况下,第n个bin的频率是:

freq = (n * sample_rate) / 512