2013-03-20 2 views
1
  1. При использовании кода примера FFT из документации Apple, что на самом деле означает N, log2n, n и nOver2?
  2. N относится к размеру окна fft или всего количества выборок в данном аудио, и
  3. как рассчитать N из аудиофайла?
  4. Как они связаны с частотой дискретизации аудио, то есть 44,1 кГц?
  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 является логарифмом base-two из n. (Логарифм базы два равен 32). NOver2 равно n/2, n делится на два.
  2. В контексте БПФ n представляет собой число выборок, подаваемых в БПФ.
  3. n обычно определяется множеством ограничений. Вы хотите, чтобы больше образцов обеспечивало более качественный результат, но вы не хотите, чтобы столько образцов обрабатывали много времени на компьютер или что результат недоступен до тех пор, пока пользователь не заметит задержку. Обычно размер аудиофайла зависит не от длины. Скорее вы создаете «окно», которое вы будете использовать для обработки, тогда вы читаете образцы из аудиофайла в буфер, достаточно большой, чтобы удерживать свое окно, а затем обрабатываете буфер, а затем повторяете с большим количеством образцов из файла. Повторения продолжаются до тех пор, пока весь файл не будет обработан.
  4. Более высокая частота дискретизации звука означает, что в течение определенного периода времени будет больше выборок. Например, если вы хотите сохранить свое окно под 1/30 th секунды, то частота дискретизации 44,1 кГц будет иметь менее 44,1 • 1000/30 = 1470 выборок. Более высокая частота выборки означает, что у вас есть больше работы, поэтому вам может потребоваться настроить размер окна, чтобы поддерживать обработку в пределах.
  5. Этот код использует N для log2n, что очень к сожалению, так как это может смутить людей. В противном случае код описан выше, а размер кадра FFT равен n.

При использовании комбинации реальных данных и сложных данных может возникнуть некоторая путаница в отношении размера или длины БПФ. Как правило, для реального-сложного БПФ количество вещественных элементов называется длиной. При выполнении комплексно-сложного БПФ количество сложных элементов - это длина.

2

'N' это число выборок, то есть ваш вектор размера. Соответственно, «log2N» является логарифмом «N» с базой 2, а «nOver2» является половиной «N».

Чтобы ответить на другие вопросы, нужно знать, что вы хотите делать с FFT. This document, даже если он написан с учетом конкретной системы, может служить обзором о соотношении и значении параметров в (D) БПФ.

+0

Учитывая, что рассматриваемый код содержит 'log2n = N', в этом случае' log2N' не является логарифмом 'N'. –

+0

@EricPostpischil: взгляните на следующую строку: сдвиг на N соответствует мощности 2, т. Е. N - двойной логарифм n. – Matthias

+0

Текст в вашем ответе гласит: «N» - это количество образцов ». В коде в вопросе 'n' - количество выборок, но' N' не является, а также 'log2N' логарифмом' N', а также 'nOver2' половиной' N'.Я понимаю, что обычное использование в другом коде состоит в том, что 'N' - количество выборок, но это просто не так в коде в вопросе, что означает, что этот ответ содержит неправильные утверждения. –

Смежные вопросы