Как извлечь функции из БПФ? - PullRequest
5 голосов
/ 06 января 2020

Я собираю данные от датчиков акселерометров 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)

Снимок экрана:

screenshot

Моя задача сейчас заключается в том, как извлечь из этих данных такие функции, как неравномерность, основная частота, поток .. .

Может ли кто-нибудь направить меня в правильном направлении?

Обновление от 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' должен использоваться для извлечения спектральной статистики.

lineplot

Данные 'XYZ_Acc_Mag' затем повторно отбираются с частотой 0,5 секунды, а временные характеристики, такие как среднее значение, стандартное отклонение и т. Д. c, извлекаются в виде новый фрейм данных. Парные графики показывают аномалию, показанную во время 11:01:35 на графике выше.

pairplot

Теперь вернемся к моему первоначальному вопросу. Я повторяю выборку данных 'XYZ_A cc', также за 0,5 секунды, и получаю массив величин 'fft_mag_values'. Вопрос в том, как извлечь из него временные характеристики, такие как неравномерность, основная частота, поток?

1 Ответ

3 голосов
/ 08 января 2020

Поскольку «XYZ_A cc» определяется как линейная комбинация компонентов сигнала, имеет смысл использовать его ДПФ. Это эквивалентно использованию 1D акселерометра в направлении (1,1,1). Но может быть принята точка зрения, более связанная с физической энергией. Вычисление ДПФ аналогично записи сигнала в виде суммы синусов. Если вектор ускорения записывает:

Соответствующий вектор скорости может записать:

https://latex.codecogs.com/gif.latex?%5Cvec%7Bv%7D%3D-%5Cfrac%7B1%7D%7Bw%7D%5Cvec%7Ba%7D_0%5C%3B%20%5Ccos%28wt%29

и заданные c kineti c energy пишет:

Этот метод требует вычисления ДПФ для каждого компонента до величины, соответствующей каждой частоте.

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

Кроме того, частота данного пика лучше оценивается как средняя частота относительно плотности мощности, как показано в Почему значения частоты округляются в сигнале с использованием БПФ?

Другим инструментом для оценки основных частот является вычисление автокорреляции сигнала: она выше вблизи периодов сигнала. Поскольку сигнал представляет собой вектор из трех компонентов, может быть построена матрица автокорреляции. Это эрмитова матрица 3x3 для каждого времени и, следовательно, имеет реальные собственные значения. Максимумы более высокого собственного значения можно представить как величину колебаний, в то время как соответствующий собственный вектор представляет собой сложное направление, в некоторой степени аналогичное направлению колебаний, объединенному со смещениями angular. Смещение angular может сигнализировать о эллипсоидальной вибрации.

Вот ложный сигнал, построенный путем добавления шума и синусоидальных волн: gaussian noise and sine wave

Вот спектр плотности мощности для данного кадра, перекрывающего синусоидальную волну: power  spectral density of the accelerometer

Вот результирующие собственные значения автокорреляции того же кадра, где период синусоидальной волны 50 Гц равен видимый. Вертикальное масштабирование неверно: eigenvalues of the autocorrelation of accelerometer

Вот пример кода:

Выход:

frame 0  time  0.0  s
frame 1  time  0.5  s
frame 2  time  1.0  s
frame 3  time  1.5  s
frame 4  time  2.0  s
found peak at frequency 50.11249238149811  of height 0.2437842149351196
found fundamental frequency : 50.31467771196368 eigenvalue 47.03344783764712  dir vibration  [-0.11441502+0.00000000e+00j  0.0216911 +2.98101624e-18j
 -0.9931962 -5.95276353e-17j]
frame 5  time  2.5  s
frame 6  time  3.0  s
found peak at frequency 30.027895460975156  of height 0.3252387031089667
found fundamental frequency : 29.60690406120401 eigenvalue 61.51059682797539  dir vibration  [ 0.11384195+0.00000000e+00j -0.98335779-4.34688198e-17j
 -0.14158908+3.87566125e-18j]
frame 7  time  3.5  s
found peak at frequency 26.39622018109896  of height 0.042081187689137545
found fundamental frequency : 67.65844834016518 eigenvalue 6.875616417422696  dir vibration  [0.8102307 +0.00000000e+00j 0.32697001-8.83058693e-18j
 0.48643275-4.76094302e-17j]
frame 8  time  4.0  s
frame 9  time  4.5  s

Частоты 50 Гц и 30 Гц были зафиксированы как 50,11 / 50,31 Гц и 30,02 / 29,60 Гц, и направления также достаточно точны. Последняя функция в 26,39 Гц / 67,65 Гц, вероятно, является мусором, поскольку она имеет разные частоты для двух методов и более низкую величину / собственное значение.

Что касается мониторинга дорожного покрытия для улучшения обслуживания, я знаю проект на моем compagny, называется

Aigle3D . Лазер, установленный в задней части фургона, сканирует дорогу со скоростью шоссе с точностью до миллиметра c. Фургон также оснащен сервером, камерами и другими датчиками, таким образом предоставляя огромное количество данных о геометрии дороги и дефектах, которые в настоящее время покрывают сотни километров французской национальной сети автомобильных дорог. Обнаружение и устранение небольших ранних дефектов и трещин может продлить срок службы дороги при ограниченных затратах. Если это полезно, данные с акселерометров ежедневных пользователей могут действительно дополнить систему мониторинга, позволяя быстрее реагировать, когда появляется большая выбоина.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...