2011-11-03 4 views
0

iPhone 용 프로그램을 개발 중입니다.동일하지 않은 사운드 파일 비교

나는 이것을 article으로 읽었으며 몇 가지 질문이 있습니다. 사운드 파일의 진폭을 얻은 후 스펙트럼 범위를 FFT (고속 푸리에 변환)로 변환해야합니까? 기사에서 남자는 "40-80, 80-120, 120-180, 180-300"이라고 말하면서 어떻게 범위를 알 수 있습니까? 내가 FFT (OouraFFT 사용)를 얻은 후에 나는 주파수 스펙트럼을 가지고있다. 그리고 나서 나는 제어 포인트를 취해야한다는 것을 이해 했으므로 어떻게 가져갈 것인가?

몇 가지 질문이 더 있습니다. 그러나 그 질문을 도와주세요.

답변

1

사람이 "40-80, 80-120, 120-180, 180-300"이라고 말하면 어떻게 범위를 알 수 있습니까?

그는 그들을 알지 못했습니다.

이러한 범위는 빈도가 매우 낮습니다. 저주파수 사운드는 가장 긴 서스테인/디케이를 갖는 경향이 있으므로 더 낮은 주파수를 사용하면 시간 별 앨리어싱 문제가 발생할 가능성이 적습니다. 이것은 구현하고자하는 애플리케이션에서 중요합니다. 소리는 시간이 지남에 따라 다양하며 입력 샘플은 노래/사운드의 특정 오프셋에있을 수 있으며 대부분 윈도우 오프셋과 정확히 일치하지 않을 수 있습니다. 사운드의 낮은 주파수 부분은 여전히 ​​고주파 부분보다 훨씬 영향을받습니다.

내가 FFT (OouraFFT 사용)를 얻은 후에 나는 주파수 스펙트럼을 가졌으며, 제어 포인트를 취해야한다는 것을 이해 했으므로 어떻게 가져 가야합니까?

OouraFFT은 Objective-C가 아니라 C로 작성됩니다. 사용중인 래퍼에 연결할 수 있습니까?

this wrapper을 사용하는 경우 이전에 저역 통과 필터를 거쳐야하는 것처럼 보입니다. 그리고 라이브러리의 결과를 수정/추가 처리하여 정확하게 시도하는 것처럼 처리 할 수 ​​있습니다. 달성하기 위해. 또는 FFT 위에 더 높은 수준의 개념을 포함하는 다른 iPhone FFT 라이브러리를 찾아보십시오.

그 라이브러리는 OuraFFT rdst을 호출하며, 모든 버킷이 균등하게 분산되도록합니다 (거의 상위 수준의 개념이없는 원시 FFT 데이터). 더 작은 버킷으로 가서 집계하지 않는 한 읽은 기사에 설명 된 특정 버킷을 얻지 못할 것입니다.

다른 균등 간격의 버킷 선택을 사용하고 40-80, 80-120, 120-160, 160-200, 200-240, 240-280, 280-320과 같은 것으로 끝낼 수 있습니다. 또는 40-60, 60-80 등을 사용하고 완료되면/평균 버킷을 결합 할 수 있습니다.

원하는 버킷 크기를 얻으려면 몇 가지 계산을해야합니다. 해당 도서관의 추가 정보 :

신호의 샘플링 속도는 48,000Hz이고 신호의 청크에서 1024 샘플 길이로 계산한다고 가정 해보십시오. 그런 다음 OouraFFT.spectrumData는 0에서 48,000/2 = 24,000 사이의 고른 간격으로 1024/2 = 512 개의 주파수를 포함합니다.

창이 길면 길수록 버킷 수가 많지만 일시적인 문제가 발생할 확률이 높습니다.따라서 창 크기를 선택한 다음 입력 데이터를 저역 통과 필터링하고 샘플 속도를 줄이면서 필요에 맞는 버킷 크기 (주파수 범위)를 얻고 필터링 된 데이터를 실행하십시오.

실제로, 해당 구현에 대해서는 확실하지 않지만 I read here that you have to throw out the lowest frequency bucket when using FFT입니다. 이 기사에는 비슷한 고지가 있습니다. the lowest bucket has only half the width.

이 프로젝트에서 정확한 결과를 얻으려면 해당 빈도 및 창 간격으로 테스트 데이터를 생성하여 배열 데이터가 올바르게 채워지고 데이터가 유효하지 않은지 확인할 수있는 것이 좋습니다. 실수로 비뚤어지기 시작합니다 (하나씩 벗어나는 오류, 잘못된 창 및 필터 계산 등). 그렇지 않으면 귀하의 코드에있는 문제가있는 곳을 진단 할 수 없으므로 귀하의 성공은 순탄 한 행운을 빌려서 이루어집니다.

관련 문제