2014-09-04 5 views
1

У меня есть 16-битные монофонические данные в необработанном формате, сэмплированные на частоте 48 кГц. Я использую библиотеку Aquila C++, чтобы получить ее спектр, так как мне нужно выполнить EQ. Вот фрагмент кода:определение частот в спектре после FFT

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). Я хочу изменить «величину», например. 2 кГц и установить величину всех частот за пределами, например. От 10 кГц до 0 (фильтр нижних частот).

Моя единственная проблема заключается в том, что я не знаю частотный диапазон спектра, генерируемого Aquila. Я имею в виду, я лично знаю, что частота дискретизации аудио составляла 48 кГц, но Aquila FFT не сообщается об этом значении, ему даже не нужно выполнять БПФ. Как я могу определить, к какой частоте используется каждая запись массива? Например. Спектр [0] = 1 Гц, спектр [10] = 126 Гц, спектр [511] = 22,13 кГц и т. д.

+0

http://stackoverflow.com/questions/4364823/how-to-get-frequency-from-fft-result – NPE

+0

Кроме http://dsp.stackexchange.com/questions/2818/extracting-frequencies-from-fft – NPE

+0

См. http://stackoverflow.com/a/4371627/253056 –

ответ

0

Как видно из комментариев, БПФ не нужно явно указывать используемую частоту дискретизации для выборки аудиосигнала. Еще одна вещь, на которую нужно обратить внимание, состоит в том, что только половина бункеров содержит соответствующую информацию. Частота n'th бункера в случае 512-ступенчатой ​​БПФ:

freq = (n * sample_rate)/512 
Смежные вопросы