БПФ с использованием Python - PullRequest
0 голосов
/ 19 июня 2020

Я получаю данные с датчика вибрации в виде двух массивов numpy. Первый массив представляет фактические значения для измерения вибрации, а второй массив представляет собой соответствующую информацию о времени (временная метка). Например:

vibraton_data = np.array([621,1546,262])

timestamps = np.array([1592583531, 1592583548, 1592583555])

Это означает, что для каждого измерения вибрации у меня есть информация о времени.

Сейчас я хотел бы применить быстрое преобразование Фурье. Кто-нибудь знает как это сделать? Моя первая попытка была бы примерно такой:

N = 600 
T = 1.0 / 800.0 
x = np.linspace(0.0, N*T, N)
yf = fft(vibration_data)
xf = np.linspace(0.0, 1.0/(2.0*T), N/2)

Но я не знаю, как здесь работать с информацией о времени из моего временного массива.

1 Ответ

1 голос
/ 19 июня 2020

Это действительно вопрос обработки сигналов, а не Python. Здесь у вас есть несколько вариантов:

  • если ваши данные равномерно выбраны - вы можете полностью игнорировать временные метки. Вся необходимая информация содержится в данных и (постоянная) частота дискретизации: f_s = 1.0 / (timestamps [1] - timestamps [0])
  • если нет, вы можете либо:
    • используйте Неоднородное ДПФ ( здесь - одна реализация, не пробовал)
    • интерполируйте данные между неоднородными временными метками, чтобы они стали однородными. Обратите внимание, что эффективно, это применяет фильтр нижних частот к вашим данным, что может быть не тем, что вы хотите (подробнее об эффектах интерполяции здесь ).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...