как рассчитать доминирующую частоту, используя numpy.fft в python

#python #pandas #numpy #fft #vibration

#python #pandas #numpy #fft #вибрация

Вопрос:

У меня есть этот фрейм данных о вибрации автомобиля, и я хочу рассчитать доминирующую частоту вибрации. Я знаю, что мы можем вычислить это, используя numpy.fft, но я понятия не имею, как я могу применить numpy.fft к моему фрейму данных. Пожалуйста, просветите меня, как это сделать на python. Спасибо.

Комментарии:

1. Будет полезно, если вы сможете поделиться образцами данных.

2. я хотел бы поделиться своими примерами данных, но как я могу это сделать?

Ответ №1:

Столбец dataframe фактически является массивом NumPy

 df = pd.DataFrame({"Vibration":[random.uniform(2,10) for i in range(10)]})
df["fft"] = np.fft.fft(df["Vibration"].values)
print(df.to_string())
  

вывод

    Vibration                  fft
0   8.212039  63.320213 0.000000j
1   5.590523   2.640720-2.231825j
2   8.945281  -2.977825-5.716229j
3   6.833036   4.657765 5.649944j
4   5.150939  -0.216720-0.445046j
5   3.174186  10.592292 0.000000j
6   9.054791  -0.216720 0.445046j
7   5.830278   4.657765-5.649944j
8   5.593203  -2.977825 5.716229j
9   4.935937   2.640720 2.231825j
  

пакетирование на каждые 15 строк

 df = pd.DataFrame({"Vibration":[random.uniform(2,10) for i in range(800)]})

df.assign(
    fft=df.groupby(df.index // 15)["Vibration"].transform(lambda s: np.fft.fft(list(s)).astype("object")),
    grpfirst=df.groupby(df.index // 15)["Vibration"].transform(lambda s: list(s)[0])
)


  

Комментарии:

1. спасибо! У меня 800 строк в моем фрейме данных, возможно ли это, если я хочу вычислить fft для каждых 15 строк?

2. спасибо! могу ли я узнать, почему grpfirst и fft дают разные значения?

3. Я не квант, поэтому не знаком с математикой calc…

Ответ №2:

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

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas .DataFrame.apply.html