2013-03-20 3 views
1
  1. Apple 설명서에서 FFT 샘플 코드를 사용하는 동안 실제로 N, log2n, n 및 nOver2는 무엇을 의미합니까?
  2. N은 주어진 오디오의 fft 또는 샘플 수의 창 크기를 참조합니까?
  3. 오디오 파일에서 N을 어떻게 계산합니까?
  4. 오디오 샘플링 속도, 즉 44.1kHz와 어떻게 관련이 있습니까?
  5. 이 코드에서 FFT 프레임 크기는 어떻게됩니까?

코드 :실제로 FFT 크기의 의미

/* Set the size of FFT. */ 
log2n = N; 
n = 1 << log2n; 

stride = 1; 
nOver2 = n/2; 

printf("1D real FFT of length log2 (%d) = %d\n\n", n, log2n); 

/* Allocate memory for the input operands and check its availability, 
* use the vector version to get 16-byte alignment. */ 
A.realp = (float *) malloc(nOver2 * sizeof(float)); 
A.imagp = (float *) malloc(nOver2 * sizeof(float)); 
originalReal = (float *) malloc(n * sizeof(float)); 
obtainedReal = (float *) malloc(n * sizeof(float)); 

답변

4
  1. N 또는 n은 일반적으로 요소 수를 나타냅니다. log2n은 n의 밑이 두 대수입니다. (32의 밑이 두 대수는 5입니다.) nOver2는 n/2이고, n은 2로 나눕니다.
  2. FFT와 관련하여, n은 FFT로 공급되는 샘플의 수입니다.
  3. n은 일반적으로 다양한 제약 조건에 의해 결정됩니다. 더 많은 샘플이 더 나은 품질의 결과를 제공하기를 원하지만 많은 샘플을 처리하는 데 많은 컴퓨터 시간이 걸리거나 결과가 너무 늦어서 사용자가 지연에이를 때까지 사용할 수 없다는 것을 원하지는 않습니다. 일반적으로 크기를 결정하는 것은 오디오 파일의 길이가 아닙니다. 오히려 처리를 위해 사용할 "창"을 디자인 한 다음 오디오 파일의 샘플을 창을 저장할 정도로 큰 버퍼로 읽은 다음 버퍼를 처리 한 다음 파일에서 더 많은 샘플을 반복합니다. 반복은 전체 파일이 처리 될 때까지 계속됩니다.
  4. 오디오 샘플링 속도가 높으면 주어진 시간 내에 더 많은 샘플이 있다는 것을 의미합니다. 예를 들어, 창을 1/30 미만으로 유지하려면 초, 44.1kHz 샘플링 속도는 44.1 • 1000/30 = 1470 샘플보다 작습니다. 샘플링 속도가 높다는 것은 더 많은 작업이 필요하다는 것을 의미하므로 처리를 제한 범위 내에서 유지하려면 창 크기를 조정해야 할 수도 있습니다.
  5. 해당 코드는 log2nN을 사용합니다. 이는 사람들을 혼란스럽게 할 수 있기 때문에 불행합니다. 그렇지 않은 경우 코드는 위에서 설명한대로이며 FFT 프레임 크기는 n입니다.

실제 데이터와 복잡한 데이터가 혼합 된 경우 FFT 크기 나 길이에 약간의 혼란이있을 수 있습니다. 일반적으로 실수 - 복소수 FFT의 경우 실제 요소의 수는 길이라고합니다. complex-to-complex FFT를 수행 할 때 복잡한 요소의 수는 길이입니다.

2

'N'은 샘플의 수, 즉, 귀하의 벡터 크기입니다. 따라서 'log2N'은 밑이 2 인 'N'의 로그이고 'nOver2'는 'N'의 절반입니다.

다른 질문에 답하려면 FFT로 무엇을하고 싶은지 알아야합니다. This document은 특정 시스템을 염두에두고 작성되었지만 (D) FFT에서 매개 변수의 관계와 의미에 대한 설문 조사의 역할을 할 수 있습니다.

+0

문제의 코드가'log2n = N'을 포함하고 있다고 가정하면'log2N'은'N'의 로그입니다. –

+0

@EricPostpischil : 다음 줄을보십시오. N에 의한 시프트는 2의 거듭 제곱에 해당합니다. 즉, N은 n의 이중 로그입니다. – Matthias

+0

대답의 텍스트에 " 'N'은 샘플의 수입니다." 문제의 코드에서 'n'은 샘플 수이지만 'N'은 아니며 'log2N'은 'N'의 로그가 아니며 'Nover'의 절반도 아닙니다.나는 다른 코드의 일반적인 사용법은 'N'이 샘플의 수라는 것을 이해하지만, 단순히 질문의 코드에 해당하지 않는다. 즉,이 대답에는 잘못된 문장이 포함되어있다. –