2010-04-05 3 views
2

FFT 사용과 관련하여 질문이 있습니다. 함수 getBand(int i)Minim과 함께 사용하면 특정 주파수의 진폭을 추출하고 그 주파수의 예쁜지도를 만들 수 있습니다. 훌륭하게 작동합니다.FFT를 사용하는 동일한 소스의 진폭 차이

그러나 이것은 호기심에 대한 질문입니다. 동일한 값을 사용하여 동일한 노래를 두 번 두 번 재생할 때 추출 된 값을 보면 (진폭이 동일해야 함)하지만 매우 다른 값을 얻습니다. 왜 그런가요?

0.0,0.0,0.0,0.0,0.0,0.08706585,0.23708777,0.83046436,0.74603105,0.30447206 
0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.08706585,0.4790409,0.9608221,0.83046436,0.74603105 

답변

3

입력이 두 경우 모두 정확히 같습니까? 노래의 무작위 세그먼트를 가져 오는 중이라면 FFT의 결과는 노래의 시작 지점에 따라 매우이됩니다.

+0

예 입력은 "mp3 파일입니다. 처음부터 재생을 시작하고 몇 초 후에 아무 것도 죽이지 않지만 그 때까지 FFT를 실행해서는 안됩니다. 이 다소 (내가 그것을 게시 할 수 있지만 지금 당장 액세스 할 필요가 없습니다) 동일한 코드입니다 : http://code.compartmental.net/minim/examples/FFT/ForwardFFT/ForwardFFT.pde – Anders

+0

매번 동일한 수의 샘플을 가져야하며 각 샘플 값은 두 실행에 대해 동일해야합니다. 매번 동일한 샘플에서 샘플링을 시작하지 않으면 FFT 출력이 달라집니다. 또한 매번 버퍼 전체를 처리해야합니다. 적절한 테스트 입력을 사용하여 FFT가 올바르게 작동하는지 테스트해야합니다. 사인파를 합성하고 올바른 출력을 얻는 지 확인하십시오. –

+0

투표를 통해 답변과 의견을 보내 주셔서 감사합니다. – Anders

2

mp3 디코딩은 색다른 것일 수 있으며 fft 루틴의 리드 인 버퍼링은 flakey 일 수 있습니다. (일련의 침묵 전의 다른 길이). 이 경우 리드 인은 2 번째 출력에서 ​​2 단계 더 커진 것처럼 보입니다.

그런 다음 fft가 수행되는 시간 간격이 fft 창 크기보다 긴 경우 도입의 차이로 인해 fft 창이 시리즈의 매우 다른 부분에 놓일 수 있습니다. 출력에서 매우 다른 값.

'시간 해상도'(주어진 시간당 수행되는 ffts의 양)를 늘리거나 fft 창 크기를 늘리면 fft 측정이 드문 경우 일 수 있습니다. 우리는 단계적으로 수행 된 스캔간에 패턴을 일치시킬 것으로 기대하기 전에 이상적으로 중복되어야합니다.

+0

답변을 주셔서 감사합니다. – Anders