2014-09-04 2 views
1

16 비트 모노 오디오 데이터를 원시 형식으로, 48 KHz로 샘플링했습니다. Aquila C++ 라이브러리를 사용하여 스펙트럼을 얻었습니다. 이후 EQ를 수행해야합니다. 여기 코드이다 : 그래서 오디오 데이터가 512 개 샘플로 분할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); 

, 각 부분은 주파수 도메인 (FFT)로 변환된다. 나는 "크기"를 바꾸고 싶다. 2KHz를 초과하는 모든 주파수의 크기를 설정하는 것이 바람직하다. 10 KHz ~ 0 (저역 통과 필터).

내 유일한 문제는 내가 Aquila에 의해 생성 된 스펙트럼의 주파수 범위를 모른다는 것입니다. 나는 개인적으로 오디오의 샘플링 속도가 48 KHz라는 것을 알고 있지만 Aquila FFT는이 값을 말하지 않으며 FFT를 수행 할 필요도 없습니다. 각 배열 항목이 매핑되는 주파수를 정확하게 결정하려면 어떻게합니까? 예 : 스펙트럼 [0] = 1 Hz, 스펙 트 [10] = 126 Hz, 스펙 [511] = 22.13 KHz 등

+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

설명에서 알 수 있듯이 FFT는 명시 적으로 사용 된 샘플링 주파수 오디오 신호를 샘플링하기위한 것이다. 지켜야 할 또 하나의 방법은 해당 쓰레기통의 절반만이 관련 정보를 보유하고 있다는 것입니다. 512 단계 FFT의 경우에는 n 번째 빈의 주파수이다 : 또한

freq = (n * sample_rate)/512 
관련 문제