2015-05-02 3 views
-1

Я пытаюсь реализовать поцелуй FFT реальные вычисления.Как использовать настоящий kiss_fft для аудиоанализатора?

Как я уверен, все знают, что я не первый человек, спрашивающий о поцелуе FFT здесь, а не о kiss_fftr. Я довольно новичок в FFT, но получил большинство основ, и теперь я пытаюсь реализовать его в анализаторе аудиочастот в ATxmega192A3.

Вот базовый код, который я скопировал и модифицировал, пытаясь ввести 512 8-битных АЦП-образцов в БПФ, чтобы получить 256 выходов выходной частоты.

int size = 512; 
int isinverse = 1; 
kiss_fft_scalar zero; 
memset(&zero,0,sizeof(zero)); 
kiss_fft_cpx fft_in[size]; 
kiss_fft_cpx fft_out[size]; 

kiss_fftr_cfg fft = kiss_fftr_alloc(size*2,0,0,0); 

//load 512 samples from ADC into fft_in[].r and zero out fft_in[].i, fft_out[].i, and fft_out[].r 

kiss_fftr(fft, (kiss_fft_scalar*) fft_in, fft_out); 

Вот мои вопросы:

  1. Есть ли перекрытие в мусорное ведро? Смысл, если я смотрю .. скажем, 12-гигабайтный выезд, показывающий ТОЛЬКО 12 Гц, а не округление в 12,1 Гц частично (я знаю, что звук не совсем точен, так что будут остаточные физические эффекты, вызывающие помехи)?

  2. Мне сложно определить, как использовать kiss_fftr_cfg. Я не уверен в том, где все параметры помечены как использующие его с 8-битными int (или 16 бит, но не означает, что все мои входные образцы должны быть 16 бит? Все в предыдущем коде до и включая Объявление cfg Я не понимаю за пределами первых двух объявлений int, которые он сделал, и не уверен, почему он использовал memset вместо того, чтобы позволить kiss_fftr выделять пространство. Где я могу найти дополнительную информацию? Я просмотрел большую часть включенных файлы с kiss_fft, и, кажется, не найти много полезной информации рытье через код за счет часов и часов.

+1

Пожалуйста, прочтите справку-> тур, особенно часть о «no chit-chat» – Anthon

ответ

1

выходного FFT бункеров имеют пропускную способность примерно 2 * Fs/N (частота дискретизации по длине FFT), но спад или переход как функция в форме Sinc. Таким образом, все биты FFT-изображения перекрываются со всеми другими бункерами, за исключением бен-центров.

Использование поцелуя FFT требует знания о типах данных C и какие автоматические преобразования работают или нет.

+0

Хм, так что ответ на вопрос «1» «есть, да, есть перекрытие». Благодаря! Я знаю о способности C автоматически преобразовывать типы переменных, которые, как я полагаю, вы имеете в виду. Работа с плавающими точками занимает больше времени, чем say .. целые числа без знака, которые часто имеют большое значение для циклов процессора MCU. Я надеялся использовать целые числа вместо плавающей запятой по умолчанию, если это возможно, но не могу найти подробную документацию в любом месте по параметрам конфигурации! –