2013-05-21 3 views
0

No. 게시물 자체의 내가 그 시간 도메인에서 주파수 도메인으로 변환 녹음 된 오디오 (.wav) 파일에 FFT 알고리즘을 적용했습니다.Java - FFT를 사용하여 오디오 신호의 주파수 및 진폭 찾기

결과로 지금

magnitude[i] = sqrt(re*re+im*im); 

일부 값을 격납하는 배열을 가지고 표제 난이 크기 어레이를 이용하여 신호 (복소 음향 즉 음성)의 주파수 및 진폭을 찾는 밝혔지만로서 이 배열을 사용하여 추가 처리를 수행하는 방법을 모른다. FFT의 크기는 1024이고 샘플 속도는 48000Hz입니다. 추가 처리를 위해 도와주세요. 당신은 단지 하나의 큰 (정현파) 구성 요소를 찾고 있다면 당신은 최대 값을 찾을 때까지

답변

0

다음 크기의 배열을 통해 스캔 한 다음

mag_max = magnitude[0]; 
i_max = 0; 
for (i = 1; i < N; ++i) 
{ 
    if (magnitude[i] > mag_max) 
    { 
     mag_max = magnitude[i]; 
     i_max = i; 
    } 
} 
즉, 해당 주파수로이 값의 인덱스를 변환

이제 최대 값은 mag_max이고 인덱스는 i_max입니다. 당신은 주파수를 다음과 같이 얻을 수 있습니다 :

f_max = i_max * Fs/N; 
Fs 샘플 속도입니다

(그리고 N는 물론 FFT 크기입니다).

물론

당신이 복잡한 소리 (예를 들어, 음성 또는 악기)의 피치 같은 것을 찾고 있다면 그 일이 많은 더 복잡. 일반적으로 Harmonic Product Spectrum 알고리즘과 pitch detection algorithms을 살펴볼 수 있습니다.

+0

빠른 도움을 주셔서 감사합니다 폴, 그리고 네가 말했듯이 나는 주파수를 찾으려고 노력하고있다. 그리고 복잡한 소리의 진폭.이 크기 배열로 어떻게 처리해야합니까? – Panky90

+0

피치 * 감지를 원한다면 실제로 드로잉 보드로 돌아 가야합니다. FFT 기반의 방법으로도 가능하지만, 그다지 중요하지 않습니다 ("고조파 곱 스펙트럼"참조). 더 좋은 방법이 있습니다. [피치 감지에 대한 위키 피 디아 페이지] (https://en.wikipedia.org/wiki/Pitch_detection_algorithm)를 출발점으로 살펴보십시오. –

+0

좋아 폴, 그 위키 page.But을 통해 갈 거예요 내게 목적을 제공 할 수있는 이러한 알고리즘이나 자바 라이브러리 중 일부 자바 구현을합니까? – Panky90

관련 문제