Я собираю данные от датчиков акселерометров X, Y и Z, отобранных при частоте 200 Гц. 3 оси объединены в один сигнал под названием «XYZ_A cc». Я следовал инструкциям о том, как преобразовать сигнал во временной области в частотную область, используя библиотеку scipy fftpack.
Я использую следующий код:
from scipy.fftpack import fft
# get a 500ms slice from dataframe
sample500ms = df.loc[pd.to_datetime('2019-12-15 11:01:31.000'):pd.to_datetime('2019-12-15 11:01:31.495')]['XYZ_Acc']
f_s = 200 # sensor sampling frequency 200 Hz
T = 0.005 # 5 milliseconds between successive observation T =1/f_s
N = 100 # 100 samples in 0.5 seconds
f_values = np.linspace(0.0, f_s/2, N//2)
fft_values = fft(sample500ms)
fft_mag_values = 2.0/N * np.abs(fft_values[0:N//2])
Затем я строю график зависимости частоты от величина
fig_fft = plt.figure(figsize=(5,5))
ax = fig_fft.add_axes([0,0,1,1])
ax.plot(f_values,fft_mag_values)
Снимок экрана:
Моя задача сейчас заключается в том, как извлечь из этих данных такие функции, как неравномерность, основная частота, поток .. .
Может ли кто-нибудь направить меня в правильном направлении?
Обновление от 01.01.2009 - добавление контекста к моему вопросу.
I ' Я относительно новичок в машинном обучении, поэтому любые отзывы приветствуются. X, Y, Z - сигналы линейного ускорения, дискретизированные с частотой 200 Гц со смартфона. Я пытаюсь обнаружить дорожные аномалии, анализируя спектральную и временную статистику.
Вот пример файла csv, который анализируется в pandas фрейме данных с отметкой времени в качестве индекса.
X,Y,Z,Latitude,Longitude,Speed,timestamp
0.8756,-1.3741,3.4166,35.894833,14.354166,11.38,2019-12-15 11:01:30:750
1.0317,-0.2728,1.5602,35.894833,14.354166,11.38,2019-12-15 11:01:30:755
1.0317,-0.2728,1.5602,35.894833,14.354166,11.38,2019-12-15 11:01:30:760
1.0317,-0.2728,1.5602,35.894833,14.354166,11.38,2019-12-15 11:01:30:765
-0.1669,-1.9912,-4.2043,35.894833,14.354166,11.38,2019-12-15 11:01:30:770
-0.1669,-1.9912,-4.2043,35.894833,14.354166,11.38,2019-12-15 11:01:30:775
-0.1669,-1.9912,-4.2043,35.894833,14.354166,11.38,2019-12-15 11:01:30:780
В ответ на 'francis', два столбца добавленный через этот код:
df['XYZ_Acc_Mag'] = (abs(df['X']) + abs(df['Y']) + abs(df['Z']))
df['XYZ_Acc'] = (df['X'] + df['Y'] + df['Z'])
'XYZ_Acc_Mag' должен использоваться для извлечения временной статистики.
'XYZ_A cc' должен использоваться для извлечения спектральной статистики.
Данные 'XYZ_Acc_Mag' затем повторно отбираются с частотой 0,5 секунды, а временные характеристики, такие как среднее значение, стандартное отклонение и т. Д. c, извлекаются в виде новый фрейм данных. Парные графики показывают аномалию, показанную во время 11:01:35 на графике выше.
Теперь вернемся к моему первоначальному вопросу. Я повторяю выборку данных 'XYZ_A cc', также за 0,5 секунды, и получаю массив величин 'fft_mag_values'. Вопрос в том, как извлечь из него временные характеристики, такие как неравномерность, основная частота, поток?