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