Понимание БПФ выходного



Мне нужна помощь в понимании вывода вычисления DFT/FFT.



Я опытный инженер-программист и должен интерпретировать некоторые показания акселерометра смартфона, такие как поиск основных частот. К сожалению, я проспал большую часть своих занятий в колледже ee пятнадцать лет назад, но я читал о DFT и FFT в течение последних нескольких дней (по-видимому, безрезультатно).



пожалуйста, никаких ответов "go take an ee class". Я на самом деле планирую сделать это, если мой работодатель заплатит мне. :)



Итак, вот моя проблема:



я захватил сигнал на 32 Гц. Вот 1 второй пример из 32 точек, которые я наметил в Excel.



enter image description here



Я тогда получил некоторые БПФ код написано на Java из Колумбийского университета (после выполнения предложений в сообщении на "надежный и быстрый БПФ в Java").



вывод этой программы выглядит следующим образом. Я поверьте, что он работает на месте БПФ, поэтому он повторно использует один и тот же буфер для ввода и вывода.



Before: 

Re: [0.887 1.645 2.005 1.069 1.069 0.69 1.046 1.847 0.808 0.617 0.792 1.384 1.782 0.925 0.751 0.858 0.915 1.006 0.985 0.97 1.075 1.183 1.408 1.575 1.556 1.282 1.06 1.061 1.283 1.701 1.101 0.702 ]

Im: [0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ]

After:

Re: [37.054 1.774 -1.075 1.451 -0.653 -0.253 -1.686 -3.602 0.226 0.374 -0.194 -0.312 -1.432 0.429 0.709 -0.085 0.0090 -0.085 0.709 0.429 -1.432 -0.312 -0.194 0.374 0.226 -3.602 -1.686 -0.253 -0.653 1.451 -1.075 1.774 ]

Im: [0.0 1.474 -0.238 -2.026 -0.22 -0.24 -5.009 -1.398 0.416 -1.251 -0.708 -0.713 0.851 1.882 0.379 0.021 0.0 -0.021 -0.379 -1.882 -0.851 0.713 0.708 1.251 -0.416 1.398 5.009 0.24 0.22 2.026 0.238 -1.474 ]


Итак, на данный момент я не могу сделать орел или решку вывода. Я понимаю, что понятия ТФП, таких как реальная часть амплитуды компонента Косинус волны, а мнимая часть амплитуды компонента синусоиды. Я также могу следовать этой диаграмме из великой книги"руководство ученого и инженера по цифровому сигналу Обработка":
enter image description here



Итак, мои конкретные вопросы:




  1. С выхода БПФ, как мне найти "наиболее встречающиеся частоты"? Это часть моего анализа данных акселерометра. Должен ли я читать реальные (косинус) или мнимые (синус) массивы?


  2. У меня есть 32-точечный вход во временной области. Разве выход БПФ не должен быть 16-элементным массивом для действительных и 16-элементным массивом для мнимых? Почему программа дает мне реальные и мнимые выходы массива обоих размеров 32?


  3. связанный с предыдущим вопросом, как мне проанализировать индексы в выходных массивах? Учитывая мой вход из 32 выборок, отобранных при 32 Гц, я понимаю, что выход 16-элементного массива должен иметь свой индекс, равномерно распределенный до 1/2 частоты дискретизации (32 Гц), поэтому я правильно понимаю, что каждый элемент массива представляет (32 Гц * 1/2) / 16 = 1 Хз?


  4. почему выход БПФ имеет отрицательные значения? Я думал, что значения представляют собой амплитуды синусоиды. Например, выход Real[ 3] = -1.075 должен означать амплитуду -1.075 для косинусной волны частоты 3. Это правда? Как может амплитуда быть отрицательной?


623   4  

4 ответов:

  1. вы не должны искать реальную или воображаемую часть комплексного числа (это то, что ваш реальный и воображаемый массив). Вместо этого вы хотите найти величину частоты, которая определяется как sqrt (real * real + imag * imag). Это число всегда будет положительным. Теперь все, что вам нужно найти, это максимальное значение (игнорировать первую запись в массиве. Это ваше смещение постоянного тока и не зависит от частоты информация.)

  2. вы получаете 32 реальных и 32 мнимых выхода, потому что вы используете комплекс для сложного БПФ. Помните, что вы преобразовали 32 выборки в 64 значения (или 32 комплексных значения), расширив их на нулевые мнимые части. Это приводит к симметричному выходу БПФ, где результат частоты происходит дважды. После готовности к использованию в выходах от 0 до N/2 и после зеркального отображения в выходах от N/2 до N. В вашем случае проще всего просто игнорировать выходы от N / 2 до N. вы они не нужны, они просто артефакт о том, как вы вычисляете свой БПФ.

  3. частота для уравнения БПФ-бин (bin_id * freq / 2)/(N / 2), где freq-ваша частота выборки (ака 32 Гц, а N-размер вашего БПФ). В вашем случае это упрощает до 1 Гц на бункер. Бункеры N / 2-N представляют собой отрицательные частоты (странная концепция, Я знаю). Для вашего случая они не содержат значимой информации, потому что они просто зеркало первые N/2 частоты.

  4. ваши реальные и мнимые части каждого бункера образуют комплексное число. Это нормально, если реальная и мнимая части отрицательны, а величина самой частоты положительна (см. Мой ответ на вопрос 1). Я предлагаю вам прочитать о комплексных числах. Объяснение того, как они работают (и почему они полезны), превышает то, что можно объяснить в одном stackoverflow-вопросе.

Примечание: Вы также можете прочитать, что автокорреляция, и как она используется, чтобы найти основную частоту сигнала. У меня такое чувство, что это то, чего ты действительно хочешь.

У вас уже есть несколько хороших ответов, но я просто добавлю, что вам действительно нужно применить функция окна к вашим данным временной области до БПФ, в противном случае вы получите неприятные артефакты в вашем спектре.

1) Ищите индексы в реальном массиве с самыми высокими значениями, кроме первого (это компонент DC). Вероятно, вам понадобится частота дискретизации значительно выше 32 Гц и больший размер окна, чтобы получить много значимых результатов.

2)вторая половина обоих массивов является зеркалом первой половины. Например, обратите внимание, что последний элемент реального массива (1.774) совпадает со вторым элементом (1.774), а последний элемент мнимого массив (1.474) является отрицательный второй элемент.

3) максимальная частота, которую вы можете подобрать при частоте дискретизации 32 Гц, составляет 16 Гц (предел Найквиста), поэтому каждый шаг составляет 2 Гц. Как отмечалось ранее, помните, что первый элемент равен 0 Гц (т. е. смещение постоянного тока).

4) конечно, отрицательная амплитуда имеет смысл. Это просто означает, что сигнал "перевернут" - стандартный БПФ основан на косинусе, который обычно имеет значение = 1 при t = 0, поэтому сигнал которые имели значение = -1 в момент времени = 0 будет иметь отрицательную амплитуду.

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

Comments

    Ничего не найдено.