Я довольно новичок в DSP, и провел некоторые исследования возможных фильтров для сглаживания данных акселерометра в Python. Пример типа данных, которые я получу, можно увидеть на следующем рисунке:
По сути, я ищу совет, чтобы сгладить эти данные, чтобы в конечном итоге преобразовать их в скорость и смещение. Я понимаю, что акселерометры от мобильных телефонов очень шумные.
Я не думаю, что могу использовать фильтр Калмана в данный момент, потому что не могу достать устройство, чтобы сослаться на шум, производимый данными (я прочитал, что важно разместить устройство ровно и найти количество шума из этих показаний?)
БПФ дал некоторые интересные результаты. Одна из моих попыток состояла в том, чтобы БПФ ускорить сигнал, а затем визуализировать низкие частоты, чтобы получить абсолютное значение БПФ 0. Затем я использовал омега-арифметику и обратное БПФ, чтобы получить график скорости. Результаты были следующими:
Это хороший способ идти о вещах? Я пытаюсь устранить общую шумовую природу сигнала, но необходимо определить очевидные пики, например, около 80 секунд.
Я также устал использовать фильтр низких частот для исходных данных акселерометра, который отлично справился со сглаживанием, но я не совсем уверен, куда идти дальше. Любое руководство о том, куда идти отсюда, будет очень полезно!
РЕДАКТИРОВАТЬ: немного кода:
for i in range(len(fz)):
testing = (abs(Sz[i]))/Nz
if fz[i] < 0.05:
Sz[i]=0
Velfreq = []
Velfreqa = array(Velfreq)
Velfreqa = Sz/(2*pi*fz*1j)
Veltimed = ifft(Velfreqa)
real = Veltimed.real
Итак, по сути, я выполнил БПФ на моих данных акселерометра, дав Sz, отфильтровывающий высокие частоты с помощью простого фильтра кирпичной стены (я знаю, что это не идеально). Затем я использую арифметику омега на БПФ данных. Также большое спасибо datageist за добавление моих изображений в мой пост :)
fz
массива, похоже, что вы применяете фильтр верхних частот.