Мне нужна помощь в понимании вывода вычислений DFT/FFT.
Я опытный инженер-программист и вам нужно интерпретировать некоторые показания акселерометра смартфона, например, найти основные частоты. К сожалению, я проспал большинство моих колледжей классов EE пятнадцать лет назад, но я читал DFT и FFT последние несколько дней (по-видимому, мало пользы).
Пожалуйста, никаких ответов от "go take the EE class". Я на самом деле планирую это сделать, если мой работодатель заплатит мне.:)
Итак, вот моя проблема:
Я захватил сигнал на 32 Гц. Вот 1-секундный образец из 32 пунктов, который я наметил в Excel.
Затем я получил некоторый код FFT, написанный на Java из Колумбийского университета (после того, как после предложений в сообщении "Надежный и быстрый FFT в Java" ).
Результат этой программы выглядит следующим образом. Я считаю, что он запускает FFT на месте, поэтому он повторно использует тот же буфер для ввода и вывода.
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 ]
Итак, на данный момент я не могу сделать головы или хвосты вывода. Я понимаю понятия ДПФ, такие как реальная часть, являющаяся амплитудами компонентных косинусных волн, а мнимая часть - амплитудами компонентных синусоидальных волн. Я также могу следовать этой диаграмме из большой книги "" Руководство для инженеров-разработчиков и инженеров по цифровой обработке сигналов":
Итак, мои конкретные вопросы:
-
Из вывода БПФ, как мне найти "наиболее часто встречающиеся частоты"? Это часть моего анализа данных акселерометра. Должен ли я читать реальные (косинусные) или мнимые (синусные) массивы?
-
У меня есть 32-точечный ввод во временной области. Должна ли выход БПФ быть 16-элементным массивом для реалов и 16-элементным массивом для мнимого? Почему программа дает мне реальные и мнимые выходы массивов размером 32?
-
В связи с предыдущим вопросом, как я анализирую индексы в выходных массивах? Учитывая мой ввод 32 образцов, отобранных на 32 Гц, я понимаю, что выход из массива на 16 элементов должен иметь свой индекс, равномерно распределенный до 1/2 частоты дискретизации (32 Гц), поэтому я правильно понимаю, что каждый элемент (32 Гц * 1/2)/16 = 1 Гц?
-
Почему вывод FFT имеет отрицательные значения? Я думал, что значения представляют собой амплитуды синусоиды. Например, выход Real [3] = -1.075 должен означать амплитуду -1.075 для косинусоидальной волны с частотой 3. Правильно ли это? Как амплитуда может быть отрицательной?