2016-10-03 9 views
1

Я довольно новичок в обработке сигналов, поэтому простите меня, если я немного рассержусь. Я загрузил и установил FFTW для окон. Документация в порядке, но у меня все еще есть запросы.Вычисление дискретного преобразования Фурье аудиоданных с помощью FFTW

Моя общая цель - захватить необработанные аудиоданные, отснятые со звуковой карты на компьютере со скоростью 44100 часов/с (эта задача уже реализована с использованием библиотек и моего кода), а затем выполнить DFT на блоках этих аудиоданных ,

Меня интересует только поиск ряда частотных компонентов в аудио, и я не буду выполнять обратный ДПФ. В этом случае, является реальным для реального преобразования все, что необходимо, следовательно, функция fftw_plan_r2r_1d()?

Мои блоки данных, которые необходимо преобразовать, составляют 11025 образцов. Моя функция вызывается, как показано ниже. Это приведет к созданию массива спектра из 11025 бункеров. Как узнать максимальный частотный компонент в результате?

Я считаю, что интервал между ячейками равен Fs/n, 44100/11025, поэтому 4. Это означает, что у меня будет спектр частот в массиве от 0 Гц до 44100 Гц с шагом 4 или до половины частоты nyquist 22200?

Это было бы проблемой для меня, так как я хотел только искать частоты от 60 Гц до 3000 Гц. Есть ли способ ограничить диапазон преобразования?

Я не вижу никаких аргументов для функции, или, может быть, есть другой способ?

Большое спасибо за любую помощь в этом.

p = fftw_plan_r2r_1d(11025, audioData, spectrum, FFTW_REDFT00, FFTW_ESTIMATE); 
+0

Один вопрос на вопрос пожалуйста. –

ответ

1

Чтобы ответить на некоторые из ваших индивидуальных вопросов из вышеизложенного:

  • вам нужна реальная к сложному преобразования, а не реальной к реальному
  • вы будете рассчитать величину сложные выходные лотки на частотах, представляющих интерес (magnitude = sqrt(re*re + im*im))
  • разрешение по частоте, действительно Fs/N = 44100/11025 = 4 Hz, то есть ширина каждого выходного лотка составляет 4 Гц
  • е или преобразование из реального в комплекс вы получаете N/2 + 1 выходных ящиков, которые дают вам частоты от 0 до Fs/2
  • Вы просто игнорируете частоты, в которых вас не интересует - БПФ очень эффективен, поэтому вы можете позволить себе «тратить "нежелательные выходные лотки (если вы не заинтересованы только в относительно небольшого количества выходных частот)

дополнительных примечаний:

  • создание плана на самом деле не выполняет БПФ - как правило, вы создаете план один раз и затем используйте его много раз (по телефону fftw_execute)
  • для производительности вы, вероятно, хотите использовать вызовы с одной точкой (например,fftwf_execute, а не fftw_execute, а так же для создания плана и т.д.)

Некоторые полезные сопутствующие вопросы/ответы на StackOverflow:

Есть много других подобных вопросов и ответов, которые вы также можете прочитать - найдите теги и .

Также обратите внимание, что dsp.stackexchange.com является предпочтительным сайтом для вопросов по DSP теории, а не конкретным конкретным проблемам программирования.

+0

С уважением, Пол Р. Что произойдет, если я сделаю реальное преобразование вместо реального в сложное? Я всегда думал, что если меня интересуют только амплитуды частотных составляющих, мне нужна только реальная часть. – Engineer999

+0

Нет, вам не нужна «только реальная часть» - каждая частотная составляющая имеет величину и фазу - это выражается как комплексное число (см. Второй пункт выше, как получить только * величину * от сложный выходной лоток). Обратите внимание, что FFTW поддерживает преобразования реального в реальном, но это не дискретные * преобразования Фурье *, а дискретные * Хартли/Косинус/Синус * Преобразования. См. [Документация FFTW для реальных видов преобразования] (http://www.fftw.org/doc/Real_002dto_002dReal-Transform-Kinds.html). –

+0

Еще раз спасибо за вашу помощь. Я знаю, я должен был спросить об этом на странице DSP, поскольку это скорее относится к теории, а не к кодированию. Имеет ли значение объем данных данных во временной области? Означает ли это, что величина выходных блоков FFT будет выше. Кроме того, поскольку у меня есть дискретные аудиоданные, которые преобразуются, это будет преобразование в сложное преобразование. Что будет примером тогда комплексно-сложного. Когда мы можем получить данные временной области, которые являются сложными? – Engineer999