2012-12-11 1 views
0

나는 소리 (기타 피치)의 주파수를 감지하기 위해 FFT 알고리즘을 사용했으며 컴퓨터에서 sinosoidal 사운드를 재생할 때 훌륭하게 작동하지만 완벽하게 평가할 것입니다. 기타를 사용할 때 완벽하지 않습니다. 피치 주파수를 더 정확하게 추정하는 방법은 무엇입니까? 더 정확한 FFT (이미) 결과를 기반으로 기타 피치 주파수를 추정하십시오.

double[] spectrum = FourierTransform.Spectrum(ref sampleBuffer);//spectrum contains data from FFT 
double frequency = indexOfMax(spectrum) * 16000/500; //sampling rate/FFT size 
//indexOfMax just finds the index of the maximum element in the array 

내가 사용의 사인 파도 생성하려면 : 단지 스펙트럼 배열에서 최대 값을 찾는 파도 이런 종류의 큰 일 http://www.audiocheck.net/audiofrequencysignalgenerator_sinetone.php와 요새를,하지만 난 더 나은 방법을 찾고 있어요.

+0

가 samplerate와 FFT 크기가 기타에서 나오는에서 동일 :

문제에 켑 스트 럼 접근에이 게시물에서보세요? –

+1

제 추측으로는 실제로 기타 피치와 주파수 피크가 아니라 음악 피치 주파수와 매우 다를 수 있습니다 (일부 n 배음 등이 될 수 있음) – hotpaw2

+0

@ hotpaw2 예, 기타 피치를 찾고 있습니다! :) – Yoda

답변

2

기타 사운드의 경우, 피치 검출/추정을위한 몇 가지 가능성에는 셉 스트 럼 분석을위한 셉 스트 럼을 계산하거나 고조파 곱 스펙트럼 분석을위한 FFT 결과를 사용하거나 IFFT (FFT (고속 푸리에 변환)) * conjugate (FFT())).

+0

그게 정말 도움이되는데, 나는 기타 피치를 찾고있다. 이 케프 트럼/기타 피치를 찾는 방법을 모색하거나 찾았습니까? 의사 코드 일 수도 있습니다. 공액 (FFT())이란 무엇입니까? 고맙습니다. – Yoda

관련 문제