Как выбрать частоты из DFT - PullRequest
3 голосов
/ 12 мая 2011

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

1 Ответ

3 голосов
/ 12 мая 2011

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

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

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

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

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

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

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

...