프로젝트에 을 설정하려고하고 실제로 상황에 대한 명확한 그림을 얻지 못했습니다 ... 기본적으로 Audio Units
에서 데이터를 가져옵니다. 장치의 마이크. 그런 다음 해당 데이터에 FFT
을 보내고 자합니다. 이것은 내가 지금까지 이해하고있는 것입니다 : 나는 데이터를 위해 원형 버퍼를 셋업해야한다. 채워진 각 버퍼에서 Hann window
을 적용한 다음 FFT
을 수행합니다. 그러나, 나는 여전히 중첩에 대한 도움이 필요하다. 보다 정확한 결과를 얻으려면, 나는 windowing을 사용하고 있기 때문에 이것을 expecially 사용해야한다는 것을 이해합니다. 그러나, 나는이 아무것도 찾을 수 없습니다 ... 가 여기에 지금까지 (피치 검출에 사용) 한 내용은 다음과 같습니다Apple의 Accelerate 프레임 워크, FFT, Hann 윈도우 잉 및 겹치기 사용
// Setup -------------
UInt32 log2N = 10; // 1024 samples
UInt32 N = (1 << log2N);
FFTSetup FFTSettings = vDSP_create_fftsetup(log2N, kFFTRadix2);
COMPLEX_SPLIT FFTData;
FFTData.realp = (float *) malloc(sizeof(float) * N/2);
FFTData.imagp = (float *) malloc(sizeof(float) * N/2);
float * hannWindow = (float *) malloc(sizeof(float) * N);
// create an array of floats to represent a hann window
vDSP_hann_window(hannWindow, N, 0);
// FFT Time ----------
// Moving data from A to B via hann window
vDSP_vmul(A, 1, hannWindow, 1, B, 1, N);
// Converting data in B into split complex form
vDSP_ctoz((COMPLEX *) B, 2, &FFTData, 1, N/2);
// Doing the FFT
vDSP_fft_zrip(FFTSettings, &FFTData, 1, log2N, kFFTDirection_Forward);
// calculating square of magnitude for each value
vDSP_zvmags(&FFTData, 1, FFTData.realp, 1, N/2);
// Inverse FFT
vDSP_fft_zrip(FFTSettings, &FFTData, 1, log2N, kFFTDirection_Inverse);
// Storing the autocorrelation results in B
vDSP_ztoc(&FFTData, 1, (COMPLEX *)B, 2, N/2);
vDSP_Length lastZeroCrosssing;
vDSP_Length zeroCrossingCount;
vDSP_nzcros(B, 1, N, &lastZeroCrossing, &zeroCrossingCount, N);
// Cleanup -----------
vDSP_destroy_fftsetup(FFTSettings);
free(FFTOutput.realp);
free(FFTOutput.imagp);
free(hannWindow);
어디 내가 중복 방법을 포함 할 것이다? 또한 모든 코드 스 니펫이 환영받을 것입니다. 감사합니다
UPDATE :
이 프로젝트의 최종 목표는 그래서 가능한 한 정확한 결과를 필요로 가능한 한 실시간에 가까운 오디오의 지문을 수행하는 것입니다 - 따라서 중복을. 이 목적을 위해 실제로 모든 부분을 역으로 정리할 수 있다고 생각합니다.
질문에 대한 업데이트를 참조하십시오. 감사합니다 –
확인 - 겹치는 방법에 대한 내 대답의 마지막 부분을 참조하십시오. –
샘플 속도를 일반적인 44.1KHz 대신 약 16kHz로 낮추려고합니다. 이렇게하면 처리 대역폭을 크게 늘리지 않고도 더 큰 겹침을 추가 할 수 있습니다. 어쨌든 이것을 시도하고 어떻게되는지 알려줄 것입니다. –