Как выбрать частоты из DFT

#dft

#dft

Вопрос:

Предположим последовательность чисел (волнообразные данные). Затем я выполняю преобразование DFT (или БПФ). Следующий шаг, которого я хочу достичь, — это найти частоты, соответствующие реальным частотам, которые включены в данные. Как мы знаем, вывод DFT имеет действительную и мнимую части a [i] и b [i]. Если мы посмотрим на спектр (sqrt(a [i] ^ 2 b [i] ^ 2), то максимум в нем соответствует частоте, которая включена в данные. Вопрос в том, как найти все частоты из DFT? Проблема возникает, когда есть много других пиков, которые могут быть выбраны ошибочно.

Ответ №1:

У меня была похожая проблема при обработке данных спектральным анализом, когда я писал дипломную работу с отличием.

Вы правы: чтобы найти доминирующие частоты, вам обычно нужно только посмотреть на величину комплексного значения в DFT.

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

Способ, которым я это сделал, заключался в том, чтобы определить области в DFT с высокой магнитудой (пики), которые были окружены низкой величиной (впадины). Вы можете определить минимальную разницу между пиками и впадинами (чувствительность) как постоянную, умноженную на стандартное отклонение данных. Кроме того, вы можете сказать, что любые пики, которые опускаются ниже определенной величины (порога), вообще игнорируются, поскольку они являются просто шумом.

Конечно, описанный выше метод будет действительно работать, только если у вас есть относительно четко определенные частоты в ваших данных. Если ваше DFT сильно отличается случайностью, то вам нужно будет проявить особую осторожность, чтобы тщательно установить чувствительность и пороговое значение.

Не забывайте, что величина ваших данных симметрична, поэтому вам нужно посмотреть только на половину из них.

После того, как вы определили частоты в вашем DFT, не забудьте преобразовать их в нужные вам единицы. Из памяти, если у вас есть n выборок, взятых с дискретизацией по времени dt, то если у вас есть пик в точке данных 5 (например), где первая точка данных равна 1, то частота равна 1 / (n * dt) радианам в единицу времени. (Я давно этого не делал, так что эта формула может отличаться на коэффициент Pi или что-то в этом роде)